From c40f760dba0430d9141eb2825bb2f5d3b64a21b1 Mon Sep 17 00:00:00 2001 From: georapbox Date: Mon, 5 Feb 2024 23:35:54 +0200 Subject: [PATCH] Create build --- docs/{index.4e55d6a2.css => index.47ef8ac4.css} | 4 ++-- docs/index.47ef8ac4.css.map | 1 + docs/index.4e55d6a2.css.map | 1 - docs/{index.671cb7f2.js => index.a2b8f4c4.js} | 4 ++-- docs/{index.671cb7f2.js.map => index.a2b8f4c4.js.map} | 2 +- docs/{index.4f090451.js => index.ac06585e.js} | 4 ++-- docs/{index.4f090451.js.map => index.ac06585e.js.map} | 2 +- docs/index.html | 2 +- docs/service-worker.js | 2 +- docs/service-worker.js.map | 2 +- src/css/main.css | 4 ++-- 11 files changed, 14 insertions(+), 14 deletions(-) rename docs/{index.4e55d6a2.css => index.47ef8ac4.css} (99%) create mode 100644 docs/index.47ef8ac4.css.map delete mode 100644 docs/index.4e55d6a2.css.map rename docs/{index.671cb7f2.js => index.a2b8f4c4.js} (99%) rename docs/{index.671cb7f2.js.map => index.a2b8f4c4.js.map} (99%) rename docs/{index.4f090451.js => index.ac06585e.js} (99%) rename docs/{index.4f090451.js.map => index.ac06585e.js.map} (99%) diff --git a/docs/index.4e55d6a2.css b/docs/index.47ef8ac4.css similarity index 99% rename from docs/index.4e55d6a2.css rename to docs/index.47ef8ac4.css index adb5857..e564f1a 100644 --- a/docs/index.4e55d6a2.css +++ b/docs/index.47ef8ac4.css @@ -1,2 +1,2 @@ -: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]{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}*,:after,:before{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:transparent;margin:0}hr{color:inherit;border:0;border-top:var(--bs-border-width)solid;opacity:.25;margin:1rem 0}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{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 (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{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}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{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{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,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}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,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}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button: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;font-size:calc(1.275rem + .3vw);line-height:inherit;width:100%;margin-bottom:.5rem;padding:0}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field{padding:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-hour-field{padding:0}::-webkit-datetime-edit-minute{padding:0}::-webkit-datetime-edit-month-field{padding:0}::-webkit-datetime-edit-text{padding:0}::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled,.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-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);width:100%;margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{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>*{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;width:100%;max-width:100%}.col{flex:1 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 (min-width:576px){.col-sm{flex:1 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 (min-width:768px){.col-md{flex:1 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 (min-width:992px){.col-lg{flex:1 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 (min-width:1200px){.col-xl{flex:1 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 (min-width:1400px){.col-xxl{flex:1 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:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#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:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#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 (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-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{color:var(--bs-body-color);-webkit-appearance:none;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;width:100%;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::-webkit-file-upload-button{-webkit-margin-end:.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);margin:-.375rem -.75rem;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}.form-control::file-selector-button{-webkit-margin-end:.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:-.375rem -.75rem;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])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{color:var(--bs-body-color);border:solid #0000;border-width:var(--bs-border-width)0;background-color:#0000;width:100%;margin-bottom:0;padding:.375rem 0;line-height:1.5;display:block}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{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{-webkit-margin-end:.5rem;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{-webkit-margin-end:1rem;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{height:calc(1.5em + .75rem + calc(var(--bs-border-width)*2));width:3rem;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");color:var(--bs-body-color);-webkit-appearance:none;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;width:100%;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;-webkit-appearance:none;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;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='%2386b7fe'/%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{-webkit-appearance:none;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{-webkit-appearance:none;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{-webkit-appearance:none;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;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width)solid transparent;transform-origin:0 0;height:100%;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-plaintext::-moz-placeholder{color:#0000}.form-floating>.form-control::-moz-placeholder{color:#0000}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:#0000}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}:-webkit-any(.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:not(:placeholder-shown)){padding-top:1.625rem;padding-bottom:.625rem}:-webkit-any(.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill){padding-top:1.625rem;padding-bottom:.625rem}:-webkit-any(.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:not(:placeholder-shown)),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),:-webkit-any(.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill),.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}:is(.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:not(:placeholder-shown)),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),:is(.form-floating>.form-control-plaintext:autofill,.form-floating>.form-control:autofill),.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>.form-control:not(:-moz-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>.form-control-plaintext~label:after,.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-select~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>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width)0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--bs-secondary-bg)}.input-group{flex-wrap:wrap;align-items:stretch;width:100%;display:flex;position:relative}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:auto;width:1%;min-width:0;position:relative}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{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>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:var(--bs-border-radius-lg);padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{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)>.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:not(.has-validation)>:not(:last-child):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,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{color:var(--bs-form-valid-color);width:100%;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%}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control: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.1z'/%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)}.form-control.is-valid:focus,.was-validated .form-control: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)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,right 2.25rem center;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(1.5em + 3.75rem)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:var(--bs-form-invalid-color);width:100%;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%}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control: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)}.form-control.is-invalid:focus,.was-validated .form-control: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)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select: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}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(1.5em + 3.75rem)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):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,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{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,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px #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-group-lg>.btn,.btn-lg{--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-group-sm>.btn,.btn-sm{--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}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-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 (min-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 (min-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 (min-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 (min-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 (min-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{margin:var(--bs-dropdown-divider-margin-y)0;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1;height:0;overflow:hidden}.dropdown-item{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;width:100%;font-weight:400;text-decoration:none;display:block}.dropdown-item:focus,.dropdown-item:hover{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-vertical>.btn,.btn-group>.btn{flex:auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{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>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.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-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.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:focus,.nav-link:hover{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:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{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:focus,.nav-underline .nav-link:hover{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-item,.nav-fill>.nav-link{text-align:center;flex:auto}.nav-justified .nav-item,.nav-justified>.nav-link{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-lg,.navbar>.container-md,.navbar>.container-sm,.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:focus,.navbar-brand:hover{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:focus,.navbar-text a:hover{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 (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{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 (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{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 (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{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 (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{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 (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{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;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;min-width:0;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-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{flex-flow:wrap;display:flex}.card-group>.card{flex:1 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-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{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-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{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='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform .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='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 .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{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;width:100%;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;border-color:var(--bs-accordion-btn-focus-border-color);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-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y)var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-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-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: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}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{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(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:.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:1rem}}.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-action{color:var(--bs-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{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:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.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-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:.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;--bs-btn-close-white-filter:invert(1)grayscale(100%)brightness(200%);box-sizing:content-box;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg)center/1em auto no-repeat;opacity:var(--bs-btn-close-opacity);border:0;border-radius:.375rem;width:1em;height:1em;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,[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.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);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;max-width:100%}.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: ;--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{margin:var(--bs-modal-margin);pointer-events:none;width:auto;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{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;width:100%;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;justify-content:space-between;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:calc(-.5*var(--bs-modal-header-padding-y))calc(-.5*var(--bs-modal-header-padding-x))calc(-.5*var(--bs-modal-header-padding-y))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 (min-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 (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{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-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-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-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .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-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-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-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .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:after,.popover .popover-arrow:before{content:"";border:0 solid #0000;display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-top>.popover-arrow:before{border-width:var(--bs-popover-arrow-height)calc(var(--bs-popover-arrow-width)*.5)0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--bs-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.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-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-end>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5)var(--bs-popover-arrow-height)calc(var(--bs-popover-arrow-width)*.5)0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--bs-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:before{border-width:0 calc(var(--bs-popover-arrow-width)*.5)var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--bs-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-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-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.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-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-start>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5)0 calc(var(--bs-popover-arrow-width)*.5)var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--bs-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.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-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translate(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{z-index:1;color:#fff;text-align:center;opacity:.5;background:0 0;border:0;justify-content:center;align-items:center;width:15%;padding:0;transition:opacity .15s;display:flex;position:absolute;top:0;bottom:0}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-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 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{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;opacity:.5;background-color:#fff;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:#fff;text-align:center;padding-top:1.25rem;padding-bottom:1.25rem;position:absolute;bottom:1.25rem;left:15%;right:15%}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert()grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert()grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{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%;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-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--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 (max-width:575.98px){.offcanvas-sm{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-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 (max-width:767.98px){.offcanvas-md{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-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 (max-width:991.98px){.offcanvas-lg{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-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 (max-width:1199.98px){.offcanvas-xl{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-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 (max-width:1399.98px){.offcanvas-xxl{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-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);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;max-width:100%;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.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{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);justify-content:space-between;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))}.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;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-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:focus,.link-primary:hover{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;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-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:focus,.link-secondary:hover{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;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-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:focus,.link-success:hover{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;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-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:focus,.link-info:hover{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;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-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:focus,.link-warning:hover{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;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-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:focus,.link-danger:hover{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;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-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:focus,.link-light:hover{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;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-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:focus,.link-dark:hover{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;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-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:focus,.link-body-emphasis:hover{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;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-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));-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));-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:focus-visible>.bi,.icon-link-hover:hover>.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 (min-width:576px){.sticky-sm-top{z-index:1020;position:sticky;top:0}.sticky-sm-bottom{z-index:1020;position:sticky;bottom:0}}@media (min-width:768px){.sticky-md-top{z-index:1020;position:sticky;top:0}.sticky-md-bottom{z-index:1020;position:sticky;bottom:0}}@media (min-width:992px){.sticky-lg-top{z-index:1020;position:sticky;top:0}.sticky-lg-bottom{z-index:1020;position:sticky;bottom:0}}@media (min-width:1200px){.sticky-xl-top{z-index:1020;position:sticky;top:0}.sticky-xl-bottom{z-index:1020;position:sticky;bottom:0}}@media (min-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-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!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{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;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;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;-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 (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}:root{--body-color:#212529;--move-btn-width:60px;--move-btn-height:34px;--focus-ring:0 0 0 .2rem #268fff80;accent-color:var(--bs-primary)}:not(:defined){display:none!important}html,body{font-size:14px}body{background-color:#eae9e9;overflow-x:hidden}[hidden]{display:none!important}a:focus-visible,details summary:focus-visible{box-shadow:var(--focus-ring);border-radius:.25rem;outline:0;transition:box-shadow .15s ease-in-out}.container{max-width:1400px}.site-header{text-align:center;flex-direction:column;align-items:center;row-gap:.5rem;margin:3rem .5rem;display:flex}.page-title{margin-bottom:0;font-weight:300}.canvas{max-width:100%;display:block}.inputs-container input[type=color],.settings-button{cursor:pointer;border:0;width:30px;height:30px;margin:0 2px;padding:0;line-height:1}.inputs-container .meme-text{min-width:0;height:calc(1.5em + .75rem + 2px);min-height:calc(1.5em + .75rem + 2px);margin:.5rem}.settings-button{background-image:url(gear.b3b5d1a5.svg);background-position:50%;background-repeat:no-repeat;background-size:60%}.inputs-container{flex:1}.inputs-container:empty{display:none}.instructions{text-align:center;text-wrap:balance;flex-direction:column;justify-content:center;align-items:center;row-gap:1rem;height:100%;min-height:200px;padding:1rem;display:flex}.errorsContainer{z-index:1051;pointer-events:none;width:100%;position:fixed;top:0;left:0}.errorsContainer .alert{pointer-events:all}details[open] summary{margin-bottom:.5rem}button[data-button=delete-text-box]{background-image:url(trash.d9edab78.svg);background-position:50%;background-repeat:no-repeat;width:25px;min-width:25px;height:25px;margin-left:.5rem;padding:0}.gallery{scroll-behavior:smooth;gap:.5rem;min-height:112px;margin:0;padding:.25rem 0;display:flex;overflow-x:auto}.gallery>button{cursor:pointer;padding:0}.gallery>button>img{object-fit:cover;border-radius:.2rem;min-width:88px;height:88px;display:block}.gallery__no-results{text-align:center;flex:1;justify-content:center;align-items:center;display:flex}.move-text-actions{width:calc(var(--move-btn-width)*3);height:calc(var(--move-btn-height)*2);margin:0 auto;position:relative}.move-text-actions [data-move]{width:var(--move-btn-width);height:var(--move-btn-height);background-position:50%;background-repeat:no-repeat;position:absolute}.move-text-actions [data-move=offsetY][data-sign=\-]{top:-1px;left:var(--move-btn-width);background-image:url(chevron-up.f532d8b6.svg)}.move-text-actions [data-move=offsetY][data-sign=\+]{top:calc(var(--move-btn-height) + 1px);left:var(--move-btn-width);background-image:url(chevron-down.ad14d981.svg)}.move-text-actions [data-move=offsetX][data-sign=\-]{top:calc(var(--move-btn-height)/2);background-image:url(chevron-left.20a2f252.svg);left:-2px}.move-text-actions [data-move=offsetX][data-sign=\+]{top:calc(var(--move-btn-height)/2);left:calc(var(--move-btn-width)*2 + 2px);background-image:url(chevron-right.1be074ac.svg)}capture-photo:not(:defined){display:none}capture-photo{overflow:hidden}capture-photo::part(video){background-color:#000;width:100%}capture-photo::part(actions-container){justify-content:center;align-items:center;gap:2rem;padding:1rem 0;display:flex}capture-photo::part(capture-button),capture-photo::part(facing-mode-button){text-indent:-9999px;cursor:pointer;-webkit-appearance:none;appearance:none;background-position:50%;background-repeat:no-repeat;border-radius:50%;overflow:hidden;box-shadow:0 0 1rem #0000004d}capture-photo::part(capture-button){background-color:#c2c3c7;background-image:url(aperture.4bf28ce8.svg);background-size:90%;border:5px solid #fff;width:70px;height:70px}capture-photo::part(facing-mode-button){background-color:#fff;background-image:url(camera-reverse.284e8ac9.svg);background-size:60%;border:0;width:50px;height:50px;margin-right:calc(-50px - 2rem)}capture-photo[loading]::part(video){background-image:url(spinner.4452ed29.svg);background-position:50%;background-repeat:no-repeat;background-size:60px}capture-photo[loading]::part(capture-button),capture-photo[loading]::part(facing-mode-button){opacity:.6;pointer-events:none}modal-element{--me-width:fit-content;--me-border-radius:.25rem;--me-border-width:0;--me-box-shadow:0 0 1rem 0 #0000004d}#videoModal{--me-width:600px}#downloadModal::part(base){max-width:1024px}modal-element::part(base):focus-visible{outline:0}modal-element [slot=header]{color:var(--body-color);margin:0}modal-element::part(close){color:var(--body-color);border-radius:.25rem;transition:box-shadow .15s ease-in-out}modal-element::part(close):focus-visible{box-shadow:var(--focus-ring);outline:0}modal-element::part(body){padding-block:0}modal-element [slot=footer]{text-align:center;flex-wrap:wrap;justify-content:center;align-items:center;gap:.25rem;display:flex}files-dropzone{--dropzone-border-color:var(--bs-secondary);--dropzone-border-color-hover:var(--bs-primary);--dropzone-border-color-dragover:var(--bs-primary);--dropzone-background-color-hover:var(--bs-light);--dropzone-background-color-dragover:var(--bs-light);--dropzone-focus-box-shadow:var(--focus-ring);height:100%}files-dropzone::part(dropzone){height:100%;padding:.5rem}.text-underline{text-decoration:underline} -/*# sourceMappingURL=index.4e55d6a2.css.map */ +: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]{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}*,:after,:before{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:transparent;margin:0}hr{color:inherit;border:0;border-top:var(--bs-border-width)solid;opacity:.25;margin:1rem 0}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{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 (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{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}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{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{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,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}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,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}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button: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;font-size:calc(1.275rem + .3vw);line-height:inherit;width:100%;margin-bottom:.5rem;padding:0}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field{padding:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-hour-field{padding:0}::-webkit-datetime-edit-minute{padding:0}::-webkit-datetime-edit-month-field{padding:0}::-webkit-datetime-edit-text{padding:0}::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled,.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-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);width:100%;margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{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>*{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;width:100%;max-width:100%}.col{flex:1 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 (min-width:576px){.col-sm{flex:1 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 (min-width:768px){.col-md{flex:1 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 (min-width:992px){.col-lg{flex:1 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 (min-width:1200px){.col-xl{flex:1 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 (min-width:1400px){.col-xxl{flex:1 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:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#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:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#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 (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-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{color:var(--bs-body-color);-webkit-appearance:none;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;width:100%;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::-webkit-file-upload-button{-webkit-margin-end:.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);margin:-.375rem -.75rem;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}.form-control::file-selector-button{-webkit-margin-end:.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:-.375rem -.75rem;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])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{color:var(--bs-body-color);border:solid #0000;border-width:var(--bs-border-width)0;background-color:#0000;width:100%;margin-bottom:0;padding:.375rem 0;line-height:1.5;display:block}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{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{-webkit-margin-end:.5rem;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{-webkit-margin-end:1rem;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{height:calc(1.5em + .75rem + calc(var(--bs-border-width)*2));width:3rem;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");color:var(--bs-body-color);-webkit-appearance:none;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;width:100%;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;-webkit-appearance:none;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;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='%2386b7fe'/%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{-webkit-appearance:none;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{-webkit-appearance:none;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{-webkit-appearance:none;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;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width)solid transparent;transform-origin:0 0;height:100%;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-plaintext::-moz-placeholder{color:#0000}.form-floating>.form-control::-moz-placeholder{color:#0000}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:#0000}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}:-webkit-any(.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:not(:placeholder-shown)){padding-top:1.625rem;padding-bottom:.625rem}:-webkit-any(.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill){padding-top:1.625rem;padding-bottom:.625rem}:-webkit-any(.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:not(:placeholder-shown)),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),:-webkit-any(.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill),.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}:is(.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:not(:placeholder-shown)),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),:is(.form-floating>.form-control-plaintext:autofill,.form-floating>.form-control:autofill),.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>.form-control:not(:-moz-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>.form-control-plaintext~label:after,.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-select~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>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width)0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--bs-secondary-bg)}.input-group{flex-wrap:wrap;align-items:stretch;width:100%;display:flex;position:relative}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:auto;width:1%;min-width:0;position:relative}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{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>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:var(--bs-border-radius-lg);padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{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)>.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:not(.has-validation)>:not(:last-child):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,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{color:var(--bs-form-valid-color);width:100%;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%}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control: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.1z'/%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)}.form-control.is-valid:focus,.was-validated .form-control: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)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,right 2.25rem center;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(1.5em + 3.75rem)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:var(--bs-form-invalid-color);width:100%;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%}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control: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)}.form-control.is-invalid:focus,.was-validated .form-control: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)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select: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}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(1.5em + 3.75rem)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):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,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{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,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px #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-group-lg>.btn,.btn-lg{--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-group-sm>.btn,.btn-sm{--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}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-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 (min-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 (min-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 (min-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 (min-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 (min-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{margin:var(--bs-dropdown-divider-margin-y)0;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1;height:0;overflow:hidden}.dropdown-item{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;width:100%;font-weight:400;text-decoration:none;display:block}.dropdown-item:focus,.dropdown-item:hover{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-vertical>.btn,.btn-group>.btn{flex:auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{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>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.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-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.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:focus,.nav-link:hover{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:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{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:focus,.nav-underline .nav-link:hover{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-item,.nav-fill>.nav-link{text-align:center;flex:auto}.nav-justified .nav-item,.nav-justified>.nav-link{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-lg,.navbar>.container-md,.navbar>.container-sm,.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:focus,.navbar-brand:hover{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:focus,.navbar-text a:hover{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 (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{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 (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{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 (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{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 (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{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 (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{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;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;min-width:0;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-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{flex-flow:wrap;display:flex}.card-group>.card{flex:1 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-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{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-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{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='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform .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='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 .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{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;width:100%;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;border-color:var(--bs-accordion-btn-focus-border-color);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-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y)var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-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-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: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}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{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(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:.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:1rem}}.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-action{color:var(--bs-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{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:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.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-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:.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;--bs-btn-close-white-filter:invert(1)grayscale(100%)brightness(200%);box-sizing:content-box;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg)center/1em auto no-repeat;opacity:var(--bs-btn-close-opacity);border:0;border-radius:.375rem;width:1em;height:1em;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,[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.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);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;max-width:100%}.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: ;--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{margin:var(--bs-modal-margin);pointer-events:none;width:auto;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{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;width:100%;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;justify-content:space-between;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:calc(-.5*var(--bs-modal-header-padding-y))calc(-.5*var(--bs-modal-header-padding-x))calc(-.5*var(--bs-modal-header-padding-y))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 (min-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 (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{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-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-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-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .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-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-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-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .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:after,.popover .popover-arrow:before{content:"";border:0 solid #0000;display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-top>.popover-arrow:before{border-width:var(--bs-popover-arrow-height)calc(var(--bs-popover-arrow-width)*.5)0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--bs-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.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-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-end>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5)var(--bs-popover-arrow-height)calc(var(--bs-popover-arrow-width)*.5)0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--bs-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:before{border-width:0 calc(var(--bs-popover-arrow-width)*.5)var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--bs-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-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-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.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-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-start>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5)0 calc(var(--bs-popover-arrow-width)*.5)var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--bs-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.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-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translate(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{z-index:1;color:#fff;text-align:center;opacity:.5;background:0 0;border:0;justify-content:center;align-items:center;width:15%;padding:0;transition:opacity .15s;display:flex;position:absolute;top:0;bottom:0}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-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 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{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;opacity:.5;background-color:#fff;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:#fff;text-align:center;padding-top:1.25rem;padding-bottom:1.25rem;position:absolute;bottom:1.25rem;left:15%;right:15%}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert()grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert()grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{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%;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-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--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 (max-width:575.98px){.offcanvas-sm{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-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 (max-width:767.98px){.offcanvas-md{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-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 (max-width:991.98px){.offcanvas-lg{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-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 (max-width:1199.98px){.offcanvas-xl{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-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 (max-width:1399.98px){.offcanvas-xxl{z-index:var(--bs-offcanvas-zindex);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;max-width:100%;display:flex;position:fixed;bottom:0}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-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.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-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);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;max-width:100%;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.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{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);justify-content:space-between;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))}.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;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-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:focus,.link-primary:hover{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;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-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:focus,.link-secondary:hover{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;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-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:focus,.link-success:hover{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;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-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:focus,.link-info:hover{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;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-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:focus,.link-warning:hover{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;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-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:focus,.link-danger:hover{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;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-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:focus,.link-light:hover{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;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-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:focus,.link-dark:hover{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;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-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;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-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:focus,.link-body-emphasis:hover{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;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-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));-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));-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:focus-visible>.bi,.icon-link-hover:hover>.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 (min-width:576px){.sticky-sm-top{z-index:1020;position:sticky;top:0}.sticky-sm-bottom{z-index:1020;position:sticky;bottom:0}}@media (min-width:768px){.sticky-md-top{z-index:1020;position:sticky;top:0}.sticky-md-bottom{z-index:1020;position:sticky;bottom:0}}@media (min-width:992px){.sticky-lg-top{z-index:1020;position:sticky;top:0}.sticky-lg-bottom{z-index:1020;position:sticky;bottom:0}}@media (min-width:1200px){.sticky-xl-top{z-index:1020;position:sticky;top:0}.sticky-xl-bottom{z-index:1020;position:sticky;bottom:0}}@media (min-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-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!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{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;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;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;-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;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;-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 (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;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{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}:root{--body-color:#212529;--move-btn-width:60px;--move-btn-height:34px;--focus-ring:0 0 0 .2rem #268fff80;accent-color:var(--bs-primary)}:not(:defined){display:none!important}html,body{font-size:14px}body{background-color:#eae9e9;overflow-x:hidden}[hidden]{display:none!important}a:focus-visible,details summary:focus-visible{box-shadow:var(--focus-ring);border-radius:.25rem;outline:0;transition:box-shadow .15s ease-in-out}.container{max-width:1400px}.site-header{text-align:center;flex-direction:column;align-items:center;row-gap:.5rem;margin:3rem .5rem;display:flex}.page-title{margin-bottom:0;font-weight:300}.canvas{max-width:100%;display:block}.inputs-container input[type=color],.settings-button{cursor:pointer;border:0;width:30px;height:30px;margin:0 2px;padding:0;line-height:1}.inputs-container .meme-text{min-width:0;height:calc(1.5em + .75rem + 2px);min-height:calc(1.5em + .75rem + 2px);margin:.5rem}.settings-button{background-image:url(gear.b3b5d1a5.svg);background-position:50%;background-repeat:no-repeat;background-size:60%}.inputs-container{flex:1}.inputs-container:empty{display:none}.instructions{text-align:center;text-wrap:balance;flex-direction:column;justify-content:center;align-items:center;row-gap:1rem;height:100%;min-height:200px;padding:1rem;display:flex}.errorsContainer{z-index:1051;pointer-events:none;width:100%;position:fixed;top:0;left:0}.errorsContainer .alert{pointer-events:all}details[open] summary{margin-bottom:.5rem}button[data-button=delete-text-box]{background-image:url(trash.d9edab78.svg);background-position:50%;background-repeat:no-repeat;width:25px;min-width:25px;height:25px;margin-left:.5rem;padding:0}.gallery{scroll-behavior:smooth;gap:.5rem;min-height:112px;margin:0;padding:.25rem 0;display:flex;overflow-x:auto}.gallery>button{cursor:pointer;padding:0}.gallery>button>img{object-fit:cover;border-radius:.2rem;min-width:88px;height:88px;display:block}.gallery__no-results{text-align:center;flex:1;justify-content:center;align-items:center;display:flex}.move-text-actions{width:calc(var(--move-btn-width)*3);height:calc(var(--move-btn-height)*2);margin:0 auto;position:relative}.move-text-actions [data-move]{width:var(--move-btn-width);height:var(--move-btn-height);background-position:50%;background-repeat:no-repeat;position:absolute}.move-text-actions [data-move=offsetY][data-sign=\-]{top:-1px;left:var(--move-btn-width);background-image:url(chevron-up.f532d8b6.svg)}.move-text-actions [data-move=offsetY][data-sign=\+]{top:calc(var(--move-btn-height) + 1px);left:var(--move-btn-width);background-image:url(chevron-down.ad14d981.svg)}.move-text-actions [data-move=offsetX][data-sign=\-]{top:calc(var(--move-btn-height)/2);background-image:url(chevron-left.20a2f252.svg);left:-2px}.move-text-actions [data-move=offsetX][data-sign=\+]{top:calc(var(--move-btn-height)/2);left:calc(var(--move-btn-width)*2 + 2px);background-image:url(chevron-right.1be074ac.svg)}capture-photo:not(:defined){display:none}capture-photo{overflow:hidden}capture-photo::part(video){background-color:#000;width:100%}capture-photo::part(actions-container){justify-content:center;align-items:center;gap:2rem;padding:1rem 0;display:flex}capture-photo::part(capture-button),capture-photo::part(facing-mode-button){text-indent:-9999px;cursor:pointer;-webkit-appearance:none;appearance:none;background-position:50%;background-repeat:no-repeat;border-radius:50%;overflow:hidden;box-shadow:0 0 1rem #0000004d}capture-photo::part(capture-button){background-color:#c2c3c7;background-image:url(aperture.4bf28ce8.svg);background-size:90%;border:5px solid #fff;width:70px;height:70px}capture-photo::part(facing-mode-button){background-color:#fff;background-image:url(camera-reverse.284e8ac9.svg);background-size:60%;border:0;width:50px;height:50px;margin-right:calc(-50px - 2rem)}capture-photo[loading]::part(video){background-image:url(spinner.4452ed29.svg);background-position:50%;background-repeat:no-repeat;background-size:60px}capture-photo[loading]::part(capture-button),capture-photo[loading]::part(facing-mode-button){opacity:.6;pointer-events:none}modal-element{--me-width:fit-content;--me-border-radius:.25rem;--me-border-width:0;--me-box-shadow:0 0 1rem 0 #0000004d}#videoModal{--me-width:600px}#downloadModal{--me-width:900px}modal-element::part(base):focus-visible{outline:0}modal-element [slot=header]{color:var(--body-color);margin:0}modal-element::part(close){color:var(--body-color);border-radius:.25rem;transition:box-shadow .15s ease-in-out}modal-element::part(close):focus-visible{box-shadow:var(--focus-ring);outline:0}modal-element::part(body){padding-block:0}modal-element [slot=footer]{text-align:center;flex-wrap:wrap;justify-content:center;align-items:center;gap:.25rem;display:flex}files-dropzone{--dropzone-border-color:var(--bs-secondary);--dropzone-border-color-hover:var(--bs-primary);--dropzone-border-color-dragover:var(--bs-primary);--dropzone-background-color-hover:var(--bs-light);--dropzone-background-color-dragover:var(--bs-light);--dropzone-focus-box-shadow:var(--focus-ring);height:100%}files-dropzone::part(dropzone){height:100%;padding:.5rem}.text-underline{text-decoration:underline} +/*# sourceMappingURL=index.47ef8ac4.css.map */ diff --git a/docs/index.47ef8ac4.css.map b/docs/index.47ef8ac4.css.map new file mode 100644 index 0000000..feb1ff9 --- /dev/null +++ b/docs/index.47ef8ac4.css.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["index.47ef8ac4.css","node_modules/bootstrap/dist/css/bootstrap.min.css","node_modules/bootstrap/scss/mixins/_banner.scss","node_modules/bootstrap/scss/_root.scss","node_modules/bootstrap/dist/css/dist/css/bootstrap.css","node_modules/bootstrap/scss/vendor/_rfs.scss","node_modules/bootstrap/scss/mixins/_color-mode.scss","node_modules/bootstrap/scss/_reboot.scss","node_modules/bootstrap/scss/mixins/_border-radius.scss","node_modules/bootstrap/scss/_type.scss","node_modules/bootstrap/scss/mixins/_lists.scss","node_modules/bootstrap/scss/_images.scss","node_modules/bootstrap/scss/mixins/_image.scss","node_modules/bootstrap/scss/_containers.scss","node_modules/bootstrap/scss/mixins/_container.scss","node_modules/bootstrap/scss/mixins/_breakpoints.scss","node_modules/bootstrap/scss/_grid.scss","node_modules/bootstrap/scss/mixins/_grid.scss","node_modules/bootstrap/scss/_tables.scss","node_modules/bootstrap/scss/mixins/_table-variants.scss","node_modules/bootstrap/scss/forms/_labels.scss","node_modules/bootstrap/scss/forms/_form-text.scss","node_modules/bootstrap/scss/forms/_form-control.scss","node_modules/bootstrap/scss/mixins/_transition.scss","node_modules/bootstrap/scss/mixins/_gradients.scss","node_modules/bootstrap/scss/forms/_form-select.scss","node_modules/bootstrap/scss/forms/_form-check.scss","node_modules/bootstrap/scss/forms/_form-range.scss","node_modules/bootstrap/scss/forms/_floating-labels.scss","node_modules/bootstrap/scss/forms/_input-group.scss","node_modules/bootstrap/scss/mixins/_forms.scss","node_modules/bootstrap/scss/_buttons.scss","node_modules/bootstrap/scss/mixins/_buttons.scss","node_modules/bootstrap/scss/_transitions.scss","node_modules/bootstrap/scss/_dropdown.scss","node_modules/bootstrap/scss/mixins/_caret.scss","node_modules/bootstrap/scss/_button-group.scss","node_modules/bootstrap/scss/_nav.scss","node_modules/bootstrap/scss/_navbar.scss","node_modules/bootstrap/scss/_card.scss","node_modules/bootstrap/scss/_accordion.scss","node_modules/bootstrap/scss/_breadcrumb.scss","node_modules/bootstrap/scss/_pagination.scss","node_modules/bootstrap/scss/mixins/_pagination.scss","node_modules/bootstrap/scss/_badge.scss","node_modules/bootstrap/scss/_alert.scss","node_modules/bootstrap/scss/_progress.scss","node_modules/bootstrap/scss/_list-group.scss","node_modules/bootstrap/scss/_close.scss","node_modules/bootstrap/scss/_toasts.scss","node_modules/bootstrap/scss/_modal.scss","node_modules/bootstrap/scss/mixins/_backdrop.scss","node_modules/bootstrap/scss/_tooltip.scss","node_modules/bootstrap/scss/mixins/_reset-text.scss","node_modules/bootstrap/scss/_popover.scss","node_modules/bootstrap/scss/_carousel.scss","node_modules/bootstrap/scss/mixins/_clearfix.scss","node_modules/bootstrap/scss/_spinners.scss","node_modules/bootstrap/scss/_offcanvas.scss","node_modules/bootstrap/scss/_placeholders.scss","node_modules/bootstrap/scss/helpers/_color-bg.scss","node_modules/bootstrap/scss/helpers/_colored-links.scss","node_modules/bootstrap/scss/helpers/_focus-ring.scss","node_modules/bootstrap/scss/helpers/_icon-link.scss","node_modules/bootstrap/scss/helpers/_ratio.scss","node_modules/bootstrap/scss/helpers/_position.scss","node_modules/bootstrap/scss/helpers/_stacks.scss","node_modules/bootstrap/scss/helpers/_visually-hidden.scss","node_modules/bootstrap/scss/mixins/_visually-hidden.scss","node_modules/bootstrap/scss/helpers/_stretched-link.scss","node_modules/bootstrap/scss/helpers/_text-truncation.scss","node_modules/bootstrap/scss/mixins/_text-truncate.scss","node_modules/bootstrap/scss/helpers/_vr.scss","node_modules/bootstrap/scss/mixins/_utilities.scss","node_modules/bootstrap/scss/utilities/_api.scss","src/css/main.css"],"sourcesContent":[":root, [data-bs-theme=\"light\"] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text-emphasis: #052c65;\n --bs-secondary-text-emphasis: #2b2f32;\n --bs-success-text-emphasis: #0a3622;\n --bs-info-text-emphasis: #055160;\n --bs-warning-text-emphasis: #664d03;\n --bs-danger-text-emphasis: #58151c;\n --bs-light-text-emphasis: #495057;\n --bs-dark-text-emphasis: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #e2e3e5;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #c4c8cb;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, #ffffff26, #fff0);\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: #212529bf;\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: #21252980;\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-heading-color: inherit;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-color: #212529;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: #0000002d;\n --bs-border-radius: .375rem;\n --bs-border-radius-sm: .25rem;\n --bs-border-radius-lg: .5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-xxl: 2rem;\n --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 .5rem 1rem #00000026;\n --bs-box-shadow-sm: 0 .125rem .25rem #00000013;\n --bs-box-shadow-lg: 0 1rem 3rem #0000002d;\n --bs-box-shadow-inset: inset 0 1px 2px #00000013;\n --bs-focus-ring-width: .25rem;\n --bs-focus-ring-opacity: .25;\n --bs-focus-ring-color: #0d6efd40;\n --bs-form-valid-color: #198754;\n --bs-form-valid-border-color: #198754;\n --bs-form-invalid-color: #dc3545;\n --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=\"dark\"] {\n color-scheme: dark;\n --bs-body-color: #dee2e6;\n --bs-body-color-rgb: 222, 226, 230;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #fff;\n --bs-emphasis-color-rgb: 255, 255, 255;\n --bs-secondary-color: #dee2e6bf;\n --bs-secondary-color-rgb: 222, 226, 230;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: #dee2e680;\n --bs-tertiary-color-rgb: 222, 226, 230;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-primary-text-emphasis: #6ea8fe;\n --bs-secondary-text-emphasis: #a7acb1;\n --bs-success-text-emphasis: #75b798;\n --bs-info-text-emphasis: #6edff6;\n --bs-warning-text-emphasis: #ffda6a;\n --bs-danger-text-emphasis: #ea868f;\n --bs-light-text-emphasis: #f8f9fa;\n --bs-dark-text-emphasis: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #161719;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #41464b;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #087990;\n --bs-warning-border-subtle: #997404;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: inherit;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #8bb9fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 139, 185, 254;\n --bs-code-color: #e685b5;\n --bs-highlight-color: #dee2e6;\n --bs-highlight-bg: #664d03;\n --bs-border-color: #495057;\n --bs-border-color-translucent: #ffffff26;\n --bs-form-valid-color: #75b798;\n --bs-form-valid-border-color: #75b798;\n --bs-form-invalid-color: #ea868f;\n --bs-form-invalid-border-color: #ea868f;\n}\n\n*, :after, :before {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: transparent;\n margin: 0;\n}\n\nhr {\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: .25;\n margin: 1rem 0;\n}\n\n.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {\n color: var(--bs-heading-color);\n margin-top: 0;\n margin-bottom: .5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\n.h1, h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n .h1, h1 {\n font-size: 2.5rem;\n }\n}\n\n.h2, h2 {\n font-size: calc(1.325rem + .9vw);\n}\n\n@media (min-width: 1200px) {\n .h2, h2 {\n font-size: 2rem;\n }\n}\n\n.h3, h3 {\n font-size: calc(1.3rem + .6vw);\n}\n\n@media (min-width: 1200px) {\n .h3, h3 {\n font-size: 1.75rem;\n }\n}\n\n.h4, h4 {\n font-size: calc(1.275rem + .3vw);\n}\n\n@media (min-width: 1200px) {\n .h4, h4 {\n font-size: 1.5rem;\n }\n}\n\n.h5, h5 {\n font-size: 1.25rem;\n}\n\n.h6, h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\naddress {\n font-style: normal;\n line-height: inherit;\n margin-bottom: 1rem;\n}\n\nol, ul {\n padding-left: 2rem;\n}\n\ndl, ol, ul {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol, ol ul, ul ol, ul ul {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb, strong {\n font-weight: bolder;\n}\n\n.small, small {\n font-size: .875em;\n}\n\n.mark, mark {\n color: var(--bs-highlight-color);\n background-color: var(--bs-highlight-bg);\n padding: .1875em;\n}\n\nsub, sup {\n vertical-align: baseline;\n font-size: .75em;\n line-height: 0;\n position: relative;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\n\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\ncode, kbd, pre, samp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n font-size: .875em;\n display: block;\n overflow: auto;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n color: var(--bs-code-color);\n word-wrap: break-word;\n font-size: .875em;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: .25rem;\n padding: .1875rem .375rem;\n font-size: .875em;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg, svg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n color: var(--bs-secondary-color);\n text-align: left;\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\ntbody, td, tfoot, th, thead, tr {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\nbutton, input, optgroup, select, textarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n margin: 0;\n}\n\nbutton, select {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n[type=\"button\"], [type=\"reset\"], [type=\"submit\"], button {\n -webkit-appearance: button;\n}\n\n[type=\"button\"]:not(:disabled), [type=\"reset\"]:not(:disabled), [type=\"submit\"]:not(:disabled), button:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n border: 0;\n min-width: 0;\n margin: 0;\n padding: 0;\n}\n\nlegend {\n float: left;\n font-size: calc(1.275rem + .3vw);\n line-height: inherit;\n width: 100%;\n margin-bottom: .5rem;\n padding: 0;\n}\n\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\n\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-day-field {\n padding: 0;\n}\n\n::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n}\n\n::-webkit-datetime-edit-hour-field {\n padding: 0;\n}\n\n::-webkit-datetime-edit-minute {\n padding: 0;\n}\n\n::-webkit-datetime-edit-month-field {\n padding: 0;\n}\n\n::-webkit-datetime-edit-text {\n padding: 0;\n}\n\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n -webkit-appearance: textfield;\n outline-offset: -2px;\n}\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n cursor: pointer;\n display: list-item;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled, .list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: .5rem;\n}\n\n.initialism {\n text-transform: uppercase;\n font-size: .875em;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n color: #6c757d;\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: .875em;\n}\n\n.blockquote-footer:before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n padding: .25rem;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: .5rem;\n line-height: 1;\n}\n\n.figure-caption {\n color: var(--bs-secondary-color);\n font-size: .875em;\n}\n\n.container, .container-fluid, .container-lg, .container-md, .container-sm, .container-xl, .container-xxl {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n padding-right: calc(var(--bs-gutter-x) * .5);\n padding-left: calc(var(--bs-gutter-x) * .5);\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-md, .container-sm {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-lg, .container-md, .container-sm {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-lg, .container-md, .container-sm, .container-xl {\n max-width: 1140px;\n }\n}\n\n@media (min-width: 1400px) {\n .container, .container-lg, .container-md, .container-sm, .container-xl, .container-xxl {\n max-width: 1320px;\n }\n}\n\n:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-.5 * var(--bs-gutter-x));\n margin-left: calc(-.5 * var(--bs-gutter-x));\n flex-wrap: wrap;\n display: flex;\n}\n\n.row > * {\n padding-right: calc(var(--bs-gutter-x) * .5);\n padding-left: calc(var(--bs-gutter-x) * .5);\n margin-top: var(--bs-gutter-y);\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n}\n\n.col {\n flex: 1 0;\n}\n\n.row-cols-auto > * {\n flex: none;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: none;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: none;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: none;\n width: 33.3333%;\n}\n\n.row-cols-4 > * {\n flex: none;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: none;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: none;\n width: 16.6667%;\n}\n\n.col-auto {\n flex: none;\n width: auto;\n}\n\n.col-1 {\n flex: none;\n width: 8.33333%;\n}\n\n.col-2 {\n flex: none;\n width: 16.6667%;\n}\n\n.col-3 {\n flex: none;\n width: 25%;\n}\n\n.col-4 {\n flex: none;\n width: 33.3333%;\n}\n\n.col-5 {\n flex: none;\n width: 41.6667%;\n}\n\n.col-6 {\n flex: none;\n width: 50%;\n}\n\n.col-7 {\n flex: none;\n width: 58.3333%;\n}\n\n.col-8 {\n flex: none;\n width: 66.6667%;\n}\n\n.col-9 {\n flex: none;\n width: 75%;\n}\n\n.col-10 {\n flex: none;\n width: 83.3333%;\n}\n\n.col-11 {\n flex: none;\n width: 91.6667%;\n}\n\n.col-12 {\n flex: none;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333%;\n}\n\n.offset-2 {\n margin-left: 16.6667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.3333%;\n}\n\n.offset-5 {\n margin-left: 41.6667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.3333%;\n}\n\n.offset-8 {\n margin-left: 66.6667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.3333%;\n}\n\n.offset-11 {\n margin-left: 91.6667%;\n}\n\n.g-0, .gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0, .gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1, .gx-1 {\n --bs-gutter-x: .25rem;\n}\n\n.g-1, .gy-1 {\n --bs-gutter-y: .25rem;\n}\n\n.g-2, .gx-2 {\n --bs-gutter-x: .5rem;\n}\n\n.g-2, .gy-2 {\n --bs-gutter-y: .5rem;\n}\n\n.g-3, .gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3, .gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4, .gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4, .gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5, .gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5, .gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0;\n }\n\n .row-cols-sm-auto > * {\n flex: none;\n width: auto;\n }\n\n .row-cols-sm-1 > * {\n flex: none;\n width: 100%;\n }\n\n .row-cols-sm-2 > * {\n flex: none;\n width: 50%;\n }\n\n .row-cols-sm-3 > * {\n flex: none;\n width: 33.3333%;\n }\n\n .row-cols-sm-4 > * {\n flex: none;\n width: 25%;\n }\n\n .row-cols-sm-5 > * {\n flex: none;\n width: 20%;\n }\n\n .row-cols-sm-6 > * {\n flex: none;\n width: 16.6667%;\n }\n\n .col-sm-auto {\n flex: none;\n width: auto;\n }\n\n .col-sm-1 {\n flex: none;\n width: 8.33333%;\n }\n\n .col-sm-2 {\n flex: none;\n width: 16.6667%;\n }\n\n .col-sm-3 {\n flex: none;\n width: 25%;\n }\n\n .col-sm-4 {\n flex: none;\n width: 33.3333%;\n }\n\n .col-sm-5 {\n flex: none;\n width: 41.6667%;\n }\n\n .col-sm-6 {\n flex: none;\n width: 50%;\n }\n\n .col-sm-7 {\n flex: none;\n width: 58.3333%;\n }\n\n .col-sm-8 {\n flex: none;\n width: 66.6667%;\n }\n\n .col-sm-9 {\n flex: none;\n width: 75%;\n }\n\n .col-sm-10 {\n flex: none;\n width: 83.3333%;\n }\n\n .col-sm-11 {\n flex: none;\n width: 91.6667%;\n }\n\n .col-sm-12 {\n flex: none;\n width: 100%;\n }\n\n .offset-sm-0 {\n margin-left: 0;\n }\n\n .offset-sm-1 {\n margin-left: 8.33333%;\n }\n\n .offset-sm-2 {\n margin-left: 16.6667%;\n }\n\n .offset-sm-3 {\n margin-left: 25%;\n }\n\n .offset-sm-4 {\n margin-left: 33.3333%;\n }\n\n .offset-sm-5 {\n margin-left: 41.6667%;\n }\n\n .offset-sm-6 {\n margin-left: 50%;\n }\n\n .offset-sm-7 {\n margin-left: 58.3333%;\n }\n\n .offset-sm-8 {\n margin-left: 66.6667%;\n }\n\n .offset-sm-9 {\n margin-left: 75%;\n }\n\n .offset-sm-10 {\n margin-left: 83.3333%;\n }\n\n .offset-sm-11 {\n margin-left: 91.6667%;\n }\n\n .g-sm-0, .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n\n .g-sm-0, .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n\n .g-sm-1, .gx-sm-1 {\n --bs-gutter-x: .25rem;\n }\n\n .g-sm-1, .gy-sm-1 {\n --bs-gutter-y: .25rem;\n }\n\n .g-sm-2, .gx-sm-2 {\n --bs-gutter-x: .5rem;\n }\n\n .g-sm-2, .gy-sm-2 {\n --bs-gutter-y: .5rem;\n }\n\n .g-sm-3, .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-sm-3, .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-sm-4, .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-sm-4, .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-sm-5, .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-sm-5, .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0;\n }\n\n .row-cols-md-auto > * {\n flex: none;\n width: auto;\n }\n\n .row-cols-md-1 > * {\n flex: none;\n width: 100%;\n }\n\n .row-cols-md-2 > * {\n flex: none;\n width: 50%;\n }\n\n .row-cols-md-3 > * {\n flex: none;\n width: 33.3333%;\n }\n\n .row-cols-md-4 > * {\n flex: none;\n width: 25%;\n }\n\n .row-cols-md-5 > * {\n flex: none;\n width: 20%;\n }\n\n .row-cols-md-6 > * {\n flex: none;\n width: 16.6667%;\n }\n\n .col-md-auto {\n flex: none;\n width: auto;\n }\n\n .col-md-1 {\n flex: none;\n width: 8.33333%;\n }\n\n .col-md-2 {\n flex: none;\n width: 16.6667%;\n }\n\n .col-md-3 {\n flex: none;\n width: 25%;\n }\n\n .col-md-4 {\n flex: none;\n width: 33.3333%;\n }\n\n .col-md-5 {\n flex: none;\n width: 41.6667%;\n }\n\n .col-md-6 {\n flex: none;\n width: 50%;\n }\n\n .col-md-7 {\n flex: none;\n width: 58.3333%;\n }\n\n .col-md-8 {\n flex: none;\n width: 66.6667%;\n }\n\n .col-md-9 {\n flex: none;\n width: 75%;\n }\n\n .col-md-10 {\n flex: none;\n width: 83.3333%;\n }\n\n .col-md-11 {\n flex: none;\n width: 91.6667%;\n }\n\n .col-md-12 {\n flex: none;\n width: 100%;\n }\n\n .offset-md-0 {\n margin-left: 0;\n }\n\n .offset-md-1 {\n margin-left: 8.33333%;\n }\n\n .offset-md-2 {\n margin-left: 16.6667%;\n }\n\n .offset-md-3 {\n margin-left: 25%;\n }\n\n .offset-md-4 {\n margin-left: 33.3333%;\n }\n\n .offset-md-5 {\n margin-left: 41.6667%;\n }\n\n .offset-md-6 {\n margin-left: 50%;\n }\n\n .offset-md-7 {\n margin-left: 58.3333%;\n }\n\n .offset-md-8 {\n margin-left: 66.6667%;\n }\n\n .offset-md-9 {\n margin-left: 75%;\n }\n\n .offset-md-10 {\n margin-left: 83.3333%;\n }\n\n .offset-md-11 {\n margin-left: 91.6667%;\n }\n\n .g-md-0, .gx-md-0 {\n --bs-gutter-x: 0;\n }\n\n .g-md-0, .gy-md-0 {\n --bs-gutter-y: 0;\n }\n\n .g-md-1, .gx-md-1 {\n --bs-gutter-x: .25rem;\n }\n\n .g-md-1, .gy-md-1 {\n --bs-gutter-y: .25rem;\n }\n\n .g-md-2, .gx-md-2 {\n --bs-gutter-x: .5rem;\n }\n\n .g-md-2, .gy-md-2 {\n --bs-gutter-y: .5rem;\n }\n\n .g-md-3, .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-md-3, .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-md-4, .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-md-4, .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-md-5, .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-md-5, .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0;\n }\n\n .row-cols-lg-auto > * {\n flex: none;\n width: auto;\n }\n\n .row-cols-lg-1 > * {\n flex: none;\n width: 100%;\n }\n\n .row-cols-lg-2 > * {\n flex: none;\n width: 50%;\n }\n\n .row-cols-lg-3 > * {\n flex: none;\n width: 33.3333%;\n }\n\n .row-cols-lg-4 > * {\n flex: none;\n width: 25%;\n }\n\n .row-cols-lg-5 > * {\n flex: none;\n width: 20%;\n }\n\n .row-cols-lg-6 > * {\n flex: none;\n width: 16.6667%;\n }\n\n .col-lg-auto {\n flex: none;\n width: auto;\n }\n\n .col-lg-1 {\n flex: none;\n width: 8.33333%;\n }\n\n .col-lg-2 {\n flex: none;\n width: 16.6667%;\n }\n\n .col-lg-3 {\n flex: none;\n width: 25%;\n }\n\n .col-lg-4 {\n flex: none;\n width: 33.3333%;\n }\n\n .col-lg-5 {\n flex: none;\n width: 41.6667%;\n }\n\n .col-lg-6 {\n flex: none;\n width: 50%;\n }\n\n .col-lg-7 {\n flex: none;\n width: 58.3333%;\n }\n\n .col-lg-8 {\n flex: none;\n width: 66.6667%;\n }\n\n .col-lg-9 {\n flex: none;\n width: 75%;\n }\n\n .col-lg-10 {\n flex: none;\n width: 83.3333%;\n }\n\n .col-lg-11 {\n flex: none;\n width: 91.6667%;\n }\n\n .col-lg-12 {\n flex: none;\n width: 100%;\n }\n\n .offset-lg-0 {\n margin-left: 0;\n }\n\n .offset-lg-1 {\n margin-left: 8.33333%;\n }\n\n .offset-lg-2 {\n margin-left: 16.6667%;\n }\n\n .offset-lg-3 {\n margin-left: 25%;\n }\n\n .offset-lg-4 {\n margin-left: 33.3333%;\n }\n\n .offset-lg-5 {\n margin-left: 41.6667%;\n }\n\n .offset-lg-6 {\n margin-left: 50%;\n }\n\n .offset-lg-7 {\n margin-left: 58.3333%;\n }\n\n .offset-lg-8 {\n margin-left: 66.6667%;\n }\n\n .offset-lg-9 {\n margin-left: 75%;\n }\n\n .offset-lg-10 {\n margin-left: 83.3333%;\n }\n\n .offset-lg-11 {\n margin-left: 91.6667%;\n }\n\n .g-lg-0, .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n\n .g-lg-0, .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n\n .g-lg-1, .gx-lg-1 {\n --bs-gutter-x: .25rem;\n }\n\n .g-lg-1, .gy-lg-1 {\n --bs-gutter-y: .25rem;\n }\n\n .g-lg-2, .gx-lg-2 {\n --bs-gutter-x: .5rem;\n }\n\n .g-lg-2, .gy-lg-2 {\n --bs-gutter-y: .5rem;\n }\n\n .g-lg-3, .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-lg-3, .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-lg-4, .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-lg-4, .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-lg-5, .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-lg-5, .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0;\n }\n\n .row-cols-xl-auto > * {\n flex: none;\n width: auto;\n }\n\n .row-cols-xl-1 > * {\n flex: none;\n width: 100%;\n }\n\n .row-cols-xl-2 > * {\n flex: none;\n width: 50%;\n }\n\n .row-cols-xl-3 > * {\n flex: none;\n width: 33.3333%;\n }\n\n .row-cols-xl-4 > * {\n flex: none;\n width: 25%;\n }\n\n .row-cols-xl-5 > * {\n flex: none;\n width: 20%;\n }\n\n .row-cols-xl-6 > * {\n flex: none;\n width: 16.6667%;\n }\n\n .col-xl-auto {\n flex: none;\n width: auto;\n }\n\n .col-xl-1 {\n flex: none;\n width: 8.33333%;\n }\n\n .col-xl-2 {\n flex: none;\n width: 16.6667%;\n }\n\n .col-xl-3 {\n flex: none;\n width: 25%;\n }\n\n .col-xl-4 {\n flex: none;\n width: 33.3333%;\n }\n\n .col-xl-5 {\n flex: none;\n width: 41.6667%;\n }\n\n .col-xl-6 {\n flex: none;\n width: 50%;\n }\n\n .col-xl-7 {\n flex: none;\n width: 58.3333%;\n }\n\n .col-xl-8 {\n flex: none;\n width: 66.6667%;\n }\n\n .col-xl-9 {\n flex: none;\n width: 75%;\n }\n\n .col-xl-10 {\n flex: none;\n width: 83.3333%;\n }\n\n .col-xl-11 {\n flex: none;\n width: 91.6667%;\n }\n\n .col-xl-12 {\n flex: none;\n width: 100%;\n }\n\n .offset-xl-0 {\n margin-left: 0;\n }\n\n .offset-xl-1 {\n margin-left: 8.33333%;\n }\n\n .offset-xl-2 {\n margin-left: 16.6667%;\n }\n\n .offset-xl-3 {\n margin-left: 25%;\n }\n\n .offset-xl-4 {\n margin-left: 33.3333%;\n }\n\n .offset-xl-5 {\n margin-left: 41.6667%;\n }\n\n .offset-xl-6 {\n margin-left: 50%;\n }\n\n .offset-xl-7 {\n margin-left: 58.3333%;\n }\n\n .offset-xl-8 {\n margin-left: 66.6667%;\n }\n\n .offset-xl-9 {\n margin-left: 75%;\n }\n\n .offset-xl-10 {\n margin-left: 83.3333%;\n }\n\n .offset-xl-11 {\n margin-left: 91.6667%;\n }\n\n .g-xl-0, .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xl-0, .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xl-1, .gx-xl-1 {\n --bs-gutter-x: .25rem;\n }\n\n .g-xl-1, .gy-xl-1 {\n --bs-gutter-y: .25rem;\n }\n\n .g-xl-2, .gx-xl-2 {\n --bs-gutter-x: .5rem;\n }\n\n .g-xl-2, .gy-xl-2 {\n --bs-gutter-y: .5rem;\n }\n\n .g-xl-3, .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xl-3, .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xl-4, .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xl-4, .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xl-5, .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xl-5, .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0;\n }\n\n .row-cols-xxl-auto > * {\n flex: none;\n width: auto;\n }\n\n .row-cols-xxl-1 > * {\n flex: none;\n width: 100%;\n }\n\n .row-cols-xxl-2 > * {\n flex: none;\n width: 50%;\n }\n\n .row-cols-xxl-3 > * {\n flex: none;\n width: 33.3333%;\n }\n\n .row-cols-xxl-4 > * {\n flex: none;\n width: 25%;\n }\n\n .row-cols-xxl-5 > * {\n flex: none;\n width: 20%;\n }\n\n .row-cols-xxl-6 > * {\n flex: none;\n width: 16.6667%;\n }\n\n .col-xxl-auto {\n flex: none;\n width: auto;\n }\n\n .col-xxl-1 {\n flex: none;\n width: 8.33333%;\n }\n\n .col-xxl-2 {\n flex: none;\n width: 16.6667%;\n }\n\n .col-xxl-3 {\n flex: none;\n width: 25%;\n }\n\n .col-xxl-4 {\n flex: none;\n width: 33.3333%;\n }\n\n .col-xxl-5 {\n flex: none;\n width: 41.6667%;\n }\n\n .col-xxl-6 {\n flex: none;\n width: 50%;\n }\n\n .col-xxl-7 {\n flex: none;\n width: 58.3333%;\n }\n\n .col-xxl-8 {\n flex: none;\n width: 66.6667%;\n }\n\n .col-xxl-9 {\n flex: none;\n width: 75%;\n }\n\n .col-xxl-10 {\n flex: none;\n width: 83.3333%;\n }\n\n .col-xxl-11 {\n flex: none;\n width: 91.6667%;\n }\n\n .col-xxl-12 {\n flex: none;\n width: 100%;\n }\n\n .offset-xxl-0 {\n margin-left: 0;\n }\n\n .offset-xxl-1 {\n margin-left: 8.33333%;\n }\n\n .offset-xxl-2 {\n margin-left: 16.6667%;\n }\n\n .offset-xxl-3 {\n margin-left: 25%;\n }\n\n .offset-xxl-4 {\n margin-left: 33.3333%;\n }\n\n .offset-xxl-5 {\n margin-left: 41.6667%;\n }\n\n .offset-xxl-6 {\n margin-left: 50%;\n }\n\n .offset-xxl-7 {\n margin-left: 58.3333%;\n }\n\n .offset-xxl-8 {\n margin-left: 66.6667%;\n }\n\n .offset-xxl-9 {\n margin-left: 75%;\n }\n\n .offset-xxl-10 {\n margin-left: 83.3333%;\n }\n\n .offset-xxl-11 {\n margin-left: 91.6667%;\n }\n\n .g-xxl-0, .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xxl-0, .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xxl-1, .gx-xxl-1 {\n --bs-gutter-x: .25rem;\n }\n\n .g-xxl-1, .gy-xxl-1 {\n --bs-gutter-y: .25rem;\n }\n\n .g-xxl-2, .gx-xxl-2 {\n --bs-gutter-x: .5rem;\n }\n\n .g-xxl-2, .gy-xxl-2 {\n --bs-gutter-y: .5rem;\n }\n\n .g-xxl-3, .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xxl-3, .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xxl-4, .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xxl-4, .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xxl-5, .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xxl-5, .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n\n.table {\n --bs-table-color-type: initial;\n --bs-table-bg-type: initial;\n --bs-table-color-state: initial;\n --bs-table-bg-state: initial;\n --bs-table-color: var(--bs-emphasis-color);\n --bs-table-bg: var(--bs-body-bg);\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-emphasis-color);\n --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), .05);\n --bs-table-active-color: var(--bs-emphasis-color);\n --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), .1);\n --bs-table-hover-color: var(--bs-emphasis-color);\n --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), .075);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n width: 100%;\n margin-bottom: 1rem;\n}\n\n.table > :not(caption) > * > * {\n color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));\n padding: .5rem;\n}\n\n.table > tbody {\n vertical-align: inherit;\n}\n\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: .25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > *, .table-striped-columns > :not(caption) > tr > :nth-child(2n) {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-active {\n --bs-table-color-state: var(--bs-table-active-color);\n --bs-table-bg-state: var(--bs-table-active-bg);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-color-state: var(--bs-table-hover-color);\n --bs-table-bg-state: var(--bs-table-hover-bg);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #a6b5cc;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #b5b6b7;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #a7b9b1;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #a6c3ca;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #ccc2a4;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #c6acae;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #c6c7c8;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #4d5154;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n }\n}\n\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n }\n}\n\n.form-label {\n margin-bottom: .5rem;\n}\n\n.col-form-label {\n padding-top: calc(.375rem + var(--bs-border-width));\n padding-bottom: calc(.375rem + var(--bs-border-width));\n font-size: inherit;\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(.5rem + var(--bs-border-width));\n padding-bottom: calc(.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(.25rem + var(--bs-border-width));\n padding-bottom: calc(.25rem + var(--bs-border-width));\n font-size: .875rem;\n}\n\n.form-text {\n color: var(--bs-secondary-color);\n margin-top: .25rem;\n font-size: .875em;\n}\n\n.form-control {\n color: var(--bs-body-color);\n -webkit-appearance: none;\n appearance: none;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n background-clip: padding-box;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n display: block;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control[type=\"file\"] {\n overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-body-bg);\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 .25rem #0d6efd40;\n}\n\n.form-control::-webkit-date-and-time-value {\n min-width: 85px;\n height: 1.5em;\n margin: 0;\n}\n\n.form-control::-webkit-datetime-edit {\n padding: 0;\n display: block;\n}\n\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n\n.form-control:disabled {\n background-color: var(--bs-secondary-bg);\n opacity: 1;\n}\n\n.form-control::-webkit-file-upload-button {\n -webkit-margin-end: .75rem;\n margin: -.375rem -.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n margin-inline-end: .75rem;\n padding: .375rem .75rem;\n transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n}\n\n.form-control::file-selector-button {\n -webkit-margin-end: .75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n margin: -.375rem -.75rem;\n margin-inline-end: .75rem;\n padding: .375rem .75rem;\n transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n color: var(--bs-body-color);\n border: solid #0000;\n border-width: var(--bs-border-width) 0;\n background-color: #0000;\n width: 100%;\n margin-bottom: 0;\n padding: .375rem 0;\n line-height: 1.5;\n display: block;\n}\n\n.form-control-plaintext:focus {\n outline: 0;\n}\n\n.form-control-plaintext.form-control-lg, .form-control-plaintext.form-control-sm {\n padding-left: 0;\n padding-right: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));\n border-radius: var(--bs-border-radius-sm);\n padding: .25rem .5rem;\n font-size: .875rem;\n}\n\n.form-control-sm::file-selector-button {\n -webkit-margin-end: .5rem;\n margin: -.25rem -.5rem;\n margin-inline-end: .5rem;\n padding: .25rem .5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n border-radius: var(--bs-border-radius-lg);\n padding: .5rem 1rem;\n font-size: 1.25rem;\n}\n\n.form-control-lg::file-selector-button {\n -webkit-margin-end: 1rem;\n margin: -.5rem -1rem;\n margin-inline-end: 1rem;\n padding: .5rem 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));\n}\n\ntextarea.form-control-sm {\n min-height: calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));\n}\n\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n height: calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));\n width: 3rem;\n padding: .375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n border-radius: var(--bs-border-radius);\n border: 0 !important;\n}\n\n.form-control-color::-webkit-color-swatch {\n border-radius: var(--bs-border-radius);\n border: 0 !important;\n}\n\n.form-control-color.form-control-sm {\n height: calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --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\");\n color: var(--bs-body-color);\n -webkit-appearance: none;\n appearance: none;\n background-color: var(--bs-body-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n background-position: right .75rem center;\n background-repeat: no-repeat;\n background-size: 16px 12px;\n width: 100%;\n padding: .375rem 2.25rem .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n display: block;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 .25rem #0d6efd40;\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n background-image: none;\n padding-right: .75rem;\n}\n\n.form-select:disabled {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-select:-moz-focusring {\n color: #0000;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n border-radius: var(--bs-border-radius-sm);\n padding-top: .25rem;\n padding-bottom: .25rem;\n padding-left: .5rem;\n font-size: .875rem;\n}\n\n.form-select-lg {\n border-radius: var(--bs-border-radius-lg);\n padding-top: .5rem;\n padding-bottom: .5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n[data-bs-theme=\"dark\"] .form-select {\n --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\");\n}\n\n.form-check {\n min-height: 1.5rem;\n margin-bottom: .125rem;\n padding-left: 1.5em;\n display: block;\n}\n\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n text-align: right;\n padding-left: 0;\n padding-right: 1.5em;\n}\n\n.form-check-reverse .form-check-input {\n float: right;\n margin-left: 0;\n margin-right: -1.5em;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-body-bg);\n vertical-align: top;\n -webkit-appearance: none;\n appearance: none;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n border: var(--bs-border-width) solid var(--bs-border-color);\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n print-color-adjust: exact;\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n margin-top: .25em;\n}\n\n.form-check-input[type=\"checkbox\"] {\n border-radius: .25em;\n}\n\n.form-check-input[type=\"radio\"] {\n border-radius: 50%;\n}\n\n.form-check-input:active {\n filter: brightness(90%);\n}\n\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 .25rem #0d6efd40;\n}\n\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n --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\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n --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\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n --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\");\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: .5;\n}\n\n.form-check-input:disabled ~ .form-check-label, .form-check-input[disabled] ~ .form-check-label {\n cursor: default;\n opacity: .5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n --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\");\n background-image: var(--bs-form-switch-bg);\n background-position: 0;\n border-radius: 2em;\n width: 2em;\n margin-left: -2.5em;\n transition: background-position .15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n\n.form-switch .form-check-input:focus {\n --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='%2386b7fe'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n --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\");\n background-position: 100%;\n}\n\n.form-switch.form-check-reverse {\n padding-left: 0;\n padding-right: 2.5em;\n}\n\n.form-switch.form-check-reverse .form-check-input {\n margin-left: 0;\n margin-right: -2.5em;\n}\n\n.form-check-inline {\n margin-right: 1rem;\n display: inline-block;\n}\n\n.btn-check {\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n position: absolute;\n}\n\n.btn-check:disabled + .btn, .btn-check[disabled] + .btn {\n pointer-events: none;\n filter: none;\n opacity: .65;\n}\n\n[data-bs-theme=\"dark\"] .form-switch .form-check-input:not(:checked):not(:focus) {\n --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\");\n}\n\n.form-range {\n -webkit-appearance: none;\n appearance: none;\n background-color: #0000;\n width: 100%;\n height: 1.5rem;\n padding: 0;\n}\n\n.form-range:focus {\n outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 .25rem #0d6efd40;\n}\n\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 .25rem #0d6efd40;\n}\n\n.form-range::-moz-focus-outer {\n border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n width: 1rem;\n height: 1rem;\n margin-top: -.25rem;\n transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n\n.form-range::-webkit-slider-runnable-track {\n color: #0000;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: #0000;\n border-radius: 1rem;\n width: 100%;\n height: .5rem;\n}\n\n.form-range::-moz-range-thumb {\n -webkit-appearance: none;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n width: 1rem;\n height: 1rem;\n transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n\n.form-range::-moz-range-track {\n color: #0000;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: #0000;\n border-radius: 1rem;\n width: 100%;\n height: .5rem;\n}\n\n.form-range:disabled {\n pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n\n.form-floating > .form-control, .form-floating > .form-control-plaintext, .form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n min-height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n\n.form-floating > label {\n z-index: 2;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 0 0;\n height: 100%;\n padding: 1rem .75rem;\n transition: opacity .1s ease-in-out, transform .1s ease-in-out;\n position: absolute;\n top: 0;\n left: 0;\n overflow: hidden;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n\n.form-floating > .form-control, .form-floating > .form-control-plaintext {\n padding: 1rem .75rem;\n}\n\n.form-floating > .form-control-plaintext::-moz-placeholder {\n color: #0000;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n color: #0000;\n}\n\n.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {\n color: #0000;\n}\n\n:-webkit-any(.form-floating > .form-control-plaintext:not(:placeholder-shown), .form-floating > .form-control:not(:placeholder-shown)), .form-floating > .form-control-plaintext:focus, .form-floating > .form-control-plaintext:not(:placeholder-shown), .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), :-webkit-any(.form-floating > .form-control-plaintext:-webkit-autofill, .form-floating > .form-control:-webkit-autofill), .form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: .625rem;\n}\n\n:is(.form-floating > .form-control-plaintext:not(:placeholder-shown), .form-floating > .form-control:not(:placeholder-shown)), .form-floating > .form-control-plaintext:focus, .form-floating > .form-control-plaintext:not(:placeholder-shown), .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), :is(.form-floating > .form-control-plaintext:autofill, .form-floating > .form-control:autofill), .form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: .625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n color: rgba(var(--bs-body-color-rgb), .65);\n transform: scale(.85)translateY(-.5rem)translateX(.15rem);\n}\n\n.form-floating > .form-control-plaintext ~ label, .form-floating > .form-control:focus ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label, .form-floating > .form-select ~ label {\n color: rgba(var(--bs-body-color-rgb), .65);\n transform: scale(.85)translateY(-.5rem)translateX(.15rem);\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label:after {\n z-index: -1;\n content: \"\";\n background-color: var(--bs-body-bg);\n border-radius: var(--bs-border-radius);\n height: 1.5em;\n position: absolute;\n inset: 1rem .375rem;\n}\n\n.form-floating > .form-control-plaintext ~ label:after, .form-floating > .form-control:focus ~ label:after, .form-floating > .form-control:not(:placeholder-shown) ~ label:after, .form-floating > .form-select ~ label:after {\n z-index: -1;\n content: \"\";\n background-color: var(--bs-body-bg);\n border-radius: var(--bs-border-radius);\n height: 1.5em;\n position: absolute;\n inset: 1rem .375rem;\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n color: rgba(var(--bs-body-color-rgb), .65);\n transform: scale(.85)translateY(-.5rem)translateX(.15rem);\n}\n\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n\n.form-floating > .form-control:disabled ~ label, .form-floating > :disabled ~ label {\n color: #6c757d;\n}\n\n.form-floating > .form-control:disabled ~ label:after, .form-floating > :disabled ~ label:after {\n background-color: var(--bs-secondary-bg);\n}\n\n.input-group {\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n display: flex;\n position: relative;\n}\n\n.input-group > .form-control, .input-group > .form-floating, .input-group > .form-select {\n flex: auto;\n width: 1%;\n min-width: 0;\n position: relative;\n}\n\n.input-group > .form-control:focus, .input-group > .form-floating:focus-within, .input-group > .form-select:focus {\n z-index: 5;\n}\n\n.input-group .btn {\n z-index: 2;\n position: relative;\n}\n\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n align-items: center;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n display: flex;\n}\n\n.input-group-lg > .btn, .input-group-lg > .form-control, .input-group-lg > .form-select, .input-group-lg > .input-group-text {\n border-radius: var(--bs-border-radius-lg);\n padding: .5rem 1rem;\n font-size: 1.25rem;\n}\n\n.input-group-sm > .btn, .input-group-sm > .form-control, .input-group-sm > .form-select, .input-group-sm > .input-group-text {\n border-radius: var(--bs-border-radius-sm);\n padding: .25rem .5rem;\n font-size: .875rem;\n}\n\n.input-group-lg > .form-select, .input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.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:not(.has-validation) > :not(:last-child):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, .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: calc(var(--bs-border-width) * -1);\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .form-floating:not(:first-child) > .form-control, .input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n color: var(--bs-form-valid-color);\n width: 100%;\n margin-top: .25rem;\n font-size: .875em;\n display: none;\n}\n\n.valid-tooltip {\n z-index: 5;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n margin-top: .1rem;\n padding: .25rem .5rem;\n font-size: .875rem;\n display: none;\n position: absolute;\n top: 100%;\n}\n\n.is-valid ~ .valid-feedback, .is-valid ~ .valid-tooltip, .was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-tooltip {\n display: block;\n}\n\n.form-control.is-valid, .was-validated .form-control:valid {\n border-color: var(--bs-form-valid-border-color);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right calc(.375em + .1875rem) center;\n background-repeat: no-repeat;\n background-size: calc(.75em + .375rem) calc(.75em + .375rem);\n padding-right: calc(1.5em + .75rem);\n}\n\n.form-control.is-valid:focus, .was-validated .form-control:valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 .25rem rgba(var(--bs-success-rgb), .25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n background-position: right calc(.375em + .1875rem) top calc(.375em + .1875rem);\n padding-right: calc(1.5em + .75rem);\n}\n\n.form-select.is-valid, .was-validated .form-select:valid {\n border-color: var(--bs-form-valid-border-color);\n}\n\n.form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"], .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right .75rem center, right 2.25rem center;\n background-size: 16px 12px, calc(.75em + .375rem) calc(.75em + .375rem);\n padding-right: 4.125rem;\n}\n\n.form-select.is-valid:focus, .was-validated .form-select:valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 .25rem rgba(var(--bs-success-rgb), .25);\n}\n\n.form-control-color.is-valid, .was-validated .form-control-color:valid {\n width: calc(1.5em + 3.75rem);\n}\n\n.form-check-input.is-valid, .was-validated .form-check-input:valid {\n border-color: var(--bs-form-valid-border-color);\n}\n\n.form-check-input.is-valid:checked, .was-validated .form-check-input:valid:checked {\n background-color: var(--bs-form-valid-color);\n}\n\n.form-check-input.is-valid:focus, .was-validated .form-check-input:valid:focus {\n box-shadow: 0 0 0 .25rem rgba(var(--bs-success-rgb), .25);\n}\n\n.form-check-input.is-valid ~ .form-check-label, .was-validated .form-check-input:valid ~ .form-check-label {\n color: var(--bs-form-valid-color);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: .5em;\n}\n\n.input-group > .form-control:not(:focus).is-valid, .input-group > .form-floating:not(:focus-within).is-valid, .input-group > .form-select:not(:focus).is-valid, .was-validated .input-group > .form-control:not(:focus):valid, .was-validated .input-group > .form-floating:not(:focus-within):valid, .was-validated .input-group > .form-select:not(:focus):valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n color: var(--bs-form-invalid-color);\n width: 100%;\n margin-top: .25rem;\n font-size: .875em;\n display: none;\n}\n\n.invalid-tooltip {\n z-index: 5;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n margin-top: .1rem;\n padding: .25rem .5rem;\n font-size: .875rem;\n display: none;\n position: absolute;\n top: 100%;\n}\n\n.is-invalid ~ .invalid-feedback, .is-invalid ~ .invalid-tooltip, .was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.form-control.is-invalid, .was-validated .form-control:invalid {\n border-color: var(--bs-form-invalid-border-color);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: right calc(.375em + .1875rem) center;\n background-repeat: no-repeat;\n background-size: calc(.75em + .375rem) calc(.75em + .375rem);\n padding-right: calc(1.5em + .75rem);\n}\n\n.form-control.is-invalid:focus, .was-validated .form-control:invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb), .25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n background-position: right calc(.375em + .1875rem) top calc(.375em + .1875rem);\n padding-right: calc(1.5em + .75rem);\n}\n\n.form-select.is-invalid, .was-validated .form-select:invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n\n.form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"], .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"] {\n --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\");\n background-position: right .75rem center, right 2.25rem center;\n background-size: 16px 12px, calc(.75em + .375rem) calc(.75em + .375rem);\n padding-right: 4.125rem;\n}\n\n.form-select.is-invalid:focus, .was-validated .form-select:invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb), .25);\n}\n\n.form-control-color.is-invalid, .was-validated .form-control-color:invalid {\n width: calc(1.5em + 3.75rem);\n}\n\n.form-check-input.is-invalid, .was-validated .form-check-input:invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n\n.form-check-input.is-invalid:checked, .was-validated .form-check-input:invalid:checked {\n background-color: var(--bs-form-invalid-color);\n}\n\n.form-check-input.is-invalid:focus, .was-validated .form-check-input:invalid:focus {\n box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb), .25);\n}\n\n.form-check-input.is-invalid ~ .form-check-label, .was-validated .form-check-input:invalid ~ .form-check-label {\n color: var(--bs-form-invalid-color);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: .5em;\n}\n\n.input-group > .form-control:not(:focus).is-invalid, .input-group > .form-floating:not(:focus-within).is-invalid, .input-group > .form-select:not(:focus).is-invalid, .was-validated .input-group > .form-control:not(:focus):invalid, .was-validated .input-group > .form-floating:not(:focus-within):invalid, .was-validated .input-group > .form-select:not(:focus):invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: .75rem;\n --bs-btn-padding-y: .375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: var(--bs-body-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: var(--bs-border-radius);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 #ffffff26, 0 1px 1px #00000013;\n --bs-btn-disabled-opacity: .65;\n --bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n text-decoration: none;\n transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n display: inline-block;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n box-shadow: var(--bs-btn-focus-box-shadow);\n outline: 0;\n}\n\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n box-shadow: var(--bs-btn-focus-box-shadow);\n outline: 0;\n}\n\n.btn-check:checked + .btn, .btn.active, .btn.show, .btn:first-child:active, :not(.btn-check) + .btn:active {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n\n.btn-check:checked + .btn:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible, .btn:first-child:active:focus-visible, :not(.btn-check) + .btn:active:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n\n.btn.disabled, .btn:disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px #00000020;\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: 0 0 0 #000;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-group-lg > .btn, .btn-lg {\n --bs-btn-padding-y: .5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: var(--bs-border-radius-lg);\n}\n\n.btn-group-sm > .btn, .btn-sm {\n --bs-btn-padding-y: .25rem;\n --bs-btn-padding-x: .5rem;\n --bs-btn-font-size: .875rem;\n --bs-btn-border-radius: var(--bs-border-radius-sm);\n}\n\n.fade {\n transition: opacity .15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n transition: height .35s;\n overflow: hidden;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width .35s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropdown, .dropdown-center, .dropend, .dropstart, .dropup, .dropup-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle:after {\n vertical-align: .255em;\n content: \"\";\n border: .3em solid #0000;\n border-top-color: currentColor;\n border-bottom: 0;\n margin-left: .255em;\n display: inline-block;\n}\n\n.dropdown-toggle:empty:after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: .5rem;\n --bs-dropdown-spacer: .125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: var(--bs-border-radius);\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: .5rem;\n --bs-dropdown-box-shadow: var(--bs-box-shadow);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: .25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: .5rem;\n z-index: var(--bs-dropdown-zindex);\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n background-color: var(--bs-dropdown-bg);\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n background-clip: padding-box;\n margin: 0;\n list-style: none;\n display: none;\n position: absolute;\n}\n\n.dropdown-menu[data-bs-popper] {\n margin-top: var(--bs-dropdown-spacer);\n top: 100%;\n left: 0;\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n left: 0;\n right: auto;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n left: auto;\n right: 0;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n\n .dropdown-menu-sm-start[data-bs-popper] {\n left: 0;\n right: auto;\n }\n\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n\n .dropdown-menu-sm-end[data-bs-popper] {\n left: auto;\n right: 0;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n\n .dropdown-menu-md-start[data-bs-popper] {\n left: 0;\n right: auto;\n }\n\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n\n .dropdown-menu-md-end[data-bs-popper] {\n left: auto;\n right: 0;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n\n .dropdown-menu-lg-start[data-bs-popper] {\n left: 0;\n right: auto;\n }\n\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n\n .dropdown-menu-lg-end[data-bs-popper] {\n left: auto;\n right: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n\n .dropdown-menu-xl-start[data-bs-popper] {\n left: 0;\n right: auto;\n }\n\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n\n .dropdown-menu-xl-end[data-bs-popper] {\n left: auto;\n right: 0;\n }\n}\n\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n\n .dropdown-menu-xxl-start[data-bs-popper] {\n left: 0;\n right: auto;\n }\n\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n\n .dropdown-menu-xxl-end[data-bs-popper] {\n left: auto;\n right: 0;\n }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n top: auto;\n bottom: 100%;\n}\n\n.dropup .dropdown-toggle:after {\n vertical-align: .255em;\n content: \"\";\n border: .3em solid #0000;\n border-top: 0;\n border-bottom-color: currentColor;\n margin-left: .255em;\n display: inline-block;\n}\n\n.dropup .dropdown-toggle:empty:after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n top: 0;\n left: 100%;\n right: auto;\n}\n\n.dropend .dropdown-toggle:after {\n vertical-align: .255em;\n content: \"\";\n border: .3em solid #0000;\n border-left-color: currentColor;\n border-right: 0;\n margin-left: .255em;\n display: inline-block;\n}\n\n.dropend .dropdown-toggle:empty:after {\n margin-left: 0;\n}\n\n.dropend .dropdown-toggle:after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n top: 0;\n left: auto;\n right: 100%;\n}\n\n.dropstart .dropdown-toggle:after {\n vertical-align: .255em;\n content: \"\";\n margin-left: .255em;\n display: none;\n}\n\n.dropstart .dropdown-toggle:before {\n vertical-align: .255em;\n content: \"\";\n border-top: .3em solid #0000;\n border-bottom: .3em solid #0000;\n border-right: .3em solid;\n margin-right: .255em;\n display: inline-block;\n}\n\n.dropstart .dropdown-toggle:empty:after {\n margin-left: 0;\n}\n\n.dropstart .dropdown-toggle:before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n margin: var(--bs-dropdown-divider-margin-y) 0;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n height: 0;\n overflow: hidden;\n}\n\n.dropdown-item {\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n white-space: nowrap;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n background-color: #0000;\n border: 0;\n width: 100%;\n font-weight: 400;\n text-decoration: none;\n display: block;\n}\n\n.dropdown-item:focus, .dropdown-item:hover {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n background-color: var(--bs-dropdown-link-active-bg);\n text-decoration: none;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: #0000;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n margin-bottom: 0;\n font-size: .875rem;\n display: block;\n}\n\n.dropdown-item-text {\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n display: block;\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: #ffffff26;\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group, .btn-group-vertical {\n vertical-align: middle;\n display: inline-flex;\n position: relative;\n}\n\n.btn-group-vertical > .btn, .btn-group > .btn {\n flex: auto;\n position: relative;\n}\n\n.btn-group-vertical > .btn-check:checked + .btn, .btn-group-vertical > .btn-check:focus + .btn, .btn-group-vertical > .btn.active, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:hover, .btn-group > .btn-check:checked + .btn, .btn-group > .btn-check:focus + .btn, .btn-group > .btn.active, .btn-group > .btn:active, .btn-group > .btn:focus, .btn-group > .btn:hover {\n z-index: 1;\n}\n\n.btn-toolbar {\n flex-wrap: wrap;\n justify-content: flex-start;\n display: flex;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: var(--bs-border-radius);\n}\n\n.btn-group > .btn-group:not(:first-child), .btn-group > :not(.btn-check:first-child) + .btn {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n\n.btn-group > .btn-group:not(:last-child) > .btn, .btn-group > .btn.dropdown-toggle-split:first-child, .btn-group > .btn:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:not(:first-child) > .btn, .btn-group > .btn:nth-child(n+3), .btn-group > :not(.btn-check) + .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-left: .5625rem;\n padding-right: .5625rem;\n}\n\n.dropdown-toggle-split:after, .dropend .dropdown-toggle-split:after, .dropup .dropdown-toggle-split:after {\n margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split:before {\n margin-right: 0;\n}\n\n.btn-group-sm > .btn + .dropdown-toggle-split, .btn-sm + .dropdown-toggle-split {\n padding-left: .375rem;\n padding-right: .375rem;\n}\n\n.btn-group-lg > .btn + .dropdown-toggle-split, .btn-lg + .dropdown-toggle-split {\n padding-left: .75rem;\n padding-right: .75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n}\n\n.btn-group-vertical > .btn, .btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child), .btn-group-vertical > .btn:not(:first-child) {\n margin-top: calc(var(--bs-border-width) * -1);\n}\n\n.btn-group-vertical > .btn-group:not(:last-child) > .btn, .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child) > .btn, .btn-group-vertical > .btn ~ .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: .5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n flex-wrap: wrap;\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n display: flex;\n}\n\n.nav-link {\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n background: none;\n border: 0;\n text-decoration: none;\n transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out;\n display: block;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n\n.nav-link:focus, .nav-link:hover {\n color: var(--bs-nav-link-hover-color);\n}\n\n.nav-link:focus-visible {\n outline: 0;\n box-shadow: 0 0 0 .25rem #0d6efd40;\n}\n\n.nav-link.disabled, .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n\n.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n\n.nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: var(--bs-border-radius);\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n\n.nav-pills .nav-link {\n border-radius: var(--bs-nav-pills-border-radius);\n}\n\n.nav-pills .nav-link.active, .nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n --bs-nav-underline-gap: 1rem;\n --bs-nav-underline-border-width: .125rem;\n --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n gap: var(--bs-nav-underline-gap);\n}\n\n.nav-underline .nav-link {\n border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n padding-left: 0;\n padding-right: 0;\n}\n\n.nav-underline .nav-link:focus, .nav-underline .nav-link:hover {\n border-bottom-color: currentColor;\n}\n\n.nav-underline .nav-link.active, .nav-underline .show > .nav-link {\n color: var(--bs-nav-underline-link-active-color);\n border-bottom-color: currentColor;\n font-weight: 700;\n}\n\n.nav-fill .nav-item, .nav-fill > .nav-link {\n text-align: center;\n flex: auto;\n}\n\n.nav-justified .nav-item, .nav-justified > .nav-link {\n text-align: center;\n flex-grow: 1;\n flex-basis: 0;\n}\n\n.nav-fill .nav-item .nav-link, .nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: .5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), .65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), .8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), .3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: .3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: .5rem;\n --bs-navbar-toggler-padding-y: .25rem;\n --bs-navbar-toggler-padding-x: .75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), .15);\n --bs-navbar-toggler-border-radius: var(--bs-border-radius);\n --bs-navbar-toggler-focus-width: .25rem;\n --bs-navbar-toggler-transition: box-shadow .15s ease-in-out;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n flex-wrap: wrap;\n justify-content: space-between;\n align-items: center;\n display: flex;\n position: relative;\n}\n\n.navbar > .container, .navbar > .container-fluid, .navbar > .container-lg, .navbar > .container-md, .navbar > .container-sm, .navbar > .container-xl, .navbar > .container-xxl {\n flex-wrap: inherit;\n justify-content: space-between;\n align-items: center;\n display: flex;\n}\n\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n white-space: nowrap;\n text-decoration: none;\n}\n\n.navbar-brand:focus, .navbar-brand:hover {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: .5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n flex-direction: column;\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n display: flex;\n}\n\n.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n color: var(--bs-navbar-color);\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n\n.navbar-text a, .navbar-text a:focus, .navbar-text a:hover {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-grow: 1;\n flex-basis: 100%;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n color: var(--bs-navbar-color);\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n background-color: #0000;\n line-height: 1;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n\n.navbar-toggler:hover {\n text-decoration: none;\n}\n\n.navbar-toggler:focus {\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n outline: 0;\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 100%;\n width: 1.5em;\n height: 1.5em;\n display: inline-block;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-expand-sm .navbar-collapse {\n flex-basis: auto;\n display: flex !important;\n }\n\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n\n .navbar-expand-sm .offcanvas {\n z-index: auto;\n flex-grow: 1;\n transition: none;\n position: static;\n visibility: visible !important;\n background-color: #0000 !important;\n border: 0 !important;\n width: auto !important;\n height: auto !important;\n transform: none !important;\n }\n\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n\n .navbar-expand-sm .offcanvas .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-expand-md .navbar-collapse {\n flex-basis: auto;\n display: flex !important;\n }\n\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n\n .navbar-expand-md .offcanvas {\n z-index: auto;\n flex-grow: 1;\n transition: none;\n position: static;\n visibility: visible !important;\n background-color: #0000 !important;\n border: 0 !important;\n width: auto !important;\n height: auto !important;\n transform: none !important;\n }\n\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n\n .navbar-expand-md .offcanvas .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-expand-lg .navbar-collapse {\n flex-basis: auto;\n display: flex !important;\n }\n\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n\n .navbar-expand-lg .offcanvas {\n z-index: auto;\n flex-grow: 1;\n transition: none;\n position: static;\n visibility: visible !important;\n background-color: #0000 !important;\n border: 0 !important;\n width: auto !important;\n height: auto !important;\n transform: none !important;\n }\n\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n\n .navbar-expand-lg .offcanvas .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-expand-xl .navbar-collapse {\n flex-basis: auto;\n display: flex !important;\n }\n\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n\n .navbar-expand-xl .offcanvas {\n z-index: auto;\n flex-grow: 1;\n transition: none;\n position: static;\n visibility: visible !important;\n background-color: #0000 !important;\n border: 0 !important;\n width: auto !important;\n height: auto !important;\n transform: none !important;\n }\n\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n\n .navbar-expand-xl .offcanvas .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n }\n}\n\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-expand-xxl .navbar-collapse {\n flex-basis: auto;\n display: flex !important;\n }\n\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n\n .navbar-expand-xxl .offcanvas {\n z-index: auto;\n flex-grow: 1;\n transition: none;\n position: static;\n visibility: visible !important;\n background-color: #0000 !important;\n border: 0 !important;\n width: auto !important;\n height: auto !important;\n transform: none !important;\n }\n\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n }\n}\n\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n flex-basis: auto;\n display: flex !important;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-expand .offcanvas {\n z-index: auto;\n flex-grow: 1;\n transition: none;\n position: static;\n visibility: visible !important;\n background-color: #0000 !important;\n border: 0 !important;\n width: auto !important;\n height: auto !important;\n transform: none !important;\n}\n\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n\n.navbar-expand .offcanvas .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n}\n\n.navbar-dark, .navbar[data-bs-theme=\"dark\"] {\n --bs-navbar-color: #ffffff8c;\n --bs-navbar-hover-color: #ffffffbf;\n --bs-navbar-disabled-color: #ffffff40;\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: #ffffff1a;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=\"dark\"] .navbar-toggler-icon {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: .5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: .5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: .75rem;\n height: var(--bs-card-height);\n color: var(--bs-body-color);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n background-clip: border-box;\n flex-direction: column;\n min-width: 0;\n display: flex;\n position: relative;\n}\n\n.card > hr {\n margin-left: 0;\n margin-right: 0;\n}\n\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n border-top-width: 0;\n}\n\n.card > .list-group:last-child {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n border-bottom-width: 0;\n}\n\n.card > .card-header + .list-group, .card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n flex: auto;\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--bs-card-title-spacer-y));\n color: var(--bs-card-subtitle-color);\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n margin-bottom: 0;\n}\n\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n position: absolute;\n inset: 0;\n}\n\n.card-img, .card-img-bottom, .card-img-top {\n width: 100%;\n}\n\n.card-img, .card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img, .card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: wrap;\n display: flex;\n }\n\n .card-group > .card {\n flex: 1 0;\n margin-bottom: 0;\n }\n\n .card-group > .card + .card {\n border-left: 0;\n margin-left: 0;\n }\n\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n .card-group > .card:not(:last-child) .card-header, .card-group > .card:not(:last-child) .card-img-top {\n border-top-right-radius: 0;\n }\n\n .card-group > .card:not(:last-child) .card-footer, .card-group > .card:not(:last-child) .card-img-bottom {\n border-bottom-right-radius: 0;\n }\n\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .card-group > .card:not(:first-child) .card-header, .card-group > .card:not(:first-child) .card-img-top {\n border-top-left-radius: 0;\n }\n\n .card-group > .card:not(:first-child) .card-footer, .card-group > .card:not(:first-child) .card-img-bottom {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --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;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform .2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem #0d6efd40;\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text-emphasis);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n border: 0;\n border-radius: 0;\n align-items: center;\n width: 100%;\n font-size: 1rem;\n display: flex;\n position: relative;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n\n.accordion-button:not(.collapsed):after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n\n.accordion-button:after {\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n flex-shrink: 0;\n margin-left: auto;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .accordion-button:after {\n transition: none;\n }\n}\n\n.accordion-button:hover {\n z-index: 2;\n}\n\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n outline: 0;\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n border-left: 0;\n border-right: 0;\n border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n[data-bs-theme=\"dark\"] .accordion-button:after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: .5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n flex-wrap: wrap;\n list-style: none;\n display: flex;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n\n.breadcrumb-item + .breadcrumb-item:before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\");\n}\n\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: .75rem;\n --bs-pagination-padding-y: .375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 .25rem #0d6efd40;\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n padding-left: 0;\n list-style: none;\n display: flex;\n}\n\n.page-link {\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n text-decoration: none;\n transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n display: block;\n position: relative;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n box-shadow: var(--bs-pagination-focus-box-shadow);\n outline: 0;\n}\n\n.active > .page-link, .page-link.active {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n\n.disabled > .page-link, .page-link.disabled {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: .75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: var(--bs-border-radius-lg);\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: .5rem;\n --bs-pagination-padding-y: .25rem;\n --bs-pagination-font-size: .875rem;\n --bs-pagination-border-radius: var(--bs-border-radius-sm);\n}\n\n.badge {\n --bs-badge-padding-x: .65em;\n --bs-badge-padding-y: .35em;\n --bs-badge-font-size: .75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: var(--bs-border-radius);\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n line-height: 1;\n display: inline-block;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: var(--bs-border-radius);\n --bs-alert-link-color: inherit;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n position: relative;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n color: var(--bs-alert-link-color);\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n z-index: 2;\n padding: 1.25rem 1rem;\n position: absolute;\n top: 0;\n right: 0;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text-emphasis);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text-emphasis);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text-emphasis);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text-emphasis);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text-emphasis);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text-emphasis);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text-emphasis);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text-emphasis);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text-emphasis);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text-emphasis);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text-emphasis);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text-emphasis);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text-emphasis);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text-emphasis);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text-emphasis);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text-emphasis);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n\n.progress, .progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: .75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width .6s ease;\n height: var(--bs-progress-height);\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n display: flex;\n overflow: hidden;\n}\n\n.progress-bar {\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n flex-direction: column;\n justify-content: center;\n display: flex;\n overflow: hidden;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, #ffffff26 25%, #0000 25% 50%, #ffffff26 50% 75%, #0000 75%, #0000);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: .5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n border-radius: var(--bs-list-group-border-radius);\n flex-direction: column;\n margin-bottom: 0;\n padding-left: 0;\n display: flex;\n}\n\n.list-group-numbered {\n counter-reset: section;\n list-style-type: none;\n}\n\n.list-group-numbered > .list-group-item:before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n width: 100%;\n}\n\n.list-group-item-action:focus, .list-group-item-action:hover {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n background-color: var(--bs-list-group-action-hover-bg);\n text-decoration: none;\n}\n\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n text-decoration: none;\n display: block;\n position: relative;\n}\n\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n\n.list-group-flush {\n border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text-emphasis);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-primary-border-subtle);\n --bs-list-group-active-color: var(--bs-primary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-primary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-primary-text-emphasis);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text-emphasis);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-active-color: var(--bs-secondary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-secondary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text-emphasis);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-success-border-subtle);\n --bs-list-group-active-color: var(--bs-success-bg-subtle);\n --bs-list-group-active-bg: var(--bs-success-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-success-text-emphasis);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text-emphasis);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-info-border-subtle);\n --bs-list-group-active-color: var(--bs-info-bg-subtle);\n --bs-list-group-active-bg: var(--bs-info-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-info-text-emphasis);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text-emphasis);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-warning-border-subtle);\n --bs-list-group-active-color: var(--bs-warning-bg-subtle);\n --bs-list-group-active-bg: var(--bs-warning-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-warning-text-emphasis);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text-emphasis);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-danger-border-subtle);\n --bs-list-group-active-color: var(--bs-danger-bg-subtle);\n --bs-list-group-active-bg: var(--bs-danger-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-danger-text-emphasis);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text-emphasis);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-light-border-subtle);\n --bs-list-group-active-color: var(--bs-light-bg-subtle);\n --bs-list-group-active-bg: var(--bs-light-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-light-text-emphasis);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text-emphasis);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-dark-border-subtle);\n --bs-list-group-active-color: var(--bs-dark-bg-subtle);\n --bs-list-group-active-bg: var(--bs-dark-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-dark-text-emphasis);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: .5;\n --bs-btn-close-hover-opacity: .75;\n --bs-btn-close-focus-shadow: 0 0 0 .25rem #0d6efd40;\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: .25;\n --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n box-sizing: content-box;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center / 1em auto no-repeat;\n opacity: var(--bs-btn-close-opacity);\n border: 0;\n border-radius: .375rem;\n width: 1em;\n height: 1em;\n padding: .25em;\n}\n\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n opacity: var(--bs-btn-close-hover-opacity);\n text-decoration: none;\n}\n\n.btn-close:focus {\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n outline: 0;\n}\n\n.btn-close.disabled, .btn-close:disabled {\n pointer-events: none;\n -webkit-user-select: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white, [data-bs-theme=\"dark\"] .btn-close {\n filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: .75rem;\n --bs-toast-padding-y: .5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: .875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), .85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), .85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n background-clip: padding-box;\n max-width: 100%;\n}\n\n.toast.showing {\n opacity: 0;\n}\n\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n z-index: var(--bs-toast-zindex);\n pointer-events: none;\n width: max-content;\n max-width: 100%;\n position: absolute;\n}\n\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n background-clip: padding-box;\n align-items: center;\n display: flex;\n}\n\n.toast-header .btn-close {\n margin-right: calc(-.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: .5rem;\n --bs-modal-color: ;\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: var(--bs-box-shadow-sm);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: .5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n z-index: var(--bs-modal-zindex);\n outline: 0;\n width: 100%;\n height: 100%;\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n overflow: hidden auto;\n}\n\n.modal-dialog {\n margin: var(--bs-modal-margin);\n pointer-events: none;\n width: auto;\n position: relative;\n}\n\n.modal.fade .modal-dialog {\n transition: transform .3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n align-items: center;\n display: flex;\n}\n\n.modal-content {\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n background-clip: padding-box;\n outline: 0;\n flex-direction: column;\n width: 100%;\n display: flex;\n position: relative;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: .5;\n z-index: var(--bs-backdrop-zindex);\n background-color: var(--bs-backdrop-bg);\n width: 100vw;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n flex-shrink: 0;\n justify-content: space-between;\n align-items: center;\n display: flex;\n}\n\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n line-height: var(--bs-modal-title-line-height);\n margin-bottom: 0;\n}\n\n.modal-body {\n padding: var(--bs-modal-padding);\n flex: auto;\n position: relative;\n}\n\n.modal-footer {\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n flex-wrap: wrap;\n flex-shrink: 0;\n justify-content: flex-end;\n align-items: center;\n display: flex;\n}\n\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * .5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: var(--bs-box-shadow);\n }\n\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-left: auto;\n margin-right: auto;\n }\n\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg, .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n border: 0;\n border-radius: 0;\n height: 100%;\n}\n\n.modal-fullscreen .modal-footer, .modal-fullscreen .modal-header {\n border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n\n .modal-fullscreen-sm-down .modal-content {\n border: 0;\n border-radius: 0;\n height: 100%;\n }\n\n .modal-fullscreen-sm-down .modal-footer, .modal-fullscreen-sm-down .modal-header {\n border-radius: 0;\n }\n\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n\n .modal-fullscreen-md-down .modal-content {\n border: 0;\n border-radius: 0;\n height: 100%;\n }\n\n .modal-fullscreen-md-down .modal-footer, .modal-fullscreen-md-down .modal-header {\n border-radius: 0;\n }\n\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n\n .modal-fullscreen-lg-down .modal-content {\n border: 0;\n border-radius: 0;\n height: 100%;\n }\n\n .modal-fullscreen-lg-down .modal-footer, .modal-fullscreen-lg-down .modal-header {\n border-radius: 0;\n }\n\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n\n .modal-fullscreen-xl-down .modal-content {\n border: 0;\n border-radius: 0;\n height: 100%;\n }\n\n .modal-fullscreen-xl-down .modal-footer, .modal-fullscreen-xl-down .modal-header {\n border-radius: 0;\n }\n\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n\n .modal-fullscreen-xxl-down .modal-content {\n border: 0;\n border-radius: 0;\n height: 100%;\n }\n\n .modal-fullscreen-xxl-down .modal-footer, .modal-fullscreen-xxl-down .modal-header {\n border-radius: 0;\n }\n\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: .5rem;\n --bs-tooltip-padding-y: .25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: .875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: .9;\n --bs-tooltip-arrow-width: .8rem;\n --bs-tooltip-arrow-height: .4rem;\n z-index: var(--bs-tooltip-zindex);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n text-align: left;\n text-align: start;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n text-decoration: none;\n display: block;\n}\n\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n\n.tooltip .tooltip-arrow {\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n display: block;\n}\n\n.tooltip .tooltip-arrow:before {\n content: \"\";\n border-style: solid;\n border-color: #0000;\n position: absolute;\n}\n\n.bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow, .bs-tooltip-top .tooltip-arrow {\n bottom: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n\n.bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow:before, .bs-tooltip-top .tooltip-arrow:before {\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;\n border-top-color: var(--bs-tooltip-bg);\n top: -1px;\n}\n\n.bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow, .bs-tooltip-end .tooltip-arrow {\n left: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n\n.bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow:before, .bs-tooltip-end .tooltip-arrow:before {\n border-width: calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;\n border-right-color: var(--bs-tooltip-bg);\n right: -1px;\n}\n\n.bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow, .bs-tooltip-bottom .tooltip-arrow {\n top: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n\n.bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow:before, .bs-tooltip-bottom .tooltip-arrow:before {\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n bottom: -1px;\n}\n\n.bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow, .bs-tooltip-start .tooltip-arrow {\n right: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n\n.bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow:before, .bs-tooltip-start .tooltip-arrow:before {\n border-width: calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n left: -1px;\n}\n\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: .875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: var(--bs-box-shadow);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: .5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: inherit;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: .5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n text-align: left;\n text-align: start;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n background-clip: padding-box;\n text-decoration: none;\n display: block;\n}\n\n.popover .popover-arrow {\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n display: block;\n}\n\n.popover .popover-arrow:after, .popover .popover-arrow:before {\n content: \"\";\n border: 0 solid #0000;\n display: block;\n position: absolute;\n}\n\n.bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow, .bs-popover-top > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n\n.bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow:after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow:before, .bs-popover-top > .popover-arrow:after, .bs-popover-top > .popover-arrow:before {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0;\n}\n\n.bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow:before, .bs-popover-top > .popover-arrow:before {\n border-top-color: var(--bs-popover-arrow-border);\n bottom: 0;\n}\n\n.bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow:after, .bs-popover-top > .popover-arrow:after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n.bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow, .bs-popover-end > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n\n.bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow:after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow:before, .bs-popover-end > .popover-arrow:after, .bs-popover-end > .popover-arrow:before {\n border-width: calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0;\n}\n\n.bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow:before, .bs-popover-end > .popover-arrow:before {\n border-right-color: var(--bs-popover-arrow-border);\n left: 0;\n}\n\n.bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow:after, .bs-popover-end > .popover-arrow:after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n.bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow, .bs-popover-bottom > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n\n.bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow:after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow:before, .bs-popover-bottom > .popover-arrow:after, .bs-popover-bottom > .popover-arrow:before {\n border-width: 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height);\n}\n\n.bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow:before, .bs-popover-bottom > .popover-arrow:before {\n border-bottom-color: var(--bs-popover-arrow-border);\n top: 0;\n}\n\n.bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow:after, .bs-popover-bottom > .popover-arrow:after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n\n.bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header:before, .bs-popover-bottom .popover-header:before {\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n display: block;\n position: absolute;\n top: 0;\n left: 50%;\n}\n\n.bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow, .bs-popover-start > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n\n.bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow:after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow:before, .bs-popover-start > .popover-arrow:after, .bs-popover-start > .popover-arrow:before {\n border-width: calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height);\n}\n\n.bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow:before, .bs-popover-start > .popover-arrow:before {\n border-left-color: var(--bs-popover-arrow-border);\n right: 0;\n}\n\n.bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow:after, .bs-popover-start > .popover-arrow:after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n margin-bottom: 0;\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n width: 100%;\n position: relative;\n overflow: hidden;\n}\n\n.carousel-inner:after {\n clear: both;\n content: \"\";\n display: block;\n}\n\n.carousel-item {\n float: left;\n backface-visibility: hidden;\n width: 100%;\n margin-right: -100%;\n transition: transform .6s ease-in-out;\n display: none;\n position: relative;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item-next, .carousel-item-prev, .carousel-item.active {\n display: block;\n}\n\n.active.carousel-item-end, .carousel-item-next:not(.carousel-item-start) {\n transform: translateX(100%);\n}\n\n.active.carousel-item-start, .carousel-item-prev:not(.carousel-item-end) {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item-next.carousel-item-start, .carousel-fade .carousel-item-prev.carousel-item-end, .carousel-fade .carousel-item.active {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-end, .carousel-fade .active.carousel-item-start {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s .6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-end, .carousel-fade .active.carousel-item-start {\n transition: none;\n }\n}\n\n.carousel-control-next, .carousel-control-prev {\n z-index: 1;\n color: #fff;\n text-align: center;\n opacity: .5;\n background: none;\n border: 0;\n justify-content: center;\n align-items: center;\n width: 15%;\n padding: 0;\n transition: opacity .15s;\n display: flex;\n position: absolute;\n top: 0;\n bottom: 0;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-next, .carousel-control-prev {\n transition: none;\n }\n}\n\n.carousel-control-next:focus, .carousel-control-next:hover, .carousel-control-prev:focus, .carousel-control-prev:hover {\n color: #fff;\n opacity: .9;\n outline: 0;\n text-decoration: none;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-next-icon, .carousel-control-prev-icon {\n background-position: 50%;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n width: 2rem;\n height: 2rem;\n display: inline-block;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n z-index: 2;\n justify-content: center;\n margin-bottom: 1rem;\n margin-left: 15%;\n margin-right: 15%;\n padding: 0;\n display: flex;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n text-indent: -999px;\n cursor: pointer;\n opacity: .5;\n background-color: #fff;\n background-clip: padding-box;\n border: 10px solid #0000;\n border-left: 0;\n border-right: 0;\n flex: 0 auto;\n width: 30px;\n height: 3px;\n margin-left: 3px;\n margin-right: 3px;\n padding: 0;\n transition: opacity .6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n color: #fff;\n text-align: center;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n position: absolute;\n bottom: 1.25rem;\n left: 15%;\n right: 15%;\n}\n\n.carousel-dark .carousel-control-next-icon, .carousel-dark .carousel-control-prev-icon {\n filter: invert() grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n[data-bs-theme=\"dark\"] .carousel .carousel-control-next-icon, [data-bs-theme=\"dark\"] .carousel .carousel-control-prev-icon, [data-bs-theme=\"dark\"].carousel .carousel-control-next-icon, [data-bs-theme=\"dark\"].carousel .carousel-control-prev-icon {\n filter: invert() grayscale(100);\n}\n\n[data-bs-theme=\"dark\"] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=\"dark\"].carousel .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n\n[data-bs-theme=\"dark\"] .carousel .carousel-caption, [data-bs-theme=\"dark\"].carousel .carousel-caption {\n color: #000;\n}\n\n.spinner-border, .spinner-grow {\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n border-radius: 50%;\n display: inline-block;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -.125em;\n --bs-spinner-border-width: .25em;\n --bs-spinner-animation-speed: .75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: #0000;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: .2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -.125em;\n --bs-spinner-animation-speed: .75s;\n --bs-spinner-animation-name: spinner-grow;\n opacity: 0;\n background-color: currentColor;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border, .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n\n.offcanvas, .offcanvas-lg, .offcanvas-md, .offcanvas-sm, .offcanvas-xl, .offcanvas-xxl {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);\n --bs-offcanvas-transition: transform .3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n z-index: var(--bs-offcanvas-zindex);\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n transition: var(--bs-offcanvas-transition);\n background-clip: padding-box;\n outline: 0;\n flex-direction: column;\n max-width: 100%;\n display: flex;\n position: fixed;\n bottom: 0;\n }\n}\n\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n left: 0;\n transform: translateX(-100%);\n }\n\n .offcanvas-sm.offcanvas-end {\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n right: 0;\n transform: translateX(100%);\n }\n\n .offcanvas-sm.offcanvas-top {\n height: var(--bs-offcanvas-height);\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(-100%);\n }\n\n .offcanvas-sm.offcanvas-bottom {\n height: var(--bs-offcanvas-height);\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n left: 0;\n right: 0;\n transform: translateY(100%);\n }\n\n .offcanvas-sm.show:not(.hiding), .offcanvas-sm.showing {\n transform: none;\n }\n\n .offcanvas-sm.hiding, .offcanvas-sm.show, .offcanvas-sm.showing {\n visibility: visible;\n }\n}\n\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: #0000 !important;\n }\n\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n\n .offcanvas-sm .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n background-color: #0000 !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n z-index: var(--bs-offcanvas-zindex);\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n transition: var(--bs-offcanvas-transition);\n background-clip: padding-box;\n outline: 0;\n flex-direction: column;\n max-width: 100%;\n display: flex;\n position: fixed;\n bottom: 0;\n }\n}\n\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n left: 0;\n transform: translateX(-100%);\n }\n\n .offcanvas-md.offcanvas-end {\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n right: 0;\n transform: translateX(100%);\n }\n\n .offcanvas-md.offcanvas-top {\n height: var(--bs-offcanvas-height);\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(-100%);\n }\n\n .offcanvas-md.offcanvas-bottom {\n height: var(--bs-offcanvas-height);\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n left: 0;\n right: 0;\n transform: translateY(100%);\n }\n\n .offcanvas-md.show:not(.hiding), .offcanvas-md.showing {\n transform: none;\n }\n\n .offcanvas-md.hiding, .offcanvas-md.show, .offcanvas-md.showing {\n visibility: visible;\n }\n}\n\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: #0000 !important;\n }\n\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n\n .offcanvas-md .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n background-color: #0000 !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n z-index: var(--bs-offcanvas-zindex);\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n transition: var(--bs-offcanvas-transition);\n background-clip: padding-box;\n outline: 0;\n flex-direction: column;\n max-width: 100%;\n display: flex;\n position: fixed;\n bottom: 0;\n }\n}\n\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n left: 0;\n transform: translateX(-100%);\n }\n\n .offcanvas-lg.offcanvas-end {\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n right: 0;\n transform: translateX(100%);\n }\n\n .offcanvas-lg.offcanvas-top {\n height: var(--bs-offcanvas-height);\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(-100%);\n }\n\n .offcanvas-lg.offcanvas-bottom {\n height: var(--bs-offcanvas-height);\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n left: 0;\n right: 0;\n transform: translateY(100%);\n }\n\n .offcanvas-lg.show:not(.hiding), .offcanvas-lg.showing {\n transform: none;\n }\n\n .offcanvas-lg.hiding, .offcanvas-lg.show, .offcanvas-lg.showing {\n visibility: visible;\n }\n}\n\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: #0000 !important;\n }\n\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n\n .offcanvas-lg .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n background-color: #0000 !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n z-index: var(--bs-offcanvas-zindex);\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n transition: var(--bs-offcanvas-transition);\n background-clip: padding-box;\n outline: 0;\n flex-direction: column;\n max-width: 100%;\n display: flex;\n position: fixed;\n bottom: 0;\n }\n}\n\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n left: 0;\n transform: translateX(-100%);\n }\n\n .offcanvas-xl.offcanvas-end {\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n right: 0;\n transform: translateX(100%);\n }\n\n .offcanvas-xl.offcanvas-top {\n height: var(--bs-offcanvas-height);\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(-100%);\n }\n\n .offcanvas-xl.offcanvas-bottom {\n height: var(--bs-offcanvas-height);\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n left: 0;\n right: 0;\n transform: translateY(100%);\n }\n\n .offcanvas-xl.show:not(.hiding), .offcanvas-xl.showing {\n transform: none;\n }\n\n .offcanvas-xl.hiding, .offcanvas-xl.show, .offcanvas-xl.showing {\n visibility: visible;\n }\n}\n\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: #0000 !important;\n }\n\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n\n .offcanvas-xl .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n background-color: #0000 !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n z-index: var(--bs-offcanvas-zindex);\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n transition: var(--bs-offcanvas-transition);\n background-clip: padding-box;\n outline: 0;\n flex-direction: column;\n max-width: 100%;\n display: flex;\n position: fixed;\n bottom: 0;\n }\n}\n\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n left: 0;\n transform: translateX(-100%);\n }\n\n .offcanvas-xxl.offcanvas-end {\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n right: 0;\n transform: translateX(100%);\n }\n\n .offcanvas-xxl.offcanvas-top {\n height: var(--bs-offcanvas-height);\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(-100%);\n }\n\n .offcanvas-xxl.offcanvas-bottom {\n height: var(--bs-offcanvas-height);\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n left: 0;\n right: 0;\n transform: translateY(100%);\n }\n\n .offcanvas-xxl.show:not(.hiding), .offcanvas-xxl.showing {\n transform: none;\n }\n\n .offcanvas-xxl.hiding, .offcanvas-xxl.show, .offcanvas-xxl.showing {\n visibility: visible;\n }\n}\n\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: #0000 !important;\n }\n\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n\n .offcanvas-xxl .offcanvas-body {\n flex-grow: 0;\n padding: 0;\n display: flex;\n overflow-y: visible;\n background-color: #0000 !important;\n }\n}\n\n.offcanvas {\n z-index: var(--bs-offcanvas-zindex);\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n transition: var(--bs-offcanvas-transition);\n background-clip: padding-box;\n outline: 0;\n flex-direction: column;\n max-width: 100%;\n display: flex;\n position: fixed;\n bottom: 0;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n\n.offcanvas.offcanvas-start {\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n left: 0;\n transform: translateX(-100%);\n}\n\n.offcanvas.offcanvas-end {\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n top: 0;\n right: 0;\n transform: translateX(100%);\n}\n\n.offcanvas.offcanvas-top {\n height: var(--bs-offcanvas-height);\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(-100%);\n}\n\n.offcanvas.offcanvas-bottom {\n height: var(--bs-offcanvas-height);\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n max-height: 100%;\n left: 0;\n right: 0;\n transform: translateY(100%);\n}\n\n.offcanvas.show:not(.hiding), .offcanvas.showing {\n transform: none;\n}\n\n.offcanvas.hiding, .offcanvas.show, .offcanvas.showing {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n z-index: 1040;\n background-color: #000;\n width: 100vw;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n}\n\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n opacity: .5;\n}\n\n.offcanvas-header {\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n justify-content: space-between;\n align-items: center;\n display: flex;\n}\n\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n line-height: var(--bs-offcanvas-title-line-height);\n margin-bottom: 0;\n}\n\n.offcanvas-body {\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n flex-grow: 1;\n overflow-y: auto;\n}\n\n.placeholder {\n vertical-align: middle;\n cursor: wait;\n opacity: .5;\n background-color: currentColor;\n min-height: 1em;\n display: inline-block;\n}\n\n.placeholder.btn:before {\n content: \"\";\n display: inline-block;\n}\n\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: 2s ease-in-out infinite placeholder-glow;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: .2;\n }\n}\n\n.placeholder-wave {\n animation: 2s linear infinite placeholder-wave;\n -webkit-mask-image: linear-gradient(130deg, #000 55%, #000c 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, #000c 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0;\n mask-position: -200% 0;\n }\n}\n\n.clearfix:after {\n clear: both;\n content: \"\";\n display: block;\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-primary:focus, .link-primary:hover {\n color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary:focus, .link-secondary:hover {\n color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success:focus, .link-success:hover {\n color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info:focus, .link-info:hover {\n color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning:focus, .link-warning:hover {\n color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger:focus, .link-danger:hover {\n color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light:focus, .link-light:hover {\n color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark:focus, .link-dark:hover {\n color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis:focus, .link-body-emphasis:hover {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, .75)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, .75)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, .75)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, .75)) !important;\n}\n\n.focus-ring:focus {\n 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);\n outline: 0;\n}\n\n.icon-link {\n -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, .5));\n -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, .5));\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, .5));\n text-underline-offset: .25em;\n backface-visibility: hidden;\n align-items: center;\n gap: .375rem;\n display: inline-flex;\n}\n\n.icon-link > .bi {\n fill: currentColor;\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n transition: transform .2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .icon-link > .bi {\n transition: none;\n }\n}\n\n.icon-link-hover:focus-visible > .bi, .icon-link-hover:hover > .bi {\n transform: var(--bs-icon-link-transform, translate3d(.25em, 0, 0));\n}\n\n.ratio {\n width: 100%;\n position: relative;\n}\n\n.ratio:before {\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n display: block;\n}\n\n.ratio > * {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571%;\n}\n\n.fixed-top {\n z-index: 1030;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.fixed-bottom {\n z-index: 1030;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n.sticky-top {\n z-index: 1020;\n position: sticky;\n top: 0;\n}\n\n.sticky-bottom {\n z-index: 1020;\n position: sticky;\n bottom: 0;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n z-index: 1020;\n position: sticky;\n top: 0;\n }\n\n .sticky-sm-bottom {\n z-index: 1020;\n position: sticky;\n bottom: 0;\n }\n}\n\n@media (min-width: 768px) {\n .sticky-md-top {\n z-index: 1020;\n position: sticky;\n top: 0;\n }\n\n .sticky-md-bottom {\n z-index: 1020;\n position: sticky;\n bottom: 0;\n }\n}\n\n@media (min-width: 992px) {\n .sticky-lg-top {\n z-index: 1020;\n position: sticky;\n top: 0;\n }\n\n .sticky-lg-bottom {\n z-index: 1020;\n position: sticky;\n bottom: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .sticky-xl-top {\n z-index: 1020;\n position: sticky;\n top: 0;\n }\n\n .sticky-xl-bottom {\n z-index: 1020;\n position: sticky;\n bottom: 0;\n }\n}\n\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n z-index: 1020;\n position: sticky;\n top: 0;\n }\n\n .sticky-xxl-bottom {\n z-index: 1020;\n position: sticky;\n bottom: 0;\n }\n}\n\n.hstack {\n flex-direction: row;\n align-self: stretch;\n align-items: center;\n display: flex;\n}\n\n.vstack {\n flex-direction: column;\n flex: auto;\n align-self: stretch;\n display: flex;\n}\n\n.visually-hidden, .visually-hidden-focusable:not(:focus):not(:focus-within) {\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n width: 1px !important;\n height: 1px !important;\n margin: -1px !important;\n padding: 0 !important;\n overflow: hidden !important;\n}\n\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption), .visually-hidden:not(caption) {\n position: absolute !important;\n}\n\n.stretched-link:after {\n z-index: 1;\n content: \"\";\n position: absolute;\n inset: 0;\n}\n\n.text-truncate {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.vr {\n width: var(--bs-border-width);\n opacity: .25;\n background-color: currentColor;\n align-self: stretch;\n min-height: 1em;\n display: inline-block;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: .25 !important;\n}\n\n.opacity-50 {\n opacity: .5 !important;\n}\n\n.opacity-75 {\n opacity: .75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-inline-grid {\n display: inline-grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.focus-ring-primary {\n --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n border-width: 1px !important;\n}\n\n.border-2 {\n border-width: 2px !important;\n}\n\n.border-3 {\n border-width: 3px !important;\n}\n\n.border-4 {\n border-width: 4px !important;\n}\n\n.border-5 {\n border-width: 5px !important;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: .1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: .25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: .5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: .75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: .25rem !important;\n}\n\n.m-2 {\n margin: .5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: .25rem !important;\n margin-right: .25rem !important;\n}\n\n.mx-2 {\n margin-left: .5rem !important;\n margin-right: .5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: .25rem !important;\n margin-bottom: .25rem !important;\n}\n\n.my-2 {\n margin-top: .5rem !important;\n margin-bottom: .5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: .25rem !important;\n}\n\n.mt-2 {\n margin-top: .5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: .25rem !important;\n}\n\n.me-2 {\n margin-right: .5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: .25rem !important;\n}\n\n.mb-2 {\n margin-bottom: .5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: .25rem !important;\n}\n\n.ms-2 {\n margin-left: .5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: .25rem !important;\n}\n\n.p-2 {\n padding: .5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: .25rem !important;\n padding-right: .25rem !important;\n}\n\n.px-2 {\n padding-left: .5rem !important;\n padding-right: .5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: .25rem !important;\n padding-bottom: .25rem !important;\n}\n\n.py-2 {\n padding-top: .5rem !important;\n padding-bottom: .5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: .25rem !important;\n}\n\n.pt-2 {\n padding-top: .5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: .25rem !important;\n}\n\n.pe-2 {\n padding-right: .5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: .25rem !important;\n}\n\n.pb-2 {\n padding-bottom: .5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: .25rem !important;\n}\n\n.ps-2 {\n padding-left: .5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: .25rem !important;\n}\n\n.gap-2 {\n gap: .5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: .25rem !important;\n}\n\n.row-gap-2 {\n row-gap: .5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n -moz-column-gap: .25rem !important;\n column-gap: .25rem !important;\n}\n\n.column-gap-2 {\n -moz-column-gap: .5rem !important;\n column-gap: .5rem !important;\n}\n\n.column-gap-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + .9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + .6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + .3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: #00000080 !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: #ffffff80 !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: .25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: .5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: .75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10, .link-opacity-10-hover:hover {\n --bs-link-opacity: .1;\n}\n\n.link-opacity-25, .link-opacity-25-hover:hover {\n --bs-link-opacity: .25;\n}\n\n.link-opacity-50, .link-opacity-50-hover:hover {\n --bs-link-opacity: .5;\n}\n\n.link-opacity-75, .link-opacity-75-hover:hover {\n --bs-link-opacity: .75;\n}\n\n.link-opacity-100, .link-opacity-100-hover:hover {\n --bs-link-opacity: 1;\n}\n\n.link-offset-1, .link-offset-1-hover:hover {\n text-underline-offset: .125em !important;\n}\n\n.link-offset-2, .link-offset-2-hover:hover {\n text-underline-offset: .25em !important;\n}\n\n.link-offset-3, .link-offset-3-hover:hover {\n text-underline-offset: .375em !important;\n}\n\n.link-underline-primary {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0, .link-underline-opacity-0-hover:hover {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10, .link-underline-opacity-10-hover:hover {\n --bs-link-underline-opacity: .1;\n}\n\n.link-underline-opacity-25, .link-underline-opacity-25-hover:hover {\n --bs-link-underline-opacity: .25;\n}\n\n.link-underline-opacity-50, .link-underline-opacity-50-hover:hover {\n --bs-link-underline-opacity: .5;\n}\n\n.link-underline-opacity-75, .link-underline-opacity-75-hover:hover {\n --bs-link-underline-opacity: .75;\n}\n\n.link-underline-opacity-100, .link-underline-opacity-100-hover:hover {\n --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: #0000 !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: .1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: .25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: .5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: .75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n border-top-left-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n\n .float-sm-end {\n float: right !important;\n }\n\n .float-sm-none {\n float: none !important;\n }\n\n .object-fit-sm-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n\n .object-fit-sm-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n\n .object-fit-sm-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n\n .object-fit-sm-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n\n .object-fit-sm-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-grid {\n display: grid !important;\n }\n\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n\n .d-sm-none {\n display: none !important;\n }\n\n .flex-sm-fill {\n flex: auto !important;\n }\n\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n\n .order-sm-first {\n order: -1 !important;\n }\n\n .order-sm-0 {\n order: 0 !important;\n }\n\n .order-sm-1 {\n order: 1 !important;\n }\n\n .order-sm-2 {\n order: 2 !important;\n }\n\n .order-sm-3 {\n order: 3 !important;\n }\n\n .order-sm-4 {\n order: 4 !important;\n }\n\n .order-sm-5 {\n order: 5 !important;\n }\n\n .order-sm-last {\n order: 6 !important;\n }\n\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .m-sm-1 {\n margin: .25rem !important;\n }\n\n .m-sm-2 {\n margin: .5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-sm-1 {\n margin-left: .25rem !important;\n margin-right: .25rem !important;\n }\n\n .mx-sm-2 {\n margin-left: .5rem !important;\n margin-right: .5rem !important;\n }\n\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-sm-1 {\n margin-top: .25rem !important;\n margin-bottom: .25rem !important;\n }\n\n .my-sm-2 {\n margin-top: .5rem !important;\n margin-bottom: .5rem !important;\n }\n\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n\n .mt-sm-1 {\n margin-top: .25rem !important;\n }\n\n .mt-sm-2 {\n margin-top: .5rem !important;\n }\n\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mt-sm-auto {\n margin-top: auto !important;\n }\n\n .me-sm-0 {\n margin-right: 0 !important;\n }\n\n .me-sm-1 {\n margin-right: .25rem !important;\n }\n\n .me-sm-2 {\n margin-right: .5rem !important;\n }\n\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n\n .me-sm-auto {\n margin-right: auto !important;\n }\n\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-sm-1 {\n margin-bottom: .25rem !important;\n }\n\n .mb-sm-2 {\n margin-bottom: .5rem !important;\n }\n\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n\n .ms-sm-1 {\n margin-left: .25rem !important;\n }\n\n .ms-sm-2 {\n margin-left: .5rem !important;\n }\n\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n\n .ms-sm-auto {\n margin-left: auto !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .p-sm-1 {\n padding: .25rem !important;\n }\n\n .p-sm-2 {\n padding: .5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-sm-1 {\n padding-left: .25rem !important;\n padding-right: .25rem !important;\n }\n\n .px-sm-2 {\n padding-left: .5rem !important;\n padding-right: .5rem !important;\n }\n\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-sm-1 {\n padding-top: .25rem !important;\n padding-bottom: .25rem !important;\n }\n\n .py-sm-2 {\n padding-top: .5rem !important;\n padding-bottom: .5rem !important;\n }\n\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n\n .pt-sm-1 {\n padding-top: .25rem !important;\n }\n\n .pt-sm-2 {\n padding-top: .5rem !important;\n }\n\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n\n .pe-sm-1 {\n padding-right: .25rem !important;\n }\n\n .pe-sm-2 {\n padding-right: .5rem !important;\n }\n\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-sm-1 {\n padding-bottom: .25rem !important;\n }\n\n .pb-sm-2 {\n padding-bottom: .5rem !important;\n }\n\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n\n .ps-sm-1 {\n padding-left: .25rem !important;\n }\n\n .ps-sm-2 {\n padding-left: .5rem !important;\n }\n\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n\n .gap-sm-0 {\n gap: 0 !important;\n }\n\n .gap-sm-1 {\n gap: .25rem !important;\n }\n\n .gap-sm-2 {\n gap: .5rem !important;\n }\n\n .gap-sm-3 {\n gap: 1rem !important;\n }\n\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n\n .gap-sm-5 {\n gap: 3rem !important;\n }\n\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n\n .row-gap-sm-1 {\n row-gap: .25rem !important;\n }\n\n .row-gap-sm-2 {\n row-gap: .5rem !important;\n }\n\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n\n .column-gap-sm-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n\n .column-gap-sm-1 {\n -moz-column-gap: .25rem !important;\n column-gap: .25rem !important;\n }\n\n .column-gap-sm-2 {\n -moz-column-gap: .5rem !important;\n column-gap: .5rem !important;\n }\n\n .column-gap-sm-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n\n .column-gap-sm-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n\n .column-gap-sm-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n\n .text-sm-start {\n text-align: left !important;\n }\n\n .text-sm-end {\n text-align: right !important;\n }\n\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n\n .float-md-end {\n float: right !important;\n }\n\n .float-md-none {\n float: none !important;\n }\n\n .object-fit-md-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n\n .object-fit-md-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n\n .object-fit-md-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n\n .object-fit-md-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n\n .object-fit-md-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-grid {\n display: grid !important;\n }\n\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n\n .d-md-none {\n display: none !important;\n }\n\n .flex-md-fill {\n flex: auto !important;\n }\n\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n\n .order-md-first {\n order: -1 !important;\n }\n\n .order-md-0 {\n order: 0 !important;\n }\n\n .order-md-1 {\n order: 1 !important;\n }\n\n .order-md-2 {\n order: 2 !important;\n }\n\n .order-md-3 {\n order: 3 !important;\n }\n\n .order-md-4 {\n order: 4 !important;\n }\n\n .order-md-5 {\n order: 5 !important;\n }\n\n .order-md-last {\n order: 6 !important;\n }\n\n .m-md-0 {\n margin: 0 !important;\n }\n\n .m-md-1 {\n margin: .25rem !important;\n }\n\n .m-md-2 {\n margin: .5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-md-1 {\n margin-left: .25rem !important;\n margin-right: .25rem !important;\n }\n\n .mx-md-2 {\n margin-left: .5rem !important;\n margin-right: .5rem !important;\n }\n\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-md-1 {\n margin-top: .25rem !important;\n margin-bottom: .25rem !important;\n }\n\n .my-md-2 {\n margin-top: .5rem !important;\n margin-bottom: .5rem !important;\n }\n\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-md-0 {\n margin-top: 0 !important;\n }\n\n .mt-md-1 {\n margin-top: .25rem !important;\n }\n\n .mt-md-2 {\n margin-top: .5rem !important;\n }\n\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n\n .mt-md-auto {\n margin-top: auto !important;\n }\n\n .me-md-0 {\n margin-right: 0 !important;\n }\n\n .me-md-1 {\n margin-right: .25rem !important;\n }\n\n .me-md-2 {\n margin-right: .5rem !important;\n }\n\n .me-md-3 {\n margin-right: 1rem !important;\n }\n\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-md-5 {\n margin-right: 3rem !important;\n }\n\n .me-md-auto {\n margin-right: auto !important;\n }\n\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-md-1 {\n margin-bottom: .25rem !important;\n }\n\n .mb-md-2 {\n margin-bottom: .5rem !important;\n }\n\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n\n .ms-md-0 {\n margin-left: 0 !important;\n }\n\n .ms-md-1 {\n margin-left: .25rem !important;\n }\n\n .ms-md-2 {\n margin-left: .5rem !important;\n }\n\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n\n .ms-md-auto {\n margin-left: auto !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .p-md-1 {\n padding: .25rem !important;\n }\n\n .p-md-2 {\n padding: .5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-md-1 {\n padding-left: .25rem !important;\n padding-right: .25rem !important;\n }\n\n .px-md-2 {\n padding-left: .5rem !important;\n padding-right: .5rem !important;\n }\n\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-md-1 {\n padding-top: .25rem !important;\n padding-bottom: .25rem !important;\n }\n\n .py-md-2 {\n padding-top: .5rem !important;\n padding-bottom: .5rem !important;\n }\n\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-md-0 {\n padding-top: 0 !important;\n }\n\n .pt-md-1 {\n padding-top: .25rem !important;\n }\n\n .pt-md-2 {\n padding-top: .5rem !important;\n }\n\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n\n .pe-md-0 {\n padding-right: 0 !important;\n }\n\n .pe-md-1 {\n padding-right: .25rem !important;\n }\n\n .pe-md-2 {\n padding-right: .5rem !important;\n }\n\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-md-1 {\n padding-bottom: .25rem !important;\n }\n\n .pb-md-2 {\n padding-bottom: .5rem !important;\n }\n\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-md-0 {\n padding-left: 0 !important;\n }\n\n .ps-md-1 {\n padding-left: .25rem !important;\n }\n\n .ps-md-2 {\n padding-left: .5rem !important;\n }\n\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n\n .gap-md-0 {\n gap: 0 !important;\n }\n\n .gap-md-1 {\n gap: .25rem !important;\n }\n\n .gap-md-2 {\n gap: .5rem !important;\n }\n\n .gap-md-3 {\n gap: 1rem !important;\n }\n\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n\n .gap-md-5 {\n gap: 3rem !important;\n }\n\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n\n .row-gap-md-1 {\n row-gap: .25rem !important;\n }\n\n .row-gap-md-2 {\n row-gap: .5rem !important;\n }\n\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n\n .column-gap-md-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n\n .column-gap-md-1 {\n -moz-column-gap: .25rem !important;\n column-gap: .25rem !important;\n }\n\n .column-gap-md-2 {\n -moz-column-gap: .5rem !important;\n column-gap: .5rem !important;\n }\n\n .column-gap-md-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n\n .column-gap-md-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n\n .column-gap-md-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n\n .text-md-start {\n text-align: left !important;\n }\n\n .text-md-end {\n text-align: right !important;\n }\n\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n\n .float-lg-end {\n float: right !important;\n }\n\n .float-lg-none {\n float: none !important;\n }\n\n .object-fit-lg-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n\n .object-fit-lg-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n\n .object-fit-lg-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n\n .object-fit-lg-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n\n .object-fit-lg-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-grid {\n display: grid !important;\n }\n\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n\n .d-lg-none {\n display: none !important;\n }\n\n .flex-lg-fill {\n flex: auto !important;\n }\n\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n\n .order-lg-first {\n order: -1 !important;\n }\n\n .order-lg-0 {\n order: 0 !important;\n }\n\n .order-lg-1 {\n order: 1 !important;\n }\n\n .order-lg-2 {\n order: 2 !important;\n }\n\n .order-lg-3 {\n order: 3 !important;\n }\n\n .order-lg-4 {\n order: 4 !important;\n }\n\n .order-lg-5 {\n order: 5 !important;\n }\n\n .order-lg-last {\n order: 6 !important;\n }\n\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .m-lg-1 {\n margin: .25rem !important;\n }\n\n .m-lg-2 {\n margin: .5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-lg-1 {\n margin-left: .25rem !important;\n margin-right: .25rem !important;\n }\n\n .mx-lg-2 {\n margin-left: .5rem !important;\n margin-right: .5rem !important;\n }\n\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-lg-1 {\n margin-top: .25rem !important;\n margin-bottom: .25rem !important;\n }\n\n .my-lg-2 {\n margin-top: .5rem !important;\n margin-bottom: .5rem !important;\n }\n\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n\n .mt-lg-1 {\n margin-top: .25rem !important;\n }\n\n .mt-lg-2 {\n margin-top: .5rem !important;\n }\n\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mt-lg-auto {\n margin-top: auto !important;\n }\n\n .me-lg-0 {\n margin-right: 0 !important;\n }\n\n .me-lg-1 {\n margin-right: .25rem !important;\n }\n\n .me-lg-2 {\n margin-right: .5rem !important;\n }\n\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n\n .me-lg-auto {\n margin-right: auto !important;\n }\n\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-lg-1 {\n margin-bottom: .25rem !important;\n }\n\n .mb-lg-2 {\n margin-bottom: .5rem !important;\n }\n\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n\n .ms-lg-1 {\n margin-left: .25rem !important;\n }\n\n .ms-lg-2 {\n margin-left: .5rem !important;\n }\n\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n\n .ms-lg-auto {\n margin-left: auto !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .p-lg-1 {\n padding: .25rem !important;\n }\n\n .p-lg-2 {\n padding: .5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-lg-1 {\n padding-left: .25rem !important;\n padding-right: .25rem !important;\n }\n\n .px-lg-2 {\n padding-left: .5rem !important;\n padding-right: .5rem !important;\n }\n\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-lg-1 {\n padding-top: .25rem !important;\n padding-bottom: .25rem !important;\n }\n\n .py-lg-2 {\n padding-top: .5rem !important;\n padding-bottom: .5rem !important;\n }\n\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n\n .pt-lg-1 {\n padding-top: .25rem !important;\n }\n\n .pt-lg-2 {\n padding-top: .5rem !important;\n }\n\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n\n .pe-lg-1 {\n padding-right: .25rem !important;\n }\n\n .pe-lg-2 {\n padding-right: .5rem !important;\n }\n\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-lg-1 {\n padding-bottom: .25rem !important;\n }\n\n .pb-lg-2 {\n padding-bottom: .5rem !important;\n }\n\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n\n .ps-lg-1 {\n padding-left: .25rem !important;\n }\n\n .ps-lg-2 {\n padding-left: .5rem !important;\n }\n\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n\n .gap-lg-0 {\n gap: 0 !important;\n }\n\n .gap-lg-1 {\n gap: .25rem !important;\n }\n\n .gap-lg-2 {\n gap: .5rem !important;\n }\n\n .gap-lg-3 {\n gap: 1rem !important;\n }\n\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n\n .gap-lg-5 {\n gap: 3rem !important;\n }\n\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n\n .row-gap-lg-1 {\n row-gap: .25rem !important;\n }\n\n .row-gap-lg-2 {\n row-gap: .5rem !important;\n }\n\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n\n .column-gap-lg-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n\n .column-gap-lg-1 {\n -moz-column-gap: .25rem !important;\n column-gap: .25rem !important;\n }\n\n .column-gap-lg-2 {\n -moz-column-gap: .5rem !important;\n column-gap: .5rem !important;\n }\n\n .column-gap-lg-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n\n .column-gap-lg-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n\n .column-gap-lg-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n\n .text-lg-start {\n text-align: left !important;\n }\n\n .text-lg-end {\n text-align: right !important;\n }\n\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n\n .float-xl-end {\n float: right !important;\n }\n\n .float-xl-none {\n float: none !important;\n }\n\n .object-fit-xl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n\n .object-fit-xl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n\n .object-fit-xl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n\n .object-fit-xl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n\n .object-fit-xl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-grid {\n display: grid !important;\n }\n\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xl-none {\n display: none !important;\n }\n\n .flex-xl-fill {\n flex: auto !important;\n }\n\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n\n .order-xl-first {\n order: -1 !important;\n }\n\n .order-xl-0 {\n order: 0 !important;\n }\n\n .order-xl-1 {\n order: 1 !important;\n }\n\n .order-xl-2 {\n order: 2 !important;\n }\n\n .order-xl-3 {\n order: 3 !important;\n }\n\n .order-xl-4 {\n order: 4 !important;\n }\n\n .order-xl-5 {\n order: 5 !important;\n }\n\n .order-xl-last {\n order: 6 !important;\n }\n\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .m-xl-1 {\n margin: .25rem !important;\n }\n\n .m-xl-2 {\n margin: .5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-xl-1 {\n margin-left: .25rem !important;\n margin-right: .25rem !important;\n }\n\n .mx-xl-2 {\n margin-left: .5rem !important;\n margin-right: .5rem !important;\n }\n\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xl-1 {\n margin-top: .25rem !important;\n margin-bottom: .25rem !important;\n }\n\n .my-xl-2 {\n margin-top: .5rem !important;\n margin-bottom: .5rem !important;\n }\n\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xl-1 {\n margin-top: .25rem !important;\n }\n\n .mt-xl-2 {\n margin-top: .5rem !important;\n }\n\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xl-auto {\n margin-top: auto !important;\n }\n\n .me-xl-0 {\n margin-right: 0 !important;\n }\n\n .me-xl-1 {\n margin-right: .25rem !important;\n }\n\n .me-xl-2 {\n margin-right: .5rem !important;\n }\n\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xl-auto {\n margin-right: auto !important;\n }\n\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xl-1 {\n margin-bottom: .25rem !important;\n }\n\n .mb-xl-2 {\n margin-bottom: .5rem !important;\n }\n\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xl-1 {\n margin-left: .25rem !important;\n }\n\n .ms-xl-2 {\n margin-left: .5rem !important;\n }\n\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xl-auto {\n margin-left: auto !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .p-xl-1 {\n padding: .25rem !important;\n }\n\n .p-xl-2 {\n padding: .5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-xl-1 {\n padding-left: .25rem !important;\n padding-right: .25rem !important;\n }\n\n .px-xl-2 {\n padding-left: .5rem !important;\n padding-right: .5rem !important;\n }\n\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xl-1 {\n padding-top: .25rem !important;\n padding-bottom: .25rem !important;\n }\n\n .py-xl-2 {\n padding-top: .5rem !important;\n padding-bottom: .5rem !important;\n }\n\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xl-1 {\n padding-top: .25rem !important;\n }\n\n .pt-xl-2 {\n padding-top: .5rem !important;\n }\n\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xl-1 {\n padding-right: .25rem !important;\n }\n\n .pe-xl-2 {\n padding-right: .5rem !important;\n }\n\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xl-1 {\n padding-bottom: .25rem !important;\n }\n\n .pb-xl-2 {\n padding-bottom: .5rem !important;\n }\n\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xl-1 {\n padding-left: .25rem !important;\n }\n\n .ps-xl-2 {\n padding-left: .5rem !important;\n }\n\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n\n .gap-xl-0 {\n gap: 0 !important;\n }\n\n .gap-xl-1 {\n gap: .25rem !important;\n }\n\n .gap-xl-2 {\n gap: .5rem !important;\n }\n\n .gap-xl-3 {\n gap: 1rem !important;\n }\n\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n\n .gap-xl-5 {\n gap: 3rem !important;\n }\n\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n\n .row-gap-xl-1 {\n row-gap: .25rem !important;\n }\n\n .row-gap-xl-2 {\n row-gap: .5rem !important;\n }\n\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n\n .column-gap-xl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n\n .column-gap-xl-1 {\n -moz-column-gap: .25rem !important;\n column-gap: .25rem !important;\n }\n\n .column-gap-xl-2 {\n -moz-column-gap: .5rem !important;\n column-gap: .5rem !important;\n }\n\n .column-gap-xl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n\n .column-gap-xl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n\n .column-gap-xl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n\n .text-xl-start {\n text-align: left !important;\n }\n\n .text-xl-end {\n text-align: right !important;\n }\n\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n\n .float-xxl-end {\n float: right !important;\n }\n\n .float-xxl-none {\n float: none !important;\n }\n\n .object-fit-xxl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n\n .object-fit-xxl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n\n .object-fit-xxl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n\n .object-fit-xxl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n\n .object-fit-xxl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n\n .d-xxl-inline {\n display: inline !important;\n }\n\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n\n .d-xxl-block {\n display: block !important;\n }\n\n .d-xxl-grid {\n display: grid !important;\n }\n\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n\n .d-xxl-table {\n display: table !important;\n }\n\n .d-xxl-table-row {\n display: table-row !important;\n }\n\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n\n .d-xxl-flex {\n display: flex !important;\n }\n\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xxl-none {\n display: none !important;\n }\n\n .flex-xxl-fill {\n flex: auto !important;\n }\n\n .flex-xxl-row {\n flex-direction: row !important;\n }\n\n .flex-xxl-column {\n flex-direction: column !important;\n }\n\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xxl-center {\n align-items: center !important;\n }\n\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xxl-center {\n align-content: center !important;\n }\n\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xxl-center {\n align-self: center !important;\n }\n\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n\n .order-xxl-first {\n order: -1 !important;\n }\n\n .order-xxl-0 {\n order: 0 !important;\n }\n\n .order-xxl-1 {\n order: 1 !important;\n }\n\n .order-xxl-2 {\n order: 2 !important;\n }\n\n .order-xxl-3 {\n order: 3 !important;\n }\n\n .order-xxl-4 {\n order: 4 !important;\n }\n\n .order-xxl-5 {\n order: 5 !important;\n }\n\n .order-xxl-last {\n order: 6 !important;\n }\n\n .m-xxl-0 {\n margin: 0 !important;\n }\n\n .m-xxl-1 {\n margin: .25rem !important;\n }\n\n .m-xxl-2 {\n margin: .5rem !important;\n }\n\n .m-xxl-3 {\n margin: 1rem !important;\n }\n\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xxl-5 {\n margin: 3rem !important;\n }\n\n .m-xxl-auto {\n margin: auto !important;\n }\n\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-xxl-1 {\n margin-left: .25rem !important;\n margin-right: .25rem !important;\n }\n\n .mx-xxl-2 {\n margin-left: .5rem !important;\n margin-right: .5rem !important;\n }\n\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xxl-1 {\n margin-top: .25rem !important;\n margin-bottom: .25rem !important;\n }\n\n .my-xxl-2 {\n margin-top: .5rem !important;\n margin-bottom: .5rem !important;\n }\n\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xxl-1 {\n margin-top: .25rem !important;\n }\n\n .mt-xxl-2 {\n margin-top: .5rem !important;\n }\n\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n\n .me-xxl-1 {\n margin-right: .25rem !important;\n }\n\n .me-xxl-2 {\n margin-right: .5rem !important;\n }\n\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xxl-auto {\n margin-right: auto !important;\n }\n\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xxl-1 {\n margin-bottom: .25rem !important;\n }\n\n .mb-xxl-2 {\n margin-bottom: .5rem !important;\n }\n\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xxl-1 {\n margin-left: .25rem !important;\n }\n\n .ms-xxl-2 {\n margin-left: .5rem !important;\n }\n\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n\n .p-xxl-0 {\n padding: 0 !important;\n }\n\n .p-xxl-1 {\n padding: .25rem !important;\n }\n\n .p-xxl-2 {\n padding: .5rem !important;\n }\n\n .p-xxl-3 {\n padding: 1rem !important;\n }\n\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xxl-5 {\n padding: 3rem !important;\n }\n\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-xxl-1 {\n padding-left: .25rem !important;\n padding-right: .25rem !important;\n }\n\n .px-xxl-2 {\n padding-left: .5rem !important;\n padding-right: .5rem !important;\n }\n\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xxl-1 {\n padding-top: .25rem !important;\n padding-bottom: .25rem !important;\n }\n\n .py-xxl-2 {\n padding-top: .5rem !important;\n padding-bottom: .5rem !important;\n }\n\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xxl-1 {\n padding-top: .25rem !important;\n }\n\n .pt-xxl-2 {\n padding-top: .5rem !important;\n }\n\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xxl-1 {\n padding-right: .25rem !important;\n }\n\n .pe-xxl-2 {\n padding-right: .5rem !important;\n }\n\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xxl-1 {\n padding-bottom: .25rem !important;\n }\n\n .pb-xxl-2 {\n padding-bottom: .5rem !important;\n }\n\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xxl-1 {\n padding-left: .25rem !important;\n }\n\n .ps-xxl-2 {\n padding-left: .5rem !important;\n }\n\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n\n .gap-xxl-0 {\n gap: 0 !important;\n }\n\n .gap-xxl-1 {\n gap: .25rem !important;\n }\n\n .gap-xxl-2 {\n gap: .5rem !important;\n }\n\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n\n .row-gap-xxl-1 {\n row-gap: .25rem !important;\n }\n\n .row-gap-xxl-2 {\n row-gap: .5rem !important;\n }\n\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n\n .column-gap-xxl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n\n .column-gap-xxl-1 {\n -moz-column-gap: .25rem !important;\n column-gap: .25rem !important;\n }\n\n .column-gap-xxl-2 {\n -moz-column-gap: .5rem !important;\n column-gap: .5rem !important;\n }\n\n .column-gap-xxl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n\n .column-gap-xxl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n\n .column-gap-xxl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n\n .text-xxl-start {\n text-align: left !important;\n }\n\n .text-xxl-end {\n text-align: right !important;\n }\n\n .text-xxl-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n\n .fs-2 {\n font-size: 2rem !important;\n }\n\n .fs-3 {\n font-size: 1.75rem !important;\n }\n\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-grid {\n display: grid !important;\n }\n\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n\n .d-print-none {\n display: none !important;\n }\n}\n\n:root {\n --body-color: #212529;\n --move-btn-width: 60px;\n --move-btn-height: 34px;\n --focus-ring: 0 0 0 .2rem #268fff80;\n accent-color: var(--bs-primary);\n}\n\n:not(:defined) {\n display: none !important;\n}\n\nhtml, body {\n font-size: 14px;\n}\n\nbody {\n background-color: #eae9e9;\n overflow-x: hidden;\n}\n\n[hidden] {\n display: none !important;\n}\n\na:focus-visible, details summary:focus-visible {\n box-shadow: var(--focus-ring);\n border-radius: .25rem;\n outline: 0;\n transition: box-shadow .15s ease-in-out;\n}\n\n.container {\n max-width: 1400px;\n}\n\n.site-header {\n text-align: center;\n flex-direction: column;\n align-items: center;\n row-gap: .5rem;\n margin: 3rem .5rem;\n display: flex;\n}\n\n.page-title {\n margin-bottom: 0;\n font-weight: 300;\n}\n\n.canvas {\n max-width: 100%;\n display: block;\n}\n\n.inputs-container input[type=\"color\"], .settings-button {\n cursor: pointer;\n border: 0;\n width: 30px;\n height: 30px;\n margin: 0 2px;\n padding: 0;\n line-height: 1;\n}\n\n.inputs-container .meme-text {\n min-width: 0;\n height: calc(1.5em + .75rem + 2px);\n min-height: calc(1.5em + .75rem + 2px);\n margin: .5rem;\n}\n\n.settings-button {\n background-image: url(\"gear.b3b5d1a5.svg\");\n background-position: center;\n background-repeat: no-repeat;\n background-size: 60%;\n}\n\n.inputs-container {\n flex: 1;\n}\n\n.inputs-container:empty {\n display: none;\n}\n\n.instructions {\n text-align: center;\n text-wrap: balance;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n row-gap: 1rem;\n height: 100%;\n min-height: 200px;\n padding: 1rem;\n display: flex;\n}\n\n.errorsContainer {\n z-index: 1051;\n pointer-events: none;\n width: 100%;\n position: fixed;\n top: 0;\n left: 0;\n}\n\n.errorsContainer .alert {\n pointer-events: all;\n}\n\ndetails[open] summary {\n margin-bottom: .5rem;\n}\n\nbutton[data-button=\"delete-text-box\"] {\n background-image: url(\"trash.d9edab78.svg\");\n background-position: center;\n background-repeat: no-repeat;\n width: 25px;\n min-width: 25px;\n height: 25px;\n margin-left: .5rem;\n padding: 0;\n}\n\n.gallery {\n scroll-behavior: smooth;\n gap: .5rem;\n min-height: 112px;\n margin: 0;\n padding: .25rem 0;\n display: flex;\n overflow-x: auto;\n}\n\n.gallery > button {\n cursor: pointer;\n padding: 0;\n}\n\n.gallery > button > img {\n object-fit: cover;\n border-radius: .2rem;\n min-width: 88px;\n height: 88px;\n display: block;\n}\n\n.gallery__no-results {\n text-align: center;\n flex: 1;\n justify-content: center;\n align-items: center;\n display: flex;\n}\n\n.move-text-actions {\n width: calc(var(--move-btn-width) * 3);\n height: calc(var(--move-btn-height) * 2);\n margin: 0 auto;\n position: relative;\n}\n\n.move-text-actions [data-move] {\n width: var(--move-btn-width);\n height: var(--move-btn-height);\n background-position: center;\n background-repeat: no-repeat;\n position: absolute;\n}\n\n.move-text-actions [data-move=\"offsetY\"][data-sign=\"-\"] {\n top: -1px;\n left: var(--move-btn-width);\n background-image: url(\"chevron-up.f532d8b6.svg\");\n}\n\n.move-text-actions [data-move=\"offsetY\"][data-sign=\"+\"] {\n top: calc(var(--move-btn-height) + 1px);\n left: var(--move-btn-width);\n background-image: url(\"chevron-down.ad14d981.svg\");\n}\n\n.move-text-actions [data-move=\"offsetX\"][data-sign=\"-\"] {\n top: calc(var(--move-btn-height) / 2);\n background-image: url(\"chevron-left.20a2f252.svg\");\n left: -2px;\n}\n\n.move-text-actions [data-move=\"offsetX\"][data-sign=\"+\"] {\n top: calc(var(--move-btn-height) / 2);\n left: calc(var(--move-btn-width) * 2 + 2px);\n background-image: url(\"chevron-right.1be074ac.svg\");\n}\n\ncapture-photo:not(:defined) {\n display: none;\n}\n\ncapture-photo {\n overflow: hidden;\n}\n\ncapture-photo::part(video) {\n background-color: #000;\n width: 100%;\n}\n\ncapture-photo::part(actions-container) {\n justify-content: center;\n align-items: center;\n gap: 2rem;\n padding: 1rem 0;\n display: flex;\n}\n\ncapture-photo::part(capture-button), capture-photo::part(facing-mode-button) {\n text-indent: -9999px;\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n background-position: center;\n background-repeat: no-repeat;\n border-radius: 50%;\n overflow: hidden;\n box-shadow: 0 0 1rem #0000004d;\n}\n\ncapture-photo::part(capture-button) {\n background-color: #c2c3c7;\n background-image: url(\"aperture.4bf28ce8.svg\");\n background-size: 90%;\n border: 5px solid #fff;\n width: 70px;\n height: 70px;\n}\n\ncapture-photo::part(facing-mode-button) {\n background-color: #fff;\n background-image: url(\"camera-reverse.284e8ac9.svg\");\n background-size: 60%;\n border: 0;\n width: 50px;\n height: 50px;\n margin-right: calc(-50px - 2rem);\n}\n\ncapture-photo[loading]::part(video) {\n background-image: url(\"spinner.4452ed29.svg\");\n background-position: center;\n background-repeat: no-repeat;\n background-size: 60px;\n}\n\ncapture-photo[loading]::part(capture-button), capture-photo[loading]::part(facing-mode-button) {\n opacity: .6;\n pointer-events: none;\n}\n\nmodal-element {\n --me-width: fit-content;\n --me-border-radius: .25rem;\n --me-border-width: 0;\n --me-box-shadow: 0 0 1rem 0 #0000004d;\n}\n\n#videoModal {\n --me-width: 600px;\n}\n\n#downloadModal {\n --me-width: 900px;\n}\n\nmodal-element::part(base):focus-visible {\n outline: 0;\n}\n\nmodal-element [slot=\"header\"] {\n color: var(--body-color);\n margin: 0;\n}\n\nmodal-element::part(close) {\n color: var(--body-color);\n border-radius: .25rem;\n transition: box-shadow .15s ease-in-out;\n}\n\nmodal-element::part(close):focus-visible {\n box-shadow: var(--focus-ring);\n outline: 0;\n}\n\nmodal-element::part(body) {\n padding-block: 0;\n}\n\nmodal-element [slot=\"footer\"] {\n text-align: center;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n gap: .25rem;\n display: flex;\n}\n\nfiles-dropzone {\n --dropzone-border-color: var(--bs-secondary);\n --dropzone-border-color-hover: var(--bs-primary);\n --dropzone-border-color-dragover: var(--bs-primary);\n --dropzone-background-color-hover: var(--bs-light);\n --dropzone-background-color-dragover: var(--bs-light);\n --dropzone-focus-box-shadow: var(--focus-ring);\n height: 100%;\n}\n\nfiles-dropzone::part(dropzone) {\n height: 100%;\n padding: .5rem;\n}\n\n.text-underline {\n text-decoration: underline;\n}\n\n/*# sourceMappingURL=index.47ef8ac4.css.map */\n","@charset \"UTF-8\";/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */: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, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-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:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--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:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#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:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{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{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;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}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{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;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;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)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-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), 0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width: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)))}.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 .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)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(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:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#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:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#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{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;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{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.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;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.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;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::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end: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:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.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\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[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{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.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{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\")}.form-check-input:disabled{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\");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;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{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;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{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.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{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:not(:-moz-placeholder-shown)~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:\"\";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control-plaintext~label::after,.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:\"\";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label::after,.form-floating>:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--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)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.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:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.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,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control: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{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size=\"1\"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size=\"1\"]{--bs-form-select-bg-icon:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control: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{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size=\"1\"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size=\"1\"]{--bs-form-select-bg-icon:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color: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 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{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,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow: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-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.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;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: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:0.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:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: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:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{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:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%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), 0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}[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:0.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:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.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:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.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{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{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-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width: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='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:\"\";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[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='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");--bs-accordion-btn-active-icon:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, \"/\")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg: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 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{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(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: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 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: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:0.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;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.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), 0.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);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg: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:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: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:0.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:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.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-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;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)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.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-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--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 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .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))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:\"\"}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:\"\"}.text-bg-primary{color:#fff!important;background-color:RGBA(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:focus,.link-primary:hover{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:focus,.link-secondary:hover{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:focus,.link-success:hover{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:focus,.link-info:hover{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:focus,.link-warning:hover{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:focus,.link-danger:hover{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:focus,.link-light:hover{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:focus,.link-dark:hover{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:focus,.link-body-emphasis:hover{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,0.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-underline-offset:0.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;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:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;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:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10{--bs-link-opacity:0.1}.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25{--bs-link-opacity:0.25}.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50{--bs-link-opacity:0.5}.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75{--bs-link-opacity:0.75}.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100{--bs-link-opacity:1}.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1{text-underline-offset:0.125em!important}.link-offset-1-hover:hover{text-underline-offset:0.125em!important}.link-offset-2{text-underline-offset:0.25em!important}.link-offset-2-hover:hover{text-underline-offset:0.25em!important}.link-offset-3{text-underline-offset:0.375em!important}.link-offset-3-hover:hover{text-underline-offset:0.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{--bs-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10{--bs-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25{--bs-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50{--bs-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75{--bs-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100{--bs-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}\n","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text-emphasis: #052c65;\n --bs-secondary-text-emphasis: #2b2f32;\n --bs-success-text-emphasis: #0a3622;\n --bs-info-text-emphasis: #055160;\n --bs-warning-text-emphasis: #664d03;\n --bs-danger-text-emphasis: #58151c;\n --bs-light-text-emphasis: #495057;\n --bs-dark-text-emphasis: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #e2e3e5;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #c4c8cb;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-heading-color: inherit;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-color: #212529;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-xxl: 2rem;\n --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-focus-ring-width: 0.25rem;\n --bs-focus-ring-opacity: 0.25;\n --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n --bs-form-valid-color: #198754;\n --bs-form-valid-border-color: #198754;\n --bs-form-invalid-color: #dc3545;\n --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n color-scheme: dark;\n --bs-body-color: #dee2e6;\n --bs-body-color-rgb: 222, 226, 230;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #fff;\n --bs-emphasis-color-rgb: 255, 255, 255;\n --bs-secondary-color: rgba(222, 226, 230, 0.75);\n --bs-secondary-color-rgb: 222, 226, 230;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n --bs-tertiary-color-rgb: 222, 226, 230;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-primary-text-emphasis: #6ea8fe;\n --bs-secondary-text-emphasis: #a7acb1;\n --bs-success-text-emphasis: #75b798;\n --bs-info-text-emphasis: #6edff6;\n --bs-warning-text-emphasis: #ffda6a;\n --bs-danger-text-emphasis: #ea868f;\n --bs-light-text-emphasis: #f8f9fa;\n --bs-dark-text-emphasis: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #161719;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #41464b;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #087990;\n --bs-warning-border-subtle: #997404;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: inherit;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #8bb9fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 139, 185, 254;\n --bs-code-color: #e685b5;\n --bs-highlight-color: #dee2e6;\n --bs-highlight-bg: #664d03;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n --bs-form-valid-color: #75b798;\n --bs-form-valid-border-color: #75b798;\n --bs-form-invalid-color: #ea868f;\n --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color);\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n color: var(--bs-highlight-color);\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n -webkit-appearance: textfield;\n outline-offset: -2px;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color-type: initial;\n --bs-table-bg-type: initial;\n --bs-table-color-state: initial;\n --bs-table-bg-state: initial;\n --bs-table-color: var(--bs-emphasis-color);\n --bs-table-bg: var(--bs-body-bg);\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-emphasis-color);\n --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);\n --bs-table-active-color: var(--bs-emphasis-color);\n --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);\n --bs-table-hover-color: var(--bs-emphasis-color);\n --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);\n width: 100%;\n margin-bottom: 1rem;\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-active {\n --bs-table-color-state: var(--bs-table-active-color);\n --bs-table-bg-state: var(--bs-table-active-bg);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-color-state: var(--bs-table-hover-color);\n --bs-table-bg-state: var(--bs-table-hover-bg);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #a6b5cc;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #b5b6b7;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #a7b9b1;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #a6c3ca;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #ccc2a4;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #c6acae;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #c6c7c8;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #4d5154;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + var(--bs-border-width));\n padding-bottom: calc(0.375rem + var(--bs-border-width));\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + var(--bs-border-width));\n padding-bottom: calc(0.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + var(--bs-border-width));\n padding-bottom: calc(0.25rem + var(--bs-border-width));\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: var(--bs-body-bg);\n background-clip: padding-box;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-body-bg);\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n min-width: 85px;\n height: 1.5em;\n margin: 0;\n}\n.form-control::-webkit-datetime-edit {\n display: block;\n padding: 0;\n}\n.form-control::-moz-placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control:disabled {\n background-color: var(--bs-secondary-bg);\n opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: var(--bs-secondary-bg);\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: transparent;\n border: solid transparent;\n border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: var(--bs-border-radius);\n}\n.form-control-color::-webkit-color-swatch {\n border: 0 !important;\n border-radius: var(--bs-border-radius);\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --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\");\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: var(--bs-body-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: var(--bs-secondary-bg);\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n\n[data-bs-theme=dark] .form-select {\n --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\");\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-body-bg);\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: var(--bs-border-width) solid var(--bs-border-color);\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n --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\");\n}\n.form-check-input:checked[type=radio] {\n --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\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n --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\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n --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\");\n width: 2em;\n margin-left: -2.5em;\n background-image: var(--bs-form-switch-bg);\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n --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='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n --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\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n --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\");\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: transparent;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n -webkit-appearance: none;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n -moz-appearance: none;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n min-height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n color: transparent;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n color: rgba(var(--bs-body-color-rgb), 0.65);\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n color: rgba(var(--bs-body-color-rgb), 0.65);\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after {\n position: absolute;\n inset: 1rem 0.375rem;\n z-index: -1;\n height: 1.5em;\n content: \"\";\n background-color: var(--bs-body-bg);\n border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:focus ~ label::after,\n.form-floating > .form-control:not(:placeholder-shown) ~ label::after,\n.form-floating > .form-control-plaintext ~ label::after,\n.form-floating > .form-select ~ label::after {\n position: absolute;\n inset: 1rem 0.375rem;\n z-index: -1;\n height: 1.5em;\n content: \"\";\n background-color: var(--bs-body-bg);\n border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n color: rgba(var(--bs-body-color-rgb), 0.65);\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n.form-floating > :disabled ~ label,\n.form-floating > .form-control:disabled ~ label {\n color: #6c757d;\n}\n.form-floating > :disabled ~ label::after,\n.form-floating > .form-control:disabled ~ label::after {\n background-color: var(--bs-secondary-bg);\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: calc(var(--bs-border-width) * -1);\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-form-valid-color);\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: var(--bs-form-valid-border-color);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: var(--bs-form-valid-color);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: var(--bs-form-valid-color);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-form-invalid-color);\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n --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\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: var(--bs-form-invalid-color);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: var(--bs-form-invalid-color);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: var(--bs-body-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: var(--bs-border-radius);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: 0 0 0 #000;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: var(--bs-border-radius-lg);\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: var(--bs-border-radius-sm);\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: var(--bs-border-radius);\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: var(--bs-box-shadow);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: var(--bs-border-radius);\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n background: none;\n border: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: var(--bs-border-radius);\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n --bs-nav-underline-gap: 1rem;\n --bs-nav-underline-border-width: 0.125rem;\n --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n padding-right: 0;\n padding-left: 0;\n border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n font-weight: 700;\n color: var(--bs-nav-underline-link-active-color);\n border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n --bs-navbar-toggler-border-radius: var(--bs-border-radius);\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark,\n.navbar[data-bs-theme=dark] {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar-toggler-icon {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n color: var(--bs-body-color);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text-emphasis);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: var(--bs-border-radius-lg);\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: var(--bs-border-radius-sm);\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: var(--bs-border-radius);\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: var(--bs-border-radius);\n --bs-alert-link-color: inherit;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text-emphasis);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text-emphasis);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text-emphasis);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text-emphasis);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text-emphasis);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text-emphasis);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text-emphasis);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text-emphasis);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text-emphasis);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text-emphasis);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text-emphasis);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text-emphasis);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text-emphasis);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text-emphasis);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text-emphasis);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text-emphasis);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress,\n.progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text-emphasis);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-primary-border-subtle);\n --bs-list-group-active-color: var(--bs-primary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-primary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-primary-text-emphasis);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text-emphasis);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-active-color: var(--bs-secondary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-secondary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text-emphasis);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-success-border-subtle);\n --bs-list-group-active-color: var(--bs-success-bg-subtle);\n --bs-list-group-active-bg: var(--bs-success-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-success-text-emphasis);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text-emphasis);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-info-border-subtle);\n --bs-list-group-active-color: var(--bs-info-bg-subtle);\n --bs-list-group-active-bg: var(--bs-info-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-info-text-emphasis);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text-emphasis);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-warning-border-subtle);\n --bs-list-group-active-color: var(--bs-warning-bg-subtle);\n --bs-list-group-active-bg: var(--bs-warning-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-warning-text-emphasis);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text-emphasis);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-danger-border-subtle);\n --bs-list-group-active-color: var(--bs-danger-bg-subtle);\n --bs-list-group-active-bg: var(--bs-danger-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-danger-text-emphasis);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text-emphasis);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-light-border-subtle);\n --bs-list-group-active-color: var(--bs-light-bg-subtle);\n --bs-list-group-active-bg: var(--bs-light-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-light-text-emphasis);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text-emphasis);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-dark-border-subtle);\n --bs-list-group-active-color: var(--bs-dark-bg-subtle);\n --bs-list-group-active-bg: var(--bs-dark-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-dark-text-emphasis);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: 0.5;\n --bs-btn-close-hover-opacity: 0.75;\n --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: 0.25;\n --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n text-decoration: none;\n opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: var(--bs-box-shadow-sm);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: var(--bs-box-shadow);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: var(--bs-box-shadow);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: inherit;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n .carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon,\n[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,\n[data-bs-theme=dark].carousel .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);\n --bs-offcanvas-transition: transform 0.3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n outline: 0;\n 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);\n}\n\n.icon-link {\n display: inline-flex;\n gap: 0.375rem;\n align-items: center;\n -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n text-underline-offset: 0.25em;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n}\n.icon-link > .bi {\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n fill: currentcolor;\n transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n .icon-link > .bi {\n transition: none;\n }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0));\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n position: absolute !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: var(--bs-border-width);\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-inline-grid {\n display: inline-grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.focus-ring-primary {\n --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n border-width: 1px !important;\n}\n\n.border-2 {\n border-width: 2px !important;\n}\n\n.border-3 {\n border-width: 3px !important;\n}\n\n.border-4 {\n border-width: 4px !important;\n}\n\n.border-5 {\n border-width: 5px !important;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

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

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`\n`;\nclass $cd62c5572235e737$export$30b344bef3e55b67 extends HTMLElement {\n #t;\n #e;\n #s = [];\n constructor(){\n super(), this.shadowRoot || this.attachShadow({\n mode: \"open\",\n delegatesFocus: !0\n }).appendChild($cd62c5572235e737$var$e.content.cloneNode(!0)), this.#t = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null, this.#e = this.#i();\n }\n static get observedAttributes() {\n return [\n \"disabled\"\n ];\n }\n attributeChangedCallback(t, e, s) {\n \"disabled\" === t && e !== s && this.#e && (this.#e.toggleAttribute(\"disabled\", this.disabled), this.#e.setAttribute(\"aria-disabled\", this.disabled.toString()), this.#e.part && this.#e.part.contains(\"button\") && this.#e.part.toggle(\"button--disabled\", this.disabled));\n }\n connectedCallback() {\n this.#r(\"shareUrl\"), this.#r(\"shareTitle\"), this.#r(\"shareText\"), this.#r(\"shareFiles\"), this.#r(\"disabled\"), this.#t?.addEventListener(\"slotchange\", this.#a), this.#e?.addEventListener(\"click\", this.#n);\n }\n disconnectedCallback() {\n this.#t?.removeEventListener(\"slotchange\", this.#a), this.#e?.removeEventListener(\"click\", this.#n);\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(t) {\n this.toggleAttribute(\"disabled\", !!t);\n }\n get shareUrl() {\n return this.getAttribute(\"share-url\") || \"\";\n }\n set shareUrl(t) {\n this.setAttribute(\"share-url\", t);\n }\n get shareTitle() {\n return this.getAttribute(\"share-title\") || \"\";\n }\n set shareTitle(t) {\n this.setAttribute(\"share-title\", t);\n }\n get shareText() {\n return this.getAttribute(\"share-text\") || \"\";\n }\n set shareText(t) {\n this.setAttribute(\"share-text\", t);\n }\n get shareFiles() {\n return this.#s;\n }\n set shareFiles(t) {\n Array.isArray(t) && t.length > 0 && (this.#s = t);\n }\n async share() {\n if (!this.disabled) try {\n let t = {};\n this.shareUrl && (t.url = this.shareUrl), this.shareTitle && (t.title = this.shareTitle), this.shareText && (t.text = this.shareText), Array.isArray(this.shareFiles) && this.shareFiles.length > 0 && navigator.canShare && navigator.canShare({\n files: this.shareFiles\n }) && (t.files = this.shareFiles), await navigator.share(t), this.dispatchEvent(new CustomEvent(\"web-share:success\", {\n bubbles: !0,\n composed: !0,\n detail: {\n shareData: t\n }\n }));\n } catch (t) {\n if (t instanceof Error && \"AbortError\" === t.name) {\n this.dispatchEvent(new CustomEvent(\"web-share:abort\", {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n return;\n }\n this.dispatchEvent(new CustomEvent(\"web-share:error\", {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }\n }\n #n = (t)=>{\n t.preventDefault(), this.disabled || this.share();\n };\n #a = (t)=>{\n t.target && \"button\" === t.target.name && (this.#e?.removeEventListener(\"click\", this.#n), this.#e = this.#i(), this.#e && (this.#e.addEventListener(\"click\", this.#n), \"BUTTON\" === this.#e.nodeName || this.#e.hasAttribute(\"role\") || this.#e.setAttribute(\"role\", \"button\")));\n };\n #i() {\n return this.#t && this.#t.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"button\" === t.getAttribute(\"slot\")) || null;\n }\n #r(t) {\n if (Object.prototype.hasOwnProperty.call(this, t)) {\n let e = this[t];\n delete this[t], this[t] = e;\n }\n }\n static defineCustomElement(t = \"web-share\") {\n \"undefined\" == typeof window || window.customElements.get(t) || window.customElements.define(t, $cd62c5572235e737$export$30b344bef3e55b67);\n }\n}\n$cd62c5572235e737$export$30b344bef3e55b67.defineCustomElement();\n\n\nObject.defineProperty({}, \"CapturePhoto\", {\n get: function() {\n return $dced0d224c6d876e$export$cc30a98fe3890794;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $dced0d224c6d876e$var$t = (t, e, i)=>(Number.isNaN(e) && (e = 0), Number.isNaN(i) && (i = 0), Math.min(Math.max(t, Math.min(e, i)), Math.max(e, i))), $dced0d224c6d876e$var$e = \"capture-photo\", $dced0d224c6d876e$var$i = `\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`, $dced0d224c6d876e$var$o = document.createElement(\"template\");\n$dced0d224c6d876e$var$o.innerHTML = `\n \n\n \n\n \n\n

\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\nclass $dced0d224c6d876e$export$cc30a98fe3890794 extends HTMLElement {\n #t = {};\n #e = null;\n #i = null;\n #o = null;\n #n = null;\n #a = null;\n #s = null;\n #r = null;\n #l = null;\n constructor(){\n super(), this.#t = this.getSupportedConstraints(), this.shadowRoot || this.attachShadow({\n mode: \"open\"\n }).appendChild($dced0d224c6d876e$var$o.content.cloneNode(!0));\n }\n static get observedAttributes() {\n return [\n \"no-image\",\n \"facing-mode\",\n \"camera-resolution\",\n \"pan\",\n \"tilt\",\n \"zoom\"\n ];\n }\n attributeChangedCallback(t, e, i) {\n if (!this.isConnected) return;\n let o = this.getTrackCapabilities(), n = this.getTrackSettings();\n if (\"no-image\" === t && e !== i && this.#u(), \"facing-mode\" === t && e !== i && \"facingMode\" in this.#t) {\n let t = [\n \"user\",\n \"environment\"\n ].includes(this.facingMode || \"\");\n \"facingMode\" in n && t && (this.stopVideoStream(), this.startVideoStream());\n }\n if (\"camera-resolution\" === t && e !== i && \"string\" == typeof this.cameraResolution && this.cameraResolution.trim().length > 0) {\n let [t = 0, e = 0] = this.cameraResolution.split(\"x\").map((t)=>Number(t));\n if (t > 0 && e > 0 && \"width\" in o && \"height\" in o) {\n let i = !!(o.width?.min && o.width?.max) && t >= o?.width?.min && t <= o?.width?.max, a = !!(o.height?.min && o.height?.max) && e >= o?.height?.min && e <= o?.height?.max;\n \"width\" in n && \"height\" in n && i && a && (this.stopVideoStream(), this.startVideoStream());\n }\n }\n if (\"pan\" === t && e !== i && \"pan\" in this.#t) {\n let t = !!(\"pan\" in o && o.pan?.min && o.pan?.max) && this.pan >= o.pan.min && this.pan <= o.pan.max;\n \"pan\" in n && \"number\" == typeof this.pan && t && this.#h(\"pan\", this.pan);\n }\n if (\"tilt\" === t && e !== i && \"tilt\" in this.#t) {\n let t = !!(\"tilt\" in o && o.tilt?.min && o.tilt?.max) && this.tilt >= o.tilt.min && this.tilt <= o.tilt.max;\n \"tilt\" in n && \"number\" == typeof this.tilt && t && this.#h(\"tilt\", this.tilt);\n }\n if (\"zoom\" === t && e !== i && \"zoom\" in this.#t) {\n let t = !!(\"zoom\" in o && o.zoom?.min && o.zoom?.max) && this.zoom >= o.zoom.min && this.zoom <= o.zoom.max;\n \"zoom\" in n && \"number\" == typeof this.zoom && t && this.#h(\"zoom\", this.zoom);\n }\n }\n connectedCallback() {\n if (this.#d(\"autpoPlay\"), this.#d(\"noImage\"), this.#d(\"facingMode\"), this.#d(\"cameraResolution\"), this.#d(\"pan\"), this.#d(\"tilt\"), this.#d(\"zoom\"), this.#d(\"calculateFileSize\"), this.#i = this.shadowRoot?.querySelector(\"canvas\") || null, this.#o = this.shadowRoot?.getElementById(\"output\") || null, this.#n = this.shadowRoot?.querySelector(\"video\") || null, this.#a = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null, this.#s = this.#c(), this.#r = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null, this.#l = this.#m(), this.#n?.addEventListener(\"loadedmetadata\", this.#p), this.#a?.addEventListener(\"slotchange\", this.#g), this.#s?.addEventListener(\"click\", this.#b), this.#r?.addEventListener(\"slotchange\", this.#f), this.#l?.addEventListener(\"click\", this.#v), !$dced0d224c6d876e$export$cc30a98fe3890794.isSupported()) return this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: {\n name: \"NotSupportedError\",\n message: \"Not supported\"\n }\n }\n }));\n this.autoPlay && this.startVideoStream();\n }\n disconnectedCallback() {\n this.stopVideoStream(), this.#l?.removeEventListener(\"click\", this.#v), this.#s?.removeEventListener(\"click\", this.#b), this.#n?.removeEventListener(\"canplay\", this.#p), this.#a?.removeEventListener(\"slotchange\", this.#g), this.#r?.removeEventListener(\"slotchange\", this.#f);\n }\n get autoPlay() {\n return this.hasAttribute(\"auto-play\");\n }\n set autoPlay(t) {\n this.toggleAttribute(\"auto-play\", !!t);\n }\n get noImage() {\n return this.hasAttribute(\"no-image\");\n }\n set noImage(t) {\n this.toggleAttribute(\"no-image\", !!t);\n }\n get facingMode() {\n return this.getAttribute(\"facing-mode\") || \"user\";\n }\n set facingMode(t) {\n this.setAttribute(\"facing-mode\", t);\n }\n get cameraResolution() {\n return this.getAttribute(\"camera-resolution\") || \"\";\n }\n set cameraResolution(t) {\n this.setAttribute(\"camera-resolution\", t);\n }\n get pan() {\n return Number(this.getAttribute(\"pan\")) || 0;\n }\n set pan(t) {\n this.setAttribute(\"pan\", null != t ? t.toString() : t);\n }\n get tilt() {\n return Number(this.getAttribute(\"tilt\")) || 0;\n }\n set tilt(t) {\n this.setAttribute(\"tilt\", null != t ? t.toString() : t);\n }\n get zoom() {\n return Number(this.getAttribute(\"zoom\")) || 1;\n }\n set zoom(t) {\n this.setAttribute(\"zoom\", null != t ? t.toString() : t);\n }\n get loading() {\n return this.hasAttribute(\"loading\");\n }\n get calculateFileSize() {\n return this.hasAttribute(\"calculate-file-size\");\n }\n set calculateFileSize(t) {\n this.toggleAttribute(\"calculate-file-size\", !!t);\n }\n #v = (t)=>{\n t.preventDefault(), this.loading || (this.facingMode = \"user\" !== this.facingMode && this.facingMode ? \"user\" : \"environment\");\n };\n #b = (t)=>{\n t.preventDefault(), this.capture();\n };\n #p = (t)=>{\n let i = t.target;\n i.play().then(()=>{\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:video-play`, {\n bubbles: !0,\n composed: !0,\n detail: {\n video: i\n }\n }));\n }).catch((t)=>{\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }).finally(()=>{\n this.removeAttribute(\"loading\");\n });\n };\n #u() {\n this.#o && Array.from(this.#o.childNodes).forEach((t)=>t.remove());\n }\n #h(e, i) {\n if (!this.#e || !e || !i) return;\n let [o] = this.#e.getVideoTracks(), n = this.getTrackCapabilities();\n e in this.getTrackSettings() && o.applyConstraints({\n advanced: [\n {\n [e]: $dced0d224c6d876e$var$t(Number(i), n[e]?.min || 1, n[e]?.max || 1)\n }\n ]\n });\n }\n #g = (t)=>{\n t.target?.name === \"capture-button\" && (this.#s?.removeEventListener(\"click\", this.#b), this.#s = this.#c(), this.#s && (this.#s.addEventListener(\"click\", this.#b), \"BUTTON\" === this.#s.nodeName || this.#s.hasAttribute(\"role\") || this.#s.setAttribute(\"role\", \"button\")));\n };\n #f = (t)=>{\n t.target?.name === \"facing-mode-button\" && (this.#l?.removeEventListener(\"click\", this.#v), this.#l = this.#m(), this.#l && (this.#l.addEventListener(\"click\", this.#v), \"BUTTON\" === this.#l.nodeName || this.#l.hasAttribute(\"role\") || this.#l.setAttribute(\"role\", \"button\")));\n };\n #m() {\n return this.#r && this.#r.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"facing-mode-button\" === t.getAttribute(\"slot\")) || null;\n }\n #c() {\n return this.#a && this.#a.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"capture-button\" === t.getAttribute(\"slot\")) || null;\n }\n #d(t) {\n if (Object.prototype.hasOwnProperty.call(this, t)) {\n let e = this[t];\n delete this[t], this[t] = e;\n }\n }\n async startVideoStream() {\n if (!$dced0d224c6d876e$export$cc30a98fe3890794.isSupported() || this.#e) return;\n this.setAttribute(\"loading\", \"\");\n let t = {\n video: {\n facingMode: {\n ideal: this.facingMode || \"user\"\n },\n pan: !0,\n tilt: !0,\n zoom: !0\n },\n audio: !1\n };\n if (\"string\" == typeof this.cameraResolution && this.cameraResolution.trim().length > 0) {\n let [e = 0, i = 0] = this.cameraResolution.split(\"x\").map((t)=>Number(t));\n e > 0 && i > 0 && (t.video.width = e, t.video.height = i);\n }\n try {\n this.#e = await navigator.mediaDevices.getUserMedia(t), this.#n && (this.#n.srcObject = this.#e), this.#h(\"pan\", this.pan), this.#h(\"tilt\", this.tilt), this.#h(\"zoom\", this.zoom);\n let e = this.getTrackSettings();\n \"facingMode\" in e && this.#r && (this.#r.hidden = !1);\n } catch (t) {\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n } finally{\n this.removeAttribute(\"loading\");\n }\n }\n stopVideoStream() {\n if (!this.#n || !this.#e) return;\n let [t] = this.#e.getVideoTracks();\n t?.stop(), this.#n.srcObject = null, this.#e = null;\n }\n async capture() {\n if (!this.loading && this.#i && this.#n) try {\n let t = this.#i.getContext(\"2d\"), i = this.#n.videoWidth, o = this.#n.videoHeight;\n this.#i.width = i, this.#i.height = o, t?.drawImage(this.#n, 0, 0, i, o);\n let n = this.#i.toDataURL(\"image/png\");\n if (\"string\" == typeof n && n.includes(\"data:image\")) {\n if (!this.noImage) {\n let t = new Image;\n t.src = n, t.width = i, t.height = o, t.setAttribute(\"part\", \"output-image\"), this.#u(), this.#o?.appendChild(t);\n }\n let t = {\n dataURI: n,\n width: i,\n height: o\n };\n if (this.calculateFileSize) try {\n let e = await fetch(n), i = (await e.blob()).size;\n i && (t.size = i);\n } catch (t) {}\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:success`, {\n bubbles: !0,\n composed: !0,\n detail: t\n }));\n }\n } catch (t) {\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }\n }\n getSupportedConstraints() {\n return $dced0d224c6d876e$export$cc30a98fe3890794.isSupported() && navigator.mediaDevices.getSupportedConstraints() || {};\n }\n getTrackCapabilities() {\n if (!this.#e) return {};\n let [t] = this.#e.getVideoTracks();\n return t && \"function\" == typeof t.getCapabilities && t.getCapabilities() || {};\n }\n getTrackSettings() {\n if (!this.#e) return {};\n let [t] = this.#e.getVideoTracks();\n return t && \"function\" == typeof t.getSettings && t.getSettings() || {};\n }\n static isSupported() {\n return !!navigator.mediaDevices?.getUserMedia;\n }\n static defineCustomElement(t = $dced0d224c6d876e$var$e) {\n \"undefined\" == typeof window || window.customElements.get(t) || window.customElements.define(t, $dced0d224c6d876e$export$cc30a98fe3890794);\n }\n}\n$dced0d224c6d876e$export$cc30a98fe3890794.defineCustomElement();\n\n\nObject.defineProperty({}, \"ModalElement\", {\n get: function() {\n return $d9c5053bade2d3f8$export$32589115725b904b;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $d9c5053bade2d3f8$var$e = document.createElement(\"template\");\n$d9c5053bade2d3f8$var$e.innerHTML = /* html */ `\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`; /**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */ \nclass $d9c5053bade2d3f8$export$32589115725b904b extends HTMLElement {\n #e = null;\n #t = null;\n #o = void 0;\n constructor(){\n if (super(), !this.shadowRoot) {\n let t = this.attachShadow({\n mode: \"open\"\n });\n t.appendChild($d9c5053bade2d3f8$var$e.content.cloneNode(!0));\n }\n this.shadowRoot && (this.#e = this.shadowRoot.querySelector(\"dialog\"), this.#t = this.shadowRoot.querySelector('slot[name=\"footer\"]'));\n }\n static get observedAttributes() {\n return [\n \"open\",\n \"no-header\",\n \"no-animations\",\n \"no-close-button\"\n ];\n }\n attributeChangedCallback(e, t, o) {\n if (null !== this.#e) {\n if (\"open\" === e && t !== o && (this.open ? (this.#e.showModal(), document.body && (document.body.style.overflowY = \"hidden\"), this.dispatchEvent(new CustomEvent(\"me-open\", {\n bubbles: !0,\n composed: !0,\n detail: {\n element: this\n }\n }))) : this.#e.close()), \"no-header\" === e && t !== o) {\n let e = this.#e.querySelector(\".dialog__header\");\n null !== e && (e.hidden = this.noHeader);\n }\n if (\"no-animations\" === e && t !== o && this.#e.classList.toggle(\"dialog--no-animations\", this.noAnimations), \"no-close-button\" === e && t !== o) {\n let e = this.#e.querySelector(\".dialog__close\");\n null !== e && (e.hidden = this.noCloseButton);\n }\n }\n }\n connectedCallback() {\n this.#i(\"open\"), this.#i(\"staticBackdrop\"), this.#i(\"noHeader\"), this.#i(\"noAnimations\"), this.#i(\"noCloseButton\"), this.#i(\"fullscreen\"), this.#e?.addEventListener(\"click\", this.#a), this.#e?.addEventListener(\"close\", this.#l), this.#e?.addEventListener(\"cancel\", this.#s), this.#e?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\", this.#n), this.#t?.addEventListener(\"slotchange\", this.#r);\n }\n disconnectedCallback() {\n this.#o && clearTimeout(this.#o), this.#e?.addEventListener(\"click\", this.#a), this.#e?.removeEventListener(\"close\", this.#l), this.#e?.removeEventListener(\"cancel\", this.#s), this.#e?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\", this.#n), this.#t?.removeEventListener(\"slotchange\", this.#r);\n }\n get open() {\n return this.hasAttribute(\"open\");\n }\n set open(e) {\n e ? this.setAttribute(\"open\", \"\") : this.removeAttribute(\"open\");\n }\n get staticBackdrop() {\n return this.hasAttribute(\"static-backdrop\");\n }\n set staticBackdrop(e) {\n e ? this.setAttribute(\"static-backdrop\", \"\") : this.removeAttribute(\"static-backdrop\");\n }\n get noHeader() {\n return this.hasAttribute(\"no-header\");\n }\n set noHeader(e) {\n e ? this.setAttribute(\"no-header\", \"\") : this.removeAttribute(\"no-header\");\n }\n get noAnimations() {\n return this.hasAttribute(\"no-animations\");\n }\n set noAnimations(e) {\n e ? this.setAttribute(\"no-animations\", \"\") : this.removeAttribute(\"no-animations\");\n }\n get noCloseButton() {\n return this.hasAttribute(\"no-close-button\");\n }\n set noCloseButton(e) {\n e ? this.setAttribute(\"no-close-button\", \"\") : this.removeAttribute(\"no-close-button\");\n }\n get fullscreen() {\n return this.hasAttribute(\"fullscreen\");\n }\n set fullscreen(e) {\n e ? this.setAttribute(\"fullscreen\", \"\") : this.removeAttribute(\"fullscreen\");\n }\n #d() {\n this.#o || (this.#e?.classList.add(\"dialog--pulse\"), this.#o = setTimeout(()=>{\n this.#e?.classList.remove(\"dialog--pulse\"), clearTimeout(this.#o), this.#o = void 0;\n }, 300));\n }\n #l = ()=>{\n // the open property when the dialog is closed by the user.\n this.open = !1, document.body && (document.body.style.overflowY = \"\"), this.dispatchEvent(new CustomEvent(\"me-close\", {\n bubbles: !0,\n composed: !0,\n detail: {\n element: this\n }\n }));\n };\n #s = (e)=>{\n let t = this.#c(\"escape-key\");\n this.dispatchEvent(t), t.defaultPrevented && (e.preventDefault(), this.noAnimations || this.#d());\n };\n #n = (e)=>{\n let t = this.#c(\"close-button\");\n this.dispatchEvent(t), t.defaultPrevented && (e.preventDefault(), this.noAnimations || this.#d());\n };\n #a = (e)=>{\n if (e.target !== e.currentTarget) return;\n let t = this.#c(\"backdrop-click\");\n if (this.dispatchEvent(t), t.defaultPrevented || this.staticBackdrop) {\n this.noAnimations || this.#d();\n return;\n }\n this.#e?.close();\n };\n #r = ()=>{\n if (null === this.#e) return; /** @type {Nullable} */ \n let e = this.#e.querySelector(\".dialog__footer\");\n if (null === e) return;\n let t = this.#t?.assignedNodes(), o = !!t && t.length > 0;\n e.hidden = !o;\n };\n #c(e) {\n return new CustomEvent(\"me-request-close\", {\n bubbles: !0,\n composed: !0,\n cancelable: !0,\n detail: {\n reason: e,\n element: this\n }\n });\n }\n #i(e) {\n if (Object.prototype.hasOwnProperty.call(this, e)) {\n let t = this[e];\n delete this[e], this[e] = t;\n }\n }\n show() {\n this.open || (this.open = !0);\n }\n hide() {\n this.open && (this.open = !1);\n }\n static defineCustomElement(e = \"modal-element\") {\n \"undefined\" == typeof window || window.customElements.get(e) || window.customElements.define(e, $d9c5053bade2d3f8$export$32589115725b904b);\n }\n}\n$d9c5053bade2d3f8$export$32589115725b904b.defineCustomElement();\n //# sourceMappingURL=modal-element-defined.js.map\n\n\nObject.defineProperty({}, \"FilesDropzone\", {\n get: function() {\n return $9351176e8d763a78$export$6ccd1735166caad9;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $9351176e8d763a78$var$e = new Map([\n [\n \"aac\",\n \"audio/aac\"\n ],\n [\n \"abw\",\n \"application/x-abiword\"\n ],\n [\n \"arc\",\n \"application/x-freearc\"\n ],\n [\n \"avif\",\n \"image/avif\"\n ],\n [\n \"avi\",\n \"video/x-msvideo\"\n ],\n [\n \"azw\",\n \"application/vnd.amazon.ebook\"\n ],\n [\n \"bin\",\n \"application/octet-stream\"\n ],\n [\n \"bmp\",\n \"image/bmp\"\n ],\n [\n \"bz\",\n \"application/x-bzip\"\n ],\n [\n \"bz2\",\n \"application/x-bzip2\"\n ],\n [\n \"cda\",\n \"application/x-cdf\"\n ],\n [\n \"csh\",\n \"application/x-csh\"\n ],\n [\n \"css\",\n \"text/css\"\n ],\n [\n \"csv\",\n \"text/csv\"\n ],\n [\n \"doc\",\n \"application/msword\"\n ],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ],\n [\n \"eot\",\n \"application/vnd.ms-fontobject\"\n ],\n [\n \"epub\",\n \"application/epub+zip\"\n ],\n [\n \"gz\",\n \"application/gzip\"\n ],\n [\n \"gif\",\n \"image/gif\"\n ],\n [\n \"heic\",\n \"image/heic\"\n ],\n [\n \"heif\",\n \"image/heif\"\n ],\n [\n \"htm\",\n \"text/html\"\n ],\n [\n \"html\",\n \"text/html\"\n ],\n [\n \"ico\",\n \"image/vnd.microsoft.icon\"\n ],\n [\n \"ics\",\n \"text/calendar\"\n ],\n [\n \"jar\",\n \"application/java-archive\"\n ],\n [\n \"jpeg\",\n \"image/jpeg\"\n ],\n [\n \"jpg\",\n \"image/jpeg\"\n ],\n [\n \"jxl\",\n \"image/jxl\"\n ],\n [\n \"js\",\n \"text/javascript\"\n ],\n [\n \"json\",\n \"application/json\"\n ],\n [\n \"jsonld\",\n \"application/ld+json\"\n ],\n [\n \"markdown\",\n \"text/markdown\"\n ],\n [\n \"md\",\n \"text/markdown\"\n ],\n [\n \"mid\",\n \"audio/midi\"\n ],\n [\n \"midi\",\n \"audio/midi\"\n ],\n [\n \"mjs\",\n \"text/javascript\"\n ],\n [\n \"mp3\",\n \"audio/mpeg\"\n ],\n [\n \"mp4\",\n \"video/mp4\"\n ],\n [\n \"mpeg\",\n \"video/mpeg\"\n ],\n [\n \"mpkg\",\n \"application/vnd.apple.installer+xml\"\n ],\n [\n \"odp\",\n \"application/vnd.oasis.opendocument.presentation\"\n ],\n [\n \"ods\",\n \"application/vnd.oasis.opendocument.spreadsheet\"\n ],\n [\n \"odt\",\n \"application/vnd.oasis.opendocument.text\"\n ],\n [\n \"oga\",\n \"audio/ogg\"\n ],\n [\n \"ogv\",\n \"video/ogg\"\n ],\n [\n \"ogx\",\n \"application/ogg\"\n ],\n [\n \"opus\",\n \"audio/opus\"\n ],\n [\n \"otf\",\n \"font/otf\"\n ],\n [\n \"png\",\n \"image/png\"\n ],\n [\n \"pdf\",\n \"application/pdf\"\n ],\n [\n \"php\",\n \"application/x-httpd-php\"\n ],\n [\n \"ppt\",\n \"application/vnd.ms-powerpoint\"\n ],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n ],\n [\n \"rar\",\n \"application/vnd.rar\"\n ],\n [\n \"rtf\",\n \"application/rtf\"\n ],\n [\n \"sh\",\n \"application/x-sh\"\n ],\n [\n \"svg\",\n \"image/svg+xml\"\n ],\n [\n \"swf\",\n \"application/x-shockwave-flash\"\n ],\n [\n \"tar\",\n \"application/x-tar\"\n ],\n [\n \"tif\",\n \"image/tiff\"\n ],\n [\n \"tiff\",\n \"image/tiff\"\n ],\n [\n \"ts\",\n \"video/mp2t\"\n ],\n [\n \"ttf\",\n \"font/ttf\"\n ],\n [\n \"txt\",\n \"text/plain\"\n ],\n [\n \"vsd\",\n \"application/vnd.visio\"\n ],\n [\n \"wav\",\n \"audio/wav\"\n ],\n [\n \"weba\",\n \"audio/webm\"\n ],\n [\n \"webm\",\n \"video/webm\"\n ],\n [\n \"webp\",\n \"image/webp\"\n ],\n [\n \"woff\",\n \"font/woff\"\n ],\n [\n \"woff2\",\n \"font/woff2\"\n ],\n [\n \"xhtml\",\n \"application/xhtml+xml\"\n ],\n [\n \"xls\",\n \"application/vnd.ms-excel\"\n ],\n [\n \"xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ],\n [\n \"xml\",\n \"application/xml\"\n ],\n [\n \"xul\",\n \"application/vnd.mozilla.xul+xml\"\n ],\n [\n \"zip\",\n \"application/zip\"\n ],\n [\n \"7z\",\n \"application/x-7z-compressed\"\n ],\n [\n \"mkv\",\n \"video/x-matroska\"\n ],\n [\n \"mov\",\n \"video/quicktime\"\n ],\n [\n \"msg\",\n \"application/vnd.ms-outlook\"\n ]\n]), $9351176e8d763a78$var$t = [\n \".DS_Store\",\n \"Thumbs.db\"\n], $9351176e8d763a78$var$o = (t)=>{\n let { name: o } = t;\n if (o && -1 !== o.lastIndexOf(\".\") && !t.type) {\n let i = (o.split(\".\").pop() || \"\").toLowerCase(), r = $9351176e8d763a78$var$e.get(i);\n r && Object.defineProperty(t, \"type\", {\n value: r,\n writable: !1,\n configurable: !1,\n enumerable: !0\n });\n }\n return t;\n}, $9351176e8d763a78$var$i = (e, t)=>{\n let i = $9351176e8d763a78$var$o(e);\n if (\"string\" != typeof i.path) {\n let { webkitRelativePath: o } = e;\n Object.defineProperty(i, \"path\", {\n value: \"string\" == typeof t ? t : o || e.name,\n writable: !1,\n configurable: !1,\n enumerable: !0\n });\n }\n return i;\n}, $9351176e8d763a78$var$r = async (e)=>await new Promise((t, o)=>{\n e.readEntries(t, o);\n }), $9351176e8d763a78$var$a = async (e)=>{\n let t = [], o = await $9351176e8d763a78$var$r(e);\n for(; o.length > 0;)t.push(...o), o = await $9351176e8d763a78$var$r(e);\n return t;\n}, $9351176e8d763a78$var$n = (e)=>new Promise((t, o)=>{\n e.file((o)=>t($9351176e8d763a78$var$i(o, e.fullPath)), o);\n }), $9351176e8d763a78$var$s = async (e)=>{\n let o = [], i = [];\n for (let t of e){\n if (\"file\" !== t.kind) continue;\n let e = t.getAsEntry ? t.getAsEntry() : t.webkitGetAsEntry();\n i.push(e);\n }\n for(; i.length > 0;){\n let e = i.shift();\n if (e) {\n if (e.isFile) {\n let i = await $9351176e8d763a78$var$n(e);\n -1 === $9351176e8d763a78$var$t.indexOf(i.name) && o.push(i);\n } else e.isDirectory && i.push(...await $9351176e8d763a78$var$a(e.createReader()));\n }\n }\n return o;\n}, $9351176e8d763a78$var$d = async (e)=>{\n let o = [];\n for (let r of e)-1 === $9351176e8d763a78$var$t.indexOf(r.name) && o.push($9351176e8d763a78$var$i(r));\n return o;\n}, $9351176e8d763a78$var$l = async (e)=>e.dataTransfer ? e.dataTransfer.items ? await $9351176e8d763a78$var$s(e.dataTransfer.items) : await $9351176e8d763a78$var$d(e.dataTransfer.files) : await $9351176e8d763a78$var$d(e.target.files), $9351176e8d763a78$var$p = \"files-dropzone\", $9351176e8d763a78$var$c = \"TOO_MANY_FILES\", $9351176e8d763a78$var$h = document.createElement(\"template\"), $9351176e8d763a78$var$u = `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n$9351176e8d763a78$var$h.innerHTML = `\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\nclass $9351176e8d763a78$export$6ccd1735166caad9 extends HTMLElement {\n #e = null;\n #t = null;\n constructor(){\n super(), this.shadowRoot || this.attachShadow({\n mode: \"open\"\n }).appendChild($9351176e8d763a78$var$h.content.cloneNode(!0)), this.shadowRoot && (this.#e = this.shadowRoot.getElementById(\"fileInput\"), this.#t = this.shadowRoot.getElementById(\"dropzoneEl\"));\n }\n static get observedAttributes() {\n return [\n \"accept\",\n \"disabled\",\n \"multiple\",\n \"no-keyboard\"\n ];\n }\n attributeChangedCallback(e, t, o) {\n \"accept\" === e && t !== o && this.#e && (this.#e.accept = this.accept), \"disabled\" === e && t !== o && this.#e && (this.#e.disabled = this.disabled, this.disabled ? this.#t?.removeAttribute(\"tabindex\") : this.#t?.setAttribute(\"tabindex\", \"0\")), \"multiple\" === e && t !== o && this.#e && (this.#e.multiple = this.multiple), \"no-keyboard\" === e && t !== o && this.#t && (this.noKeyboard ? this.#t.removeAttribute(\"tabindex\") : this.#t.setAttribute(\"tabindex\", \"0\"));\n }\n connectedCallback() {\n this.#o(\"accept\"), this.#o(\"disabled\"), this.#o(\"maxFiles\"), this.#o(\"maxSize\"), this.#o(\"minSize\"), this.#o(\"multiple\"), this.#o(\"noClick\"), this.#o(\"noDrag\"), this.#o(\"noKeyboard\"), this.#o(\"autoFocus\"), this.#o(\"noStyle\"), this.#e?.addEventListener(\"change\", this.#i), this.#t?.addEventListener(\"dragenter\", this.#r), this.#t?.addEventListener(\"dragover\", this.#a), this.#t?.addEventListener(\"dragleave\", this.#n), this.#t?.addEventListener(\"drop\", this.#s), this.#t?.addEventListener(\"click\", this.#d), this.#t?.addEventListener(\"keyup\", this.#l), this.autoFocus && this.#t?.focus();\n }\n disconnectedCallback() {\n this.#e?.removeEventListener(\"change\", this.#i), this.#t?.removeEventListener(\"dragenter\", this.#r), this.#t?.removeEventListener(\"dragover\", this.#a), this.#t?.removeEventListener(\"dragleave\", this.#n), this.#t?.removeEventListener(\"drop\", this.#s), this.#t?.removeEventListener(\"click\", this.#d), this.#t?.removeEventListener(\"keyup\", this.#l);\n }\n get accept() {\n return this.getAttribute(\"accept\") || \"\";\n }\n set accept(e) {\n this.setAttribute(\"accept\", null != e ? e.toString() : e);\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(e) {\n this.toggleAttribute(\"disabled\", !!e);\n }\n get maxFiles() {\n let e = Number(this.getAttribute(\"max-files\")) || 0;\n return e <= 0 ? 1 / 0 : Math.floor(Math.abs(e));\n }\n set maxFiles(e) {\n this.setAttribute(\"max-files\", null != e ? e.toString() : e);\n }\n get maxSize() {\n let e = this.getAttribute(\"max-size\");\n if (null === e) return 1 / 0;\n let t = Number(e);\n return Number.isNaN(t) ? 1 / 0 : t;\n }\n set maxSize(e) {\n this.setAttribute(\"max-size\", null != e ? e.toString() : e);\n }\n get minSize() {\n let e = this.getAttribute(\"min-size\");\n if (null === e) return 0;\n let t = Number(e);\n return Number.isNaN(t) ? 0 : t;\n }\n set minSize(e) {\n this.setAttribute(\"min-size\", null != e ? e.toString() : e);\n }\n get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(e) {\n this.toggleAttribute(\"multiple\", !!e);\n }\n get noClick() {\n return this.hasAttribute(\"no-click\");\n }\n set noClick(e) {\n this.toggleAttribute(\"no-click\", !!e);\n }\n get noDrag() {\n return this.hasAttribute(\"no-drag\");\n }\n set noDrag(e) {\n this.toggleAttribute(\"no-drag\", !!e);\n }\n get noKeyboard() {\n return this.hasAttribute(\"no-keyboard\");\n }\n set noKeyboard(e) {\n this.toggleAttribute(\"no-keyboard\", !!e);\n }\n get autoFocus() {\n return this.hasAttribute(\"auto-focus\");\n }\n set autoFocus(e) {\n this.toggleAttribute(\"auto-focus\", !!e);\n }\n get noStyle() {\n return this.hasAttribute(\"no-style\");\n }\n set noStyle(e) {\n this.toggleAttribute(\"no-style\", !!e);\n }\n #i = async (e)=>{\n try {\n this.#p(await $9351176e8d763a78$var$l(e));\n } catch (e) {\n this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: e\n }\n }));\n }\n };\n #r = ()=>{\n this.disabled || this.noDrag || this.dispatchEvent(new Event(`${$9351176e8d763a78$var$p}-dragenter`, {\n bubbles: !0,\n composed: !0\n }));\n };\n #a = (e)=>{\n if (e.preventDefault(), this.disabled || this.noDrag) {\n e.dataTransfer.dropEffect = \"none\";\n return;\n }\n e.dataTransfer.dropEffect = \"copy\", this.#t && (this.#t.classList.add(\"dropzone--dragover\"), this.#t.part.add(\"dropzone--dragover\")), this.dispatchEvent(new Event(`${$9351176e8d763a78$var$p}-dragover`, {\n bubbles: !0,\n composed: !0\n }));\n };\n #n = ()=>{\n this.disabled || this.noDrag || (this.#t && (this.#t.classList.remove(\"dropzone--dragover\"), this.#t.part.remove(\"dropzone--dragover\")), this.dispatchEvent(new Event(`${$9351176e8d763a78$var$p}-dragleave`, {\n bubbles: !0,\n composed: !0\n })));\n };\n #s = async (e)=>{\n if (!this.disabled && !this.noDrag) {\n e.preventDefault(), this.#t && (this.#t.classList.remove(\"dropzone--dragover\"), this.#t.part.remove(\"dropzone--dragover\"));\n try {\n this.#p(await $9351176e8d763a78$var$l(e));\n } catch (e) {\n this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: e\n }\n }));\n }\n }\n };\n #d = ()=>{\n this.disabled || this.noClick || this.#e?.click();\n };\n #l = (e)=>{\n this.disabled || this.noKeyboard || \" \" !== e.key && \"Enter\" !== e.key || this.#e?.click();\n };\n #p(e) {\n if (!Array.isArray(e) || !e.length) return;\n let t = [], o = [], i = e.length;\n if (!this.multiple && i > 1) for (let t of e)o.push({\n file: t,\n errors: [\n {\n code: $9351176e8d763a78$var$c,\n message: \"Too many files selected. Only 1 file is allowed.\"\n }\n ]\n });\n else if (this.multiple && i > this.maxFiles) for (let t of e)o.push({\n file: t,\n errors: [\n {\n code: $9351176e8d763a78$var$c,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? \"files are\" : \"file is\"} allowed.`\n }\n ]\n });\n else for (let i of e){\n let e = function(e, t = \"\") {\n if (!t) return !0;\n let o = [\n ...new Set(t.split(\",\").map((e)=>e.trim()).filter(Boolean))\n ], i = e.type, r = i.replace(/\\/.*$/, \"\");\n for (let t of o)if (\".\" === t.charAt(0)) {\n if (-1 !== e.name.toLowerCase().indexOf(t.toLowerCase(), e.name.length - t.length)) return !0;\n } else if (/\\/\\*$/.test(t)) {\n if (r === t.replace(/\\/.*$/, \"\")) return !0;\n } else if (i === t) return !0;\n return !1;\n }(i, this.accept), r = i.size > this.maxSize, a = i.size < this.minSize;\n if (!e || r || a) {\n let t = [];\n e || t.push({\n code: \"INVALID_MIME_TYPE\",\n message: `File type \"${i.type}\" is not accepted.`\n }), r && t.push({\n code: \"FILE_TOO_LARGE\",\n message: `File size ${i.size} exceeds the maximum size of ${this.maxSize}.`\n }), a && t.push({\n code: \"FILE_TOO_SMALL\",\n message: `File size ${i.size} is smaller than the minimum size of ${this.minSize}.`\n }), o.push({\n file: i,\n errors: t\n });\n } else t.push(i);\n }\n this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-drop`, {\n bubbles: !0,\n composed: !0,\n detail: {\n acceptedFiles: t,\n rejectedFiles: o\n }\n })), t.length > 0 && this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-drop-accepted`, {\n bubbles: !0,\n composed: !0,\n detail: {\n acceptedFiles: t\n }\n })), o.length > 0 && this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-drop-rejected`, {\n bubbles: !0,\n composed: !0,\n detail: {\n rejectedFiles: o\n }\n })), this.#e && (this.#e.value = this.#e.defaultValue);\n }\n openFileDialog() {\n this.disabled || this.#e?.click();\n }\n #o(e) {\n if (Object.prototype.hasOwnProperty.call(this, e)) {\n let t = this[e];\n delete this[e], this[e] = t;\n }\n }\n static defineCustomElement(e = $9351176e8d763a78$var$p) {\n \"undefined\" == typeof window || window.customElements.get(e) || window.customElements.define(e, $9351176e8d763a78$export$6ccd1735166caad9);\n }\n}\n$9351176e8d763a78$export$6ccd1735166caad9.defineCustomElement();\n\n\n\n\n/**\n * Removes one or more elements from an array at the specified index(es).\n *\n * @param {Array} array The initial array to remove elements from.\n * @param {Number} ...indexes The index(es) of the elements to be removed. Non numbers are ignored.\n * @throws {TypeError} If `array` is not array.\n * @returns {Array} The result array with the elements specified removed.\n * @example\n *\n * const arr = [1, 2, 3, 4, 5];\n *\n * remove(arr, 0);\n * // => [2, 3, 4, 5]\n *\n * remove(arr, 0, 1);\n * // => [3, 4, 5]\n *\n * remove(arr, 0, 4);\n * // => [2, 3, 4]\n *\n * remove(arr);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length - 1);\n * // => [1, 2, 3, 4]\n *\n * remove(arr, NaN);\n * // => [1, 2, 3, 4, 5]\n */ const $4af3d380d1884504$export$30a014203d0d7e4f = (array, ...indexes)=>{\n if (!Array.isArray(array)) throw new TypeError(\"Expected an array for first argument\");\n return array.filter((_, i)=>indexes.indexOf(i) === -1);\n};\n\n\n/**\n * Generates a unique id of the form `${prefix}-${randomString}-${suffix}`.\n *\n * @param {string} [prefix=''] - The prefix to use for the id.\n * @param {string} [suffix=''] - The suffix to use for the id.\n * @returns {string} - The unique id.\n */ const $17004b28c97c1306$export$e2a22331486dcca0 = (prefix = \"\", suffix = \"\")=>{\n const prefixString = typeof prefix === \"string\" && prefix !== \"\" ? prefix + \"-\" : \"\";\n const suffixString = typeof suffix === \"string\" && suffix !== \"\" ? \"-\" + suffix : \"\";\n const randomString = Math.random().toString(36).substring(2, 8); // Pseudo-random string of six alphanumeric characters.\n return `${prefixString}${randomString}${suffixString}`;\n};\n\n\nconst $65136e012e05e2d7$export$63e7bed68b07a85c = [\n \"image/jpg\",\n \"image/jpeg\",\n \"image/png\",\n \"image/apng\",\n \"image/gif\",\n \"image/webp\",\n \"image/avif\"\n];\n\n\nvar $5c8573fd76c057a5$exports = {};\n$5c8573fd76c057a5$exports = new URL(\"Pressuru.684952ea.ttf\", import.meta.url).toString();\n\n\nvar $2db6b38fbc5d48da$exports = {};\n$2db6b38fbc5d48da$exports = new URL(\"Oswald-Regular.89ec7d89.ttf\", import.meta.url).toString();\n\n\nvar $a0b1873abc1b077b$exports = {};\n$a0b1873abc1b077b$exports = new URL(\"Oswald-Bold.0f6a7ca6.ttf\", import.meta.url).toString();\n\n\nvar $df7c7f72fd04e02a$exports = {};\n$df7c7f72fd04e02a$exports = new URL(\"Roboto-Regular.ca197847.ttf\", import.meta.url).toString();\n\n\nvar $e4c2039736f96f5d$exports = {};\n$e4c2039736f96f5d$exports = new URL(\"Roboto-Bold.fdb9b54a.ttf\", import.meta.url).toString();\n\n\nvar $fbff28e47a938944$exports = {};\n$fbff28e47a938944$exports = new URL(\"RobotoCondensed-Regular.d585f5c7.ttf\", import.meta.url).toString();\n\n\nvar $d8f4a375a42d32f4$exports = {};\n$d8f4a375a42d32f4$exports = new URL(\"RobotoCondensed-Bold.e1f96d4b.ttf\", import.meta.url).toString();\n\n\nvar $7cfbda315cbb4209$exports = {};\n$7cfbda315cbb4209$exports = new URL(\"CourierPrime-Regular.3a25a501.ttf\", import.meta.url).toString();\n\n\nvar $6379185b16d8409f$exports = {};\n$6379185b16d8409f$exports = new URL(\"CourierPrime-Bold.3d6bf689.ttf\", import.meta.url).toString();\n\n\nvar $454f2b111c8d0078$exports = {};\n$454f2b111c8d0078$exports = new URL(\"OpenSans-Regular.edf9e01b.ttf\", import.meta.url).toString();\n\n\nvar $c05fcaeb63dbd733$exports = {};\n$c05fcaeb63dbd733$exports = new URL(\"OpenSans-Bold.8fceb72b.ttf\", import.meta.url).toString();\n\n\nconst $56b863c8b6be7003$export$6874249d87f2602a = [\n {\n name: \"Pressuru\",\n label: \"Pressuru\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($5c8573fd76c057a5$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Oswald-Regular\",\n label: \"Oswald\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($2db6b38fbc5d48da$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Oswald-Bold\",\n label: \"Oswald Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($a0b1873abc1b077b$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"Roboto-Regular\",\n label: \"Roboto\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($df7c7f72fd04e02a$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Roboto-Bold\",\n label: \"Roboto Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($e4c2039736f96f5d$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"RobotoCondensed-Regular\",\n label: \"Roboto Condensed\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($fbff28e47a938944$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"RobotoCondensed-Bold\",\n label: \"Roboto Condensed Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($d8f4a375a42d32f4$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"CourierPrime-Regular\",\n label: \"Courier Prime\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($7cfbda315cbb4209$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"CourierPrime-Bold\",\n label: \"Courier Prime Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($6379185b16d8409f$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"OpenSans-Regular\",\n label: \"Open Sans\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($454f2b111c8d0078$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"OpenSans-Bold\",\n label: \"Open Sans Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($c05fcaeb63dbd733$exports))),\n style: \"normal\",\n weight: \"400\"\n }\n];\nconst $56b863c8b6be7003$export$59eceaef0c7797b2 = async (name, path, options = {})=>{\n try {\n const font = new FontFace(name, `url(${path})`, {\n ...options\n });\n await font.load();\n document.fonts.add(font);\n } catch (err) {\n console.error(err);\n }\n};\n\n\n\nconst $0374350c629f125f$export$6539e087749cf9d3 = async (options = {})=>{\n const res = await fetch(options.url);\n const blob = await res.blob();\n const mimeType = options.mimeType || blob.type || \"\";\n if (!(0, $65136e012e05e2d7$export$63e7bed68b07a85c).includes(mimeType)) throw new Error(`This is not an accepted image format. Accepted MIME types are: ${(0, $65136e012e05e2d7$export$63e7bed68b07a85c).join(\", \")}`);\n return new File([\n blob\n ], options.filename || \"\", blob);\n};\n\n\nconst $3969451ff60cb8d5$var$errorsContainer = document.getElementById(\"errorsContainer\");\nconst $3969451ff60cb8d5$var$hideError = (evt)=>{\n const target = evt.currentTarget;\n target.removeEventListener(\"click\", $3969451ff60cb8d5$var$hideError);\n $3969451ff60cb8d5$var$errorsContainer.removeChild(target.parentNode);\n};\nconst $3969451ff60cb8d5$export$af04143326425dbd = (message = \"\", type = \"info\")=>{\n const types = [\n \"info\",\n \"warning\",\n \"danger\"\n ];\n if (!types.includes(type)) type = \"info\";\n const template = /* html */ `\n ${message}\n \n `;\n const div = document.createElement(\"div\");\n div.className = `alert alert-${type} alert-dismissible text-break mb-2 fade`;\n div.innerHTML = template;\n div.querySelector(\"button\").addEventListener(\"click\", $3969451ff60cb8d5$var$hideError);\n $3969451ff60cb8d5$var$errorsContainer.appendChild(div);\n setTimeout(()=>div.classList.add(\"show\"), 100);\n};\n\n\n\nconst $224fa2388dce65c4$export$293a4b86a6fe2398 = (index, data = {})=>{\n const inputTemplate = /* html */ `\n
\n \n\n \n\n
\n \n \n \n
\n
\n\n
\n
\n
\n \n\n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n
\n `;\n const fragment = document.createDocumentFragment();\n const div = document.createElement(\"div\");\n div.className = \"bg-light border shadow-sm mb-3 rounded\";\n div.setAttribute(\"data-section\", \"textBox\");\n div.setAttribute(\"data-index\", index);\n div.innerHTML = inputTemplate;\n div.querySelector('[data-input=\"font\"]').value = data.font;\n div.querySelector('[data-input=\"textAlign\"]').value = data.textAlign;\n div.querySelector('[data-input=\"allCaps\"]').checked = data.allCaps;\n return fragment.appendChild(div);\n};\n\n\nconst $64ef5d4149d7e6a5$export$e653a2de0f3a8b89 = (image, canvas, ctx, textOptions = [])=>{\n if (image == null) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n if (typeof image === \"string\") {\n ctx.fillStyle = image;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n textOptions.forEach(function(item, index) {\n ctx.save();\n ctx.font = `${item.fontWeight} ${item.fontSize}px ${item.font}`;\n ctx.fillStyle = item.fillColor;\n ctx.textAlign = item.textAlign;\n ctx.strokeStyle = item.shadowColor;\n const multiplier = index + 1;\n const lineHeight = ctx.measureText(\"M\").width + item.fontSize / 2;\n const xPos = canvas.width / 2;\n const shadowBlur = item.shadowBlur;\n const text = item.allCaps === true ? item.text.toUpperCase() : item.text;\n const textLines = text.split(\"\\n\");\n if (shadowBlur !== 0) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = item.shadowColor;\n }\n ctx.translate(xPos + item.offsetX, lineHeight * multiplier + item.offsetY);\n ctx.rotate(item.rotate * Math.PI / 180);\n // first draw each line with shadow\n textLines.forEach((text, index)=>ctx.fillText(text, 0, index * lineHeight));\n // since shadows of multiline text may be drawn over letters of neighbour lines\n // (when shadow blur is big enough), re-draw text without shadows.\n ctx.shadowBlur = 0;\n textLines.forEach((text, index)=>ctx.fillText(text, 0, index * lineHeight));\n if (item.borderWidth > 0) {\n ctx.lineWidth = item.borderWidth;\n textLines.forEach((text, index)=>ctx.strokeText(text, 0, index * lineHeight));\n }\n ctx.restore();\n });\n};\n\n\nconst $85a5f86b715fe7db$var$videoModal = document.getElementById(\"videoModal\");\nconst $85a5f86b715fe7db$var$downloadModal = document.getElementById(\"downloadModal\");\nconst $85a5f86b715fe7db$var$canvas = document.getElementById(\"canvas\");\nconst $85a5f86b715fe7db$var$dropzoneEl = document.querySelector(\"files-dropzone\");\nconst $85a5f86b715fe7db$var$instructionsEl = document.getElementById(\"instructions\");\nconst $85a5f86b715fe7db$var$ctx = $85a5f86b715fe7db$var$canvas.getContext(\"2d\");\nconst $85a5f86b715fe7db$var$imageUploadMethodSelect = document.getElementById(\"imageUploadMethodSelect\");\nconst $85a5f86b715fe7db$var$fileSelectBtn = document.getElementById(\"fileSelectBtn\");\nconst $85a5f86b715fe7db$var$imageUrlForm = document.getElementById(\"imageUrlForm\");\nconst $85a5f86b715fe7db$var$addTextboxBtn = document.getElementById(\"addTextboxBtn\");\nconst $85a5f86b715fe7db$var$inputsContainer = document.getElementById(\"inputsContainer\");\nconst $85a5f86b715fe7db$var$generateMemeBtn = document.getElementById(\"generateMemeBtn\");\nconst $85a5f86b715fe7db$var$openVideoModalBtn = document.getElementById(\"openVideoModalBtn\");\nconst $85a5f86b715fe7db$var$downloadMemeBtn = document.getElementById(\"downloadMemeBtn\");\nconst $85a5f86b715fe7db$var$downloadMemePreview = document.getElementById(\"downloadMemePreview\");\nconst $85a5f86b715fe7db$var$webShareComponent = document.querySelector(\"web-share\");\nconst $85a5f86b715fe7db$var$galleryEl = document.getElementById(\"gallery\");\nconst $85a5f86b715fe7db$var$gallerySearchEl = document.getElementById(\"gallerySearch\");\nconst $85a5f86b715fe7db$var$galleryNoResultsEl = $85a5f86b715fe7db$var$galleryEl.querySelector(\".gallery__no-results\");\nconst $85a5f86b715fe7db$var$solidColorForm = document.getElementById(\"solidColorForm\");\nconst $85a5f86b715fe7db$var$uploadMethodEls = document.querySelectorAll(\".upload-method\");\nlet $85a5f86b715fe7db$var$selectedImage = null;\nlet $85a5f86b715fe7db$var$reqAnimFrame = null;\nconst $85a5f86b715fe7db$var$defaultTextOptions = {\n _isSettingsOpen: false,\n text: \"\",\n fillColor: \"#ffffff\",\n shadowColor: \"#000000\",\n font: \"Pressuru\",\n fontSize: 40,\n fontWeight: \"normal\",\n textAlign: \"center\",\n shadowBlur: 3,\n borderWidth: 1,\n offsetY: 0,\n offsetX: 0,\n rotate: 0,\n allCaps: true\n};\nlet $85a5f86b715fe7db$var$textOptions = [\n {\n ...$85a5f86b715fe7db$var$defaultTextOptions\n }\n];\nconst $85a5f86b715fe7db$var$generateMeme = async ()=>{\n const dataUrl = $85a5f86b715fe7db$var$canvas.toDataURL(\"image/png\");\n // Prepare download link\n const downloadLink = dataUrl.replace(\"image/png\", \"image/octet-stream\");\n $85a5f86b715fe7db$var$downloadMemeBtn.download = `${(0, $17004b28c97c1306$export$e2a22331486dcca0)(\"meme\")}.png`;\n $85a5f86b715fe7db$var$downloadMemeBtn.href = downloadLink;\n $85a5f86b715fe7db$var$downloadMemePreview.width = $85a5f86b715fe7db$var$canvas.width;\n $85a5f86b715fe7db$var$downloadMemePreview.height = $85a5f86b715fe7db$var$canvas.height;\n $85a5f86b715fe7db$var$downloadMemePreview.src = downloadLink;\n // Prepare for sharing file\n if ((0, $7a2aca835bb05064$export$c37129e465f64ef0)()) try {\n const file = await (0, $0374350c629f125f$export$6539e087749cf9d3)({\n url: dataUrl,\n filename: `${(0, $17004b28c97c1306$export$e2a22331486dcca0)(\"meme\")}.png`,\n mimeType: \"image/png\"\n }).catch((err)=>(0, $3969451ff60cb8d5$export$af04143326425dbd)(err.message, \"danger\"));\n if (file && (0, $7a2aca835bb05064$export$c37129e465f64ef0)({\n files: [\n file\n ]\n })) {\n $85a5f86b715fe7db$var$webShareComponent.shareFiles = [\n file\n ];\n $85a5f86b715fe7db$var$webShareComponent.hidden = false;\n }\n } catch (error) {\n console.error(error);\n }\n window.requestAnimationFrame(()=>{\n $85a5f86b715fe7db$var$downloadModal.open = true;\n });\n};\nconst $85a5f86b715fe7db$var$onImageLoaded = (evt)=>{\n const MAX_WIDTH = 4000;\n const MAX_HEIGHT = 3000;\n let width = evt.target.width;\n let height = evt.target.height;\n if (width > height) {\n if (width > MAX_WIDTH) {\n height *= MAX_WIDTH / width;\n width = MAX_WIDTH;\n }\n } else if (height > MAX_HEIGHT) {\n width *= MAX_HEIGHT / height;\n height = MAX_HEIGHT;\n }\n $85a5f86b715fe7db$var$canvas.width = width;\n $85a5f86b715fe7db$var$canvas.height = height;\n $85a5f86b715fe7db$var$selectedImage = evt.target;\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n $85a5f86b715fe7db$var$generateMemeBtn.disabled = false;\n $85a5f86b715fe7db$var$canvas.hidden = false;\n $85a5f86b715fe7db$var$instructionsEl.hidden = true;\n};\nconst $85a5f86b715fe7db$var$handleSolidColorFormInput = (evt)=>{\n const DEFAULT_WIDTH = 600;\n const DEFAULT_HEIGHT = 400;\n if (evt.target === $85a5f86b715fe7db$var$solidColorForm[\"canvasColor\"]) $85a5f86b715fe7db$var$selectedImage = evt.target.value;\n if (typeof $85a5f86b715fe7db$var$selectedImage === \"string\") {\n $85a5f86b715fe7db$var$canvas.width = Number($85a5f86b715fe7db$var$solidColorForm[\"canvasWidth\"].value) || DEFAULT_WIDTH;\n $85a5f86b715fe7db$var$canvas.height = Number($85a5f86b715fe7db$var$solidColorForm[\"canvasHeight\"].value) || DEFAULT_HEIGHT;\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n $85a5f86b715fe7db$var$generateMemeBtn.disabled = false;\n $85a5f86b715fe7db$var$canvas.hidden = false;\n $85a5f86b715fe7db$var$instructionsEl.hidden = true;\n }\n};\nconst $85a5f86b715fe7db$var$handleFileSelect = (file)=>{\n if (!file) return;\n const image = new Image();\n const reader = new FileReader();\n reader.addEventListener(\"load\", function(evt) {\n const data = evt.target.result;\n image.addEventListener(\"load\", $85a5f86b715fe7db$var$onImageLoaded);\n image.src = data;\n });\n reader.readAsDataURL(file);\n};\nconst $85a5f86b715fe7db$var$handleOpenVideoModalButtonClick = ()=>{\n $85a5f86b715fe7db$var$videoModal.open = true;\n};\nconst $85a5f86b715fe7db$var$handleTextPropChange = (element, index, prop)=>{\n if (element.type === \"checkbox\") $85a5f86b715fe7db$var$textOptions[index][prop] = element.checked;\n else if (element.type === \"number\") $85a5f86b715fe7db$var$textOptions[index][prop] = Number(element.value);\n else $85a5f86b715fe7db$var$textOptions[index][prop] = element.value;\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n};\nconst $85a5f86b715fe7db$var$handleAddTextboxBtnClick = ()=>{\n const textOptionsLength = $85a5f86b715fe7db$var$textOptions.length;\n const newTextBox = (0, $224fa2388dce65c4$export$293a4b86a6fe2398)(textOptionsLength, $85a5f86b715fe7db$var$defaultTextOptions);\n $85a5f86b715fe7db$var$textOptions.push({\n ...$85a5f86b715fe7db$var$defaultTextOptions\n });\n $85a5f86b715fe7db$var$inputsContainer.appendChild(newTextBox);\n newTextBox.querySelector('[data-input=\"text\"]').focus();\n};\nconst $85a5f86b715fe7db$var$handleImageUploadFromURL = async (evt)=>{\n evt.preventDefault();\n const form = evt.target;\n const submitButton = form.querySelector('button[type=\"submit\"]');\n const imageUrl = form[\"imageUrl\"].value;\n if (!imageUrl.trim()) return;\n submitButton.disabled = true;\n submitButton.querySelector(\".spinner\").hidden = false;\n submitButton.querySelector(\".label\").hidden = true;\n try {\n const file = await (0, $0374350c629f125f$export$6539e087749cf9d3)({\n url: imageUrl\n }).catch((err)=>(0, $3969451ff60cb8d5$export$af04143326425dbd)(err.message, \"danger\"));\n if (file) $85a5f86b715fe7db$var$handleFileSelect(file);\n } catch (err) {\n (0, $3969451ff60cb8d5$export$af04143326425dbd)(`Failed to load image from \"${imageUrl}\".`, \"danger\");\n } finally{\n submitButton.disabled = false;\n submitButton.querySelector(\".spinner\").hidden = true;\n submitButton.querySelector(\".label\").hidden = false;\n }\n};\nconst $85a5f86b715fe7db$var$moveText = (offsetDir, sign, index)=>()=>{\n const textBoxSection = document.querySelectorAll('[data-section=\"textBox\"]')[index];\n const offsetYInput = textBoxSection.querySelector('[data-input=\"offsetY\"]');\n const offsetXInput = textBoxSection.querySelector('[data-input=\"offsetX\"]');\n if (offsetDir === \"offsetY\") {\n if (sign === \"-\") $85a5f86b715fe7db$var$textOptions[index].offsetY -= 1;\n if (sign === \"+\") $85a5f86b715fe7db$var$textOptions[index].offsetY += 1;\n offsetYInput.value = $85a5f86b715fe7db$var$textOptions[index].offsetY;\n }\n if (offsetDir === \"offsetX\") {\n if (sign === \"-\") $85a5f86b715fe7db$var$textOptions[index].offsetX -= 1;\n if (sign === \"+\") $85a5f86b715fe7db$var$textOptions[index].offsetX += 1;\n offsetXInput.value = $85a5f86b715fe7db$var$textOptions[index].offsetX;\n }\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n $85a5f86b715fe7db$var$reqAnimFrame = requestAnimationFrame($85a5f86b715fe7db$var$moveText(offsetDir, sign, index));\n };\nconst $85a5f86b715fe7db$var$handleUploadMethodChange = (evt)=>{\n $85a5f86b715fe7db$var$uploadMethodEls.forEach((el)=>el.hidden = el.id !== evt.target.value);\n};\nconst $85a5f86b715fe7db$var$handleFileSelectClick = ()=>{\n if (typeof $85a5f86b715fe7db$var$dropzoneEl.openFileDialog === \"function\") $85a5f86b715fe7db$var$dropzoneEl.openFileDialog();\n};\nconst $85a5f86b715fe7db$var$handleDropFilesAccepted = (evt)=>{\n const [file] = evt.detail.acceptedFiles;\n if (file) $85a5f86b715fe7db$var$handleFileSelect(file);\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerInput = (evt)=>{\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let prop;\n if (element.matches('[data-input=\"text\"]')) prop = \"text\";\n else if (element.matches('[data-input=\"fillColor\"]')) prop = \"fillColor\";\n else if (element.matches('[data-input=\"shadowColor\"]')) prop = \"shadowColor\";\n else if (element.matches('[data-input=\"font\"]')) prop = \"font\";\n else if (element.matches('[data-input=\"fontSize\"]')) prop = \"fontSize\";\n else if (element.matches('[data-input=\"fontWeight\"]')) prop = \"fontWeight\";\n else if (element.matches('[data-input=\"textAlign\"]')) prop = \"textAlign\";\n else if (element.matches('[data-input=\"shadowBlur\"]')) prop = \"shadowBlur\";\n else if (element.matches('[data-input=\"offsetY\"]')) prop = \"offsetY\";\n else if (element.matches('[data-input=\"offsetX\"]')) prop = \"offsetX\";\n else if (element.matches('[data-input=\"rotate\"]')) prop = \"rotate\";\n else if (element.matches('[data-input=\"borderWidth\"]')) prop = \"borderWidth\";\n if (prop) $85a5f86b715fe7db$var$handleTextPropChange(element, index, prop);\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerChange = (evt)=>{\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let prop;\n if (element.matches('[data-input=\"allCaps\"]')) prop = \"allCaps\";\n if (prop) $85a5f86b715fe7db$var$handleTextPropChange(element, index, prop);\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerClick = (evt)=>{\n const element = evt.target;\n if (element.matches('[data-button=\"settings\"]')) {\n const textBoxIndex = element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\");\n const textBoxEls = document.querySelectorAll('[data-section=\"textBox\"]');\n textBoxEls.forEach((el, index)=>{\n const settingsEl = el.querySelector('[data-section=\"settings\"]');\n if (el.getAttribute(\"data-index\") === textBoxIndex) {\n settingsEl.hidden = !settingsEl.hidden;\n $85a5f86b715fe7db$var$textOptions[index]._isSettingsOpen = !$85a5f86b715fe7db$var$textOptions[index]._isSettingsOpen;\n } else {\n settingsEl.hidden = true;\n $85a5f86b715fe7db$var$textOptions[index]._isSettingsOpen = false;\n }\n });\n }\n if (element.matches('[data-button=\"delete-text-box\"]')) {\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let confirm = true;\n if ($85a5f86b715fe7db$var$textOptions[index].text.trim()) confirm = window.confirm(\"Are you sure you want to remove this text box?\");\n if (confirm) {\n $85a5f86b715fe7db$var$textOptions = (0, $4af3d380d1884504$export$30a014203d0d7e4f)($85a5f86b715fe7db$var$textOptions, index);\n $85a5f86b715fe7db$var$inputsContainer.querySelectorAll('[data-section=\"textBox\"]').forEach((el)=>el.remove());\n $85a5f86b715fe7db$var$textOptions.forEach((item, index)=>$85a5f86b715fe7db$var$inputsContainer.appendChild((0, $224fa2388dce65c4$export$293a4b86a6fe2398)(index, item)));\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n }\n }\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerPointerdown = (evt)=>{\n const element = evt.target;\n const textBoxEl = element.closest('[data-section=\"textBox\"]');\n if (!textBoxEl) return;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton) return;\n const offsetDir = element.getAttribute(\"data-move\");\n const sign = element.getAttribute(\"data-sign\");\n $85a5f86b715fe7db$var$reqAnimFrame = requestAnimationFrame($85a5f86b715fe7db$var$moveText(offsetDir, sign, index));\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerPointerup = (evt)=>{\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton) return;\n cancelAnimationFrame($85a5f86b715fe7db$var$reqAnimFrame);\n $85a5f86b715fe7db$var$reqAnimFrame = null;\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerPointerout = (evt)=>{\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton || !$85a5f86b715fe7db$var$reqAnimFrame) return;\n cancelAnimationFrame($85a5f86b715fe7db$var$reqAnimFrame);\n $85a5f86b715fe7db$var$reqAnimFrame = null;\n};\nconst $85a5f86b715fe7db$var$handleGalleryClick = async (evt)=>{\n const button = evt.target.closest(\"button\");\n if (!button) return;\n const img = button.querySelector(\"img\");\n try {\n const file = await (0, $0374350c629f125f$export$6539e087749cf9d3)({\n url: img.src\n }).catch((err)=>(0, $3969451ff60cb8d5$export$af04143326425dbd)(err.message, \"danger\"));\n if (file) $85a5f86b715fe7db$var$handleFileSelect(file);\n } catch (err) {\n (0, $3969451ff60cb8d5$export$af04143326425dbd)(`Failed to load image: \"${img.alt}\".`, \"danger\");\n }\n};\nconst $85a5f86b715fe7db$var$handleGallerySearchInput = (evt)=>{\n const query = evt.target.value.toLowerCase().trim();\n const galleryItems = $85a5f86b715fe7db$var$galleryEl.querySelectorAll(\"button\");\n galleryItems.forEach((item)=>{\n const alt = (item.querySelector(\"img\").getAttribute(\"alt\") || \"\").toLowerCase();\n item.hidden = !alt.includes(query);\n });\n $85a5f86b715fe7db$var$galleryNoResultsEl.hidden = !!$85a5f86b715fe7db$var$galleryEl.querySelector(\"button:not([hidden])\");\n};\nconst $85a5f86b715fe7db$var$handleWebShareError = ()=>{\n $85a5f86b715fe7db$var$downloadModal.open = false;\n (0, $3969451ff60cb8d5$export$af04143326425dbd)(\"There was an error while trying to share your meme.\", \"danger\");\n};\nconst $85a5f86b715fe7db$var$handleCapturePhotoError = (evt)=>{\n console.error(evt.detail.error);\n (0, $3969451ff60cb8d5$export$af04143326425dbd)(evt.detail.error.message, \"danger\");\n};\nconst $85a5f86b715fe7db$var$handleCapturePhotoSuccess = (evt)=>{\n $85a5f86b715fe7db$var$videoModal.open = false;\n const image = new Image();\n image.addEventListener(\"load\", $85a5f86b715fe7db$var$onImageLoaded);\n image.src = evt.detail.dataURI;\n};\nconst $85a5f86b715fe7db$var$handleModalOpen = (evt)=>{\n if (evt.target.id === \"videoModal\") {\n const capturePhotoComponent = $85a5f86b715fe7db$var$videoModal.querySelector(\"capture-photo\");\n if (capturePhotoComponent && typeof capturePhotoComponent.startVideoStream === \"function\") capturePhotoComponent.startVideoStream();\n }\n};\nconst $85a5f86b715fe7db$var$handleModalClose = (evt)=>{\n if (evt.target.id === \"videoModal\") {\n const capturePhotoComponent = $85a5f86b715fe7db$var$videoModal.querySelector(\"capture-photo\");\n if (capturePhotoComponent && typeof capturePhotoComponent.stopVideoStream === \"function\") capturePhotoComponent.stopVideoStream();\n }\n};\n$85a5f86b715fe7db$var$fileSelectBtn.addEventListener(\"click\", $85a5f86b715fe7db$var$handleFileSelectClick);\n$85a5f86b715fe7db$var$openVideoModalBtn.addEventListener(\"click\", $85a5f86b715fe7db$var$handleOpenVideoModalButtonClick);\n$85a5f86b715fe7db$var$addTextboxBtn.addEventListener(\"click\", $85a5f86b715fe7db$var$handleAddTextboxBtnClick);\n$85a5f86b715fe7db$var$generateMemeBtn.addEventListener(\"click\", $85a5f86b715fe7db$var$generateMeme);\n$85a5f86b715fe7db$var$downloadMemeBtn.addEventListener(\"click\", ()=>$85a5f86b715fe7db$var$downloadModal.open = false);\n$85a5f86b715fe7db$var$imageUrlForm.addEventListener(\"submit\", $85a5f86b715fe7db$var$handleImageUploadFromURL);\n$85a5f86b715fe7db$var$dropzoneEl.addEventListener(\"files-dropzone-drop-accepted\", $85a5f86b715fe7db$var$handleDropFilesAccepted);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"input\", $85a5f86b715fe7db$var$handleInputsContainerInput);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"change\", $85a5f86b715fe7db$var$handleInputsContainerChange);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"click\", $85a5f86b715fe7db$var$handleInputsContainerClick);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"pointerdown\", $85a5f86b715fe7db$var$handleInputsContainerPointerdown);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"pointerup\", $85a5f86b715fe7db$var$handleInputsContainerPointerup);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"pointerout\", $85a5f86b715fe7db$var$handleInputsContainerPointerout);\n$85a5f86b715fe7db$var$imageUploadMethodSelect.addEventListener(\"change\", $85a5f86b715fe7db$var$handleUploadMethodChange);\n$85a5f86b715fe7db$var$galleryEl.addEventListener(\"click\", $85a5f86b715fe7db$var$handleGalleryClick);\n$85a5f86b715fe7db$var$gallerySearchEl.addEventListener(\"input\", $85a5f86b715fe7db$var$handleGallerySearchInput);\n$85a5f86b715fe7db$var$solidColorForm.addEventListener(\"input\", $85a5f86b715fe7db$var$handleSolidColorFormInput);\ndocument.addEventListener(\"web-share:error\", $85a5f86b715fe7db$var$handleWebShareError);\ndocument.addEventListener(\"capture-photo:error\", $85a5f86b715fe7db$var$handleCapturePhotoError);\ndocument.addEventListener(\"capture-photo:success\", $85a5f86b715fe7db$var$handleCapturePhotoSuccess);\ndocument.addEventListener(\"me-open\", $85a5f86b715fe7db$var$handleModalOpen);\ndocument.addEventListener(\"me-close\", $85a5f86b715fe7db$var$handleModalClose);\n$85a5f86b715fe7db$var$galleryEl.querySelectorAll(\"button > img\")?.forEach((image)=>{\n image.setAttribute(\"title\", image.getAttribute(\"alt\"));\n});\n$85a5f86b715fe7db$var$textOptions.forEach((item, index)=>{\n $85a5f86b715fe7db$var$inputsContainer.appendChild((0, $224fa2388dce65c4$export$293a4b86a6fe2398)(index, item));\n});\n$85a5f86b715fe7db$var$dropzoneEl.accept = (0, $65136e012e05e2d7$export$63e7bed68b07a85c);\n(0, $56b863c8b6be7003$export$6874249d87f2602a).forEach(({ name: name, path: path, style: style, weight: weight })=>{\n (0, $56b863c8b6be7003$export$59eceaef0c7797b2)(name, path, {\n style: style,\n weight: weight\n });\n});\n\n\n//# sourceMappingURL=index.671cb7f2.js.map\n","\"use strict\";\n\nvar mapping = new Map();\nfunction register(baseUrl, manifest) {\n for (var i = 0; i < manifest.length - 1; i += 2) {\n mapping.set(manifest[i], {\n baseUrl: baseUrl,\n path: manifest[i + 1]\n });\n }\n}\nfunction resolve(id) {\n var resolved = mapping.get(id);\n if (resolved == null) {\n throw new Error('Could not resolve bundle with id ' + id);\n }\n return new URL(resolved.path, resolved.baseUrl).toString();\n}\nmodule.exports.register = register;\nmodule.exports.resolve = resolve;","require('./helpers/bundle-manifest').register(new __parcel__URL__(\"\").toString(),JSON.parse(\"[\\\"eq2Ey\\\",\\\"index.671cb7f2.js\\\",\\\"9PqYx\\\",\\\"Pressuru.684952ea.ttf\\\",\\\"hr5Pp\\\",\\\"Oswald-Regular.89ec7d89.ttf\\\",\\\"5TebC\\\",\\\"Oswald-Bold.0f6a7ca6.ttf\\\",\\\"3ENF9\\\",\\\"Roboto-Regular.ca197847.ttf\\\",\\\"5yAXK\\\",\\\"Roboto-Bold.fdb9b54a.ttf\\\",\\\"k2KZ9\\\",\\\"RobotoCondensed-Regular.d585f5c7.ttf\\\",\\\"4h4UX\\\",\\\"RobotoCondensed-Bold.e1f96d4b.ttf\\\",\\\"8pomG\\\",\\\"CourierPrime-Regular.3a25a501.ttf\\\",\\\"l2v76\\\",\\\"CourierPrime-Bold.3d6bf689.ttf\\\",\\\"eKMWr\\\",\\\"OpenSans-Regular.edf9e01b.ttf\\\",\\\"dXO1Z\\\",\\\"OpenSans-Bold.8fceb72b.ttf\\\",\\\"9FH7D\\\",\\\"index.4e55d6a2.css\\\"]\"));","import { isWebShareSupported } from '@georapbox/web-share-element/dist/is-web-share-supported.js';\nimport '@georapbox/web-share-element/dist/web-share-defined.js';\nimport '@georapbox/capture-photo-element/dist/capture-photo-defined.js';\nimport '@georapbox/modal-element/dist/modal-element-defined.js';\nimport '@georapbox/files-dropzone-element/dist/files-dropzone-defined.js';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport '../css/main.css';\nimport { arrayRemove } from './utils/array-remove.js';\nimport { uid } from './utils/uid.js';\nimport { ACCEPTED_MIME_TYPES } from './constants.js';\nimport { customFonts, loadCustomFont } from './custom-fonts.js';\nimport { fileFromUrl } from './file-from-url.js';\nimport { toastAlert } from './toast-alert.js';\nimport { createTextBox } from './create-text-box.js';\nimport { drawCanvas } from './draw-canvas.js';\n\nconst videoModal = document.getElementById('videoModal');\nconst downloadModal = document.getElementById('downloadModal');\nconst canvas = document.getElementById('canvas');\nconst dropzoneEl = document.querySelector('files-dropzone');\nconst instructionsEl = document.getElementById('instructions');\nconst ctx = canvas.getContext('2d');\nconst imageUploadMethodSelect = document.getElementById('imageUploadMethodSelect');\nconst fileSelectBtn = document.getElementById('fileSelectBtn');\nconst imageUrlForm = document.getElementById('imageUrlForm');\nconst addTextboxBtn = document.getElementById('addTextboxBtn');\nconst inputsContainer = document.getElementById('inputsContainer');\nconst generateMemeBtn = document.getElementById('generateMemeBtn');\nconst openVideoModalBtn = document.getElementById('openVideoModalBtn');\nconst downloadMemeBtn = document.getElementById('downloadMemeBtn');\nconst downloadMemePreview = document.getElementById('downloadMemePreview');\nconst webShareComponent = document.querySelector('web-share');\nconst galleryEl = document.getElementById('gallery');\nconst gallerySearchEl = document.getElementById('gallerySearch');\nconst galleryNoResultsEl = galleryEl.querySelector('.gallery__no-results');\nconst solidColorForm = document.getElementById('solidColorForm');\nconst uploadMethodEls = document.querySelectorAll('.upload-method');\nlet selectedImage = null;\nlet reqAnimFrame = null;\n\nconst defaultTextOptions = {\n _isSettingsOpen: false,\n text: '',\n fillColor: '#ffffff',\n shadowColor: '#000000',\n font: 'Pressuru',\n fontSize: 40,\n fontWeight: 'normal',\n textAlign: 'center',\n shadowBlur: 3,\n borderWidth: 1,\n offsetY: 0,\n offsetX: 0,\n rotate: 0,\n allCaps: true\n};\n\nlet textOptions = [\n { ...defaultTextOptions }\n];\n\nconst generateMeme = async () => {\n const dataUrl = canvas.toDataURL('image/png');\n\n // Prepare download link\n const downloadLink = dataUrl.replace('image/png', 'image/octet-stream');\n downloadMemeBtn.download = `${uid('meme')}.png`;\n downloadMemeBtn.href = downloadLink;\n downloadMemePreview.width = canvas.width;\n downloadMemePreview.height = canvas.height;\n downloadMemePreview.src = downloadLink;\n\n // Prepare for sharing file\n if (isWebShareSupported()) {\n try {\n const file = await fileFromUrl({\n url: dataUrl,\n filename: `${uid('meme')}.png`,\n mimeType: 'image/png'\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file && isWebShareSupported({ files: [file] })) {\n webShareComponent.shareFiles = [file];\n webShareComponent.hidden = false;\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n window.requestAnimationFrame(() => {\n downloadModal.open = true;\n });\n};\n\nconst onImageLoaded = evt => {\n const MAX_WIDTH = 4000;\n const MAX_HEIGHT = 3000;\n let width = evt.target.width;\n let height = evt.target.height;\n\n if (width > height) {\n if (width > MAX_WIDTH) {\n height *= MAX_WIDTH / width;\n width = MAX_WIDTH;\n }\n } else {\n if (height > MAX_HEIGHT) {\n width *= MAX_HEIGHT / height;\n height = MAX_HEIGHT;\n }\n }\n canvas.width = width;\n canvas.height = height;\n\n selectedImage = evt.target;\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n generateMemeBtn.disabled = false;\n canvas.hidden = false;\n instructionsEl.hidden = true;\n};\n\nconst handleSolidColorFormInput = evt => {\n const DEFAULT_WIDTH = 600;\n const DEFAULT_HEIGHT = 400;\n\n if (evt.target === solidColorForm['canvasColor']) {\n selectedImage = evt.target.value;\n }\n\n if (typeof selectedImage === 'string') {\n canvas.width = Number(solidColorForm['canvasWidth'].value) || DEFAULT_WIDTH;\n canvas.height = Number(solidColorForm['canvasHeight'].value) || DEFAULT_HEIGHT;\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n generateMemeBtn.disabled = false;\n canvas.hidden = false;\n instructionsEl.hidden = true;\n }\n};\n\nconst handleFileSelect = file => {\n if (!file) {\n return;\n }\n\n const image = new Image();\n const reader = new FileReader();\n\n reader.addEventListener('load', function (evt) {\n const data = evt.target.result;\n image.addEventListener('load', onImageLoaded);\n image.src = data;\n });\n\n reader.readAsDataURL(file);\n};\n\nconst handleOpenVideoModalButtonClick = () => {\n videoModal.open = true;\n};\n\nconst handleTextPropChange = (element, index, prop) => {\n if (element.type === 'checkbox') {\n textOptions[index][prop] = element.checked;\n } else if (element.type === 'number') {\n textOptions[index][prop] = Number(element.value);\n } else {\n textOptions[index][prop] = element.value;\n }\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n};\n\nconst handleAddTextboxBtnClick = () => {\n const textOptionsLength = textOptions.length;\n const newTextBox = createTextBox(textOptionsLength, defaultTextOptions);\n\n textOptions.push({ ...defaultTextOptions });\n inputsContainer.appendChild(newTextBox);\n newTextBox.querySelector('[data-input=\"text\"]').focus();\n};\n\nconst handleImageUploadFromURL = async evt => {\n evt.preventDefault();\n\n const form = evt.target;\n const submitButton = form.querySelector('button[type=\"submit\"]');\n const imageUrl = form['imageUrl'].value;\n\n if (!imageUrl.trim()) {\n return;\n }\n\n submitButton.disabled = true;\n submitButton.querySelector('.spinner').hidden = false;\n submitButton.querySelector('.label').hidden = true;\n\n try {\n const file = await fileFromUrl({\n url: imageUrl\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file) {\n handleFileSelect(file);\n }\n } catch (err) {\n toastAlert(`Failed to load image from \"${imageUrl}\".`, 'danger');\n } finally {\n submitButton.disabled = false;\n submitButton.querySelector('.spinner').hidden = true;\n submitButton.querySelector('.label').hidden = false;\n }\n};\n\nconst moveText = (offsetDir, sign, index) => () => {\n const textBoxSection = document.querySelectorAll('[data-section=\"textBox\"]')[index];\n const offsetYInput = textBoxSection.querySelector('[data-input=\"offsetY\"]');\n const offsetXInput = textBoxSection.querySelector('[data-input=\"offsetX\"]');\n\n if (offsetDir === 'offsetY') {\n if (sign === '-') {\n textOptions[index].offsetY -= 1;\n }\n\n if (sign === '+') {\n textOptions[index].offsetY += 1;\n }\n\n offsetYInput.value = textOptions[index].offsetY;\n }\n\n if (offsetDir === 'offsetX') {\n if (sign === '-') {\n textOptions[index].offsetX -= 1;\n }\n\n if (sign === '+') {\n textOptions[index].offsetX += 1;\n }\n\n offsetXInput.value = textOptions[index].offsetX;\n }\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n reqAnimFrame = requestAnimationFrame(moveText(offsetDir, sign, index));\n};\n\nconst handleUploadMethodChange = evt => {\n uploadMethodEls.forEach(el => el.hidden = el.id !== evt.target.value);\n};\n\nconst handleFileSelectClick = () => {\n if (typeof dropzoneEl.openFileDialog === 'function') {\n dropzoneEl.openFileDialog();\n }\n};\n\nconst handleDropFilesAccepted = evt => {\n const [file] = evt.detail.acceptedFiles;\n\n if (file) {\n handleFileSelect(file);\n }\n};\n\nconst handleInputsContainerInput = evt => {\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let prop;\n\n if (element.matches('[data-input=\"text\"]')) {\n prop = 'text';\n } else if (element.matches('[data-input=\"fillColor\"]')) {\n prop = 'fillColor';\n } else if (element.matches('[data-input=\"shadowColor\"]')) {\n prop = 'shadowColor';\n } else if (element.matches('[data-input=\"font\"]')) {\n prop = 'font';\n } else if (element.matches('[data-input=\"fontSize\"]')) {\n prop = 'fontSize';\n } else if (element.matches('[data-input=\"fontWeight\"]')) {\n prop = 'fontWeight';\n } else if (element.matches('[data-input=\"textAlign\"]')) {\n prop = 'textAlign';\n } else if (element.matches('[data-input=\"shadowBlur\"]')) {\n prop = 'shadowBlur';\n } else if (element.matches('[data-input=\"offsetY\"]')) {\n prop = 'offsetY';\n } else if (element.matches('[data-input=\"offsetX\"]')) {\n prop = 'offsetX';\n } else if (element.matches('[data-input=\"rotate\"]')) {\n prop = 'rotate';\n } else if (element.matches('[data-input=\"borderWidth\"]')) {\n prop = 'borderWidth';\n }\n\n if (prop) {\n handleTextPropChange(element, index, prop);\n }\n};\n\nconst handleInputsContainerChange = evt => {\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let prop;\n\n if (element.matches('[data-input=\"allCaps\"]')) {\n prop = 'allCaps';\n }\n\n if (prop) {\n handleTextPropChange(element, index, prop);\n }\n};\n\nconst handleInputsContainerClick = evt => {\n const element = evt.target;\n\n if (element.matches('[data-button=\"settings\"]')) {\n const textBoxIndex = element.closest('[data-section=\"textBox\"]').getAttribute('data-index');\n const textBoxEls = document.querySelectorAll('[data-section=\"textBox\"]');\n\n textBoxEls.forEach((el, index) => {\n const settingsEl = el.querySelector('[data-section=\"settings\"]');\n\n if (el.getAttribute('data-index') === textBoxIndex) {\n settingsEl.hidden = !settingsEl.hidden;\n textOptions[index]._isSettingsOpen = !textOptions[index]._isSettingsOpen;\n } else {\n settingsEl.hidden = true;\n textOptions[index]._isSettingsOpen = false;\n }\n });\n }\n\n if (element.matches('[data-button=\"delete-text-box\"]')) {\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let confirm = true;\n\n if (textOptions[index].text.trim()) {\n confirm = window.confirm('Are you sure you want to remove this text box?');\n }\n\n if (confirm) {\n textOptions = arrayRemove(textOptions, index);\n inputsContainer.querySelectorAll('[data-section=\"textBox\"]').forEach(el => el.remove());\n textOptions.forEach((item, index) => inputsContainer.appendChild(createTextBox(index, item)));\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n }\n }\n};\n\nconst handleInputsContainerPointerdown = evt => {\n const element = evt.target;\n const textBoxEl = element.closest('[data-section=\"textBox\"]');\n\n if (!textBoxEl) {\n return;\n }\n\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton) {\n return;\n }\n\n const offsetDir = element.getAttribute('data-move');\n const sign = element.getAttribute('data-sign');\n\n reqAnimFrame = requestAnimationFrame(moveText(offsetDir, sign, index));\n};\n\nconst handleInputsContainerPointerup = evt => {\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton) {\n return;\n }\n\n cancelAnimationFrame(reqAnimFrame);\n reqAnimFrame = null;\n};\n\nconst handleInputsContainerPointerout = evt => {\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton || !reqAnimFrame) {\n return;\n }\n\n cancelAnimationFrame(reqAnimFrame);\n reqAnimFrame = null;\n};\n\nconst handleGalleryClick = async evt => {\n const button = evt.target.closest('button');\n\n if (!button) {\n return;\n }\n\n const img = button.querySelector('img');\n\n try {\n const file = await fileFromUrl({\n url: img.src\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file) {\n handleFileSelect(file);\n }\n } catch (err) {\n toastAlert(`Failed to load image: \"${img.alt}\".`, 'danger');\n }\n};\n\nconst handleGallerySearchInput = evt => {\n const query = evt.target.value.toLowerCase().trim();\n const galleryItems = galleryEl.querySelectorAll('button');\n\n galleryItems.forEach(item => {\n const alt = (item.querySelector('img').getAttribute('alt') || '').toLowerCase();\n item.hidden = !alt.includes(query);\n });\n\n galleryNoResultsEl.hidden = !!galleryEl.querySelector('button:not([hidden])');\n};\n\nconst handleWebShareError = () => {\n downloadModal.open = false;\n toastAlert('There was an error while trying to share your meme.', 'danger');\n};\n\nconst handleCapturePhotoError = evt => {\n console.error(evt.detail.error);\n toastAlert(evt.detail.error.message, 'danger');\n};\n\nconst handleCapturePhotoSuccess = evt => {\n videoModal.open = false;\n const image = new Image();\n image.addEventListener('load', onImageLoaded);\n image.src = evt.detail.dataURI;\n};\n\nconst handleModalOpen = evt => {\n if (evt.target.id === 'videoModal') {\n const capturePhotoComponent = videoModal.querySelector('capture-photo');\n\n if (capturePhotoComponent && typeof capturePhotoComponent.startVideoStream === 'function') {\n capturePhotoComponent.startVideoStream();\n }\n }\n};\n\nconst handleModalClose = evt => {\n if (evt.target.id === 'videoModal') {\n const capturePhotoComponent = videoModal.querySelector('capture-photo');\n\n if (capturePhotoComponent && typeof capturePhotoComponent.stopVideoStream === 'function') {\n capturePhotoComponent.stopVideoStream();\n }\n }\n};\n\nfileSelectBtn.addEventListener('click', handleFileSelectClick);\nopenVideoModalBtn.addEventListener('click', handleOpenVideoModalButtonClick);\naddTextboxBtn.addEventListener('click', handleAddTextboxBtnClick);\ngenerateMemeBtn.addEventListener('click', generateMeme);\ndownloadMemeBtn.addEventListener('click', () => downloadModal.open = false);\nimageUrlForm.addEventListener('submit', handleImageUploadFromURL);\ndropzoneEl.addEventListener('files-dropzone-drop-accepted', handleDropFilesAccepted);\ninputsContainer.addEventListener('input', handleInputsContainerInput);\ninputsContainer.addEventListener('change', handleInputsContainerChange);\ninputsContainer.addEventListener('click', handleInputsContainerClick);\ninputsContainer.addEventListener('pointerdown', handleInputsContainerPointerdown);\ninputsContainer.addEventListener('pointerup', handleInputsContainerPointerup);\ninputsContainer.addEventListener('pointerout', handleInputsContainerPointerout);\nimageUploadMethodSelect.addEventListener('change', handleUploadMethodChange);\ngalleryEl.addEventListener('click', handleGalleryClick);\ngallerySearchEl.addEventListener('input', handleGallerySearchInput);\nsolidColorForm.addEventListener('input', handleSolidColorFormInput);\ndocument.addEventListener('web-share:error', handleWebShareError);\ndocument.addEventListener('capture-photo:error', handleCapturePhotoError);\ndocument.addEventListener('capture-photo:success', handleCapturePhotoSuccess);\ndocument.addEventListener('me-open', handleModalOpen);\ndocument.addEventListener('me-close', handleModalClose);\n\ngalleryEl.querySelectorAll('button > img')?.forEach(image => {\n image.setAttribute('title', image.getAttribute('alt'));\n});\n\ntextOptions.forEach((item, index) => {\n inputsContainer.appendChild(createTextBox(index, item));\n});\n\ndropzoneEl.accept = ACCEPTED_MIME_TYPES;\n\ncustomFonts.forEach(({ name, path, style, weight }) => {\n loadCustomFont(name, path, { style, weight });\n});\n","function a(a){return null!==a&&\"object\"==typeof a?\"share\"in navigator&&\"canShare\"in navigator&&navigator.canShare(a):\"share\"in navigator}export{a as isWebShareSupported};\n//# sourceMappingURL=is-web-share-supported.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $e179325634270afd$exports = {};\n\n$parcel$export($e179325634270afd$exports, \"WebShare\", function () { return $e179325634270afd$export$30b344bef3e55b67; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ /**\n * Represents the data to share.\n *\n * @typedef {Object} ShareData\n * @property {string} [url] - The URL to share.\n * @property {string} [title] - The title to share.\n * @property {string} [text] - The text to share.\n * @property {File[]} [files] - The files to share.\n */ const $e179325634270afd$var$styles = /* css */ `\n :host {\n display: inline-block;\n }\n`;\nconst $e179325634270afd$var$template = document.createElement(\"template\");\n$e179325634270afd$var$template.innerHTML = /* html */ `\n \n \n`;\n/**\n * @summary A custom element that provides a button to share content.\n * @documentation https://github.com/georapbox/web-share-element\n *\n * @tagname web-share - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {boolean} disabled - Indicates whether the button is disabled.\n * @property {string} shareUrl - The URL to share.\n * @property {string} shareTitle - The title to share.\n * @property {string} shareText - The text to share.\n * @property {File[]} shareFiles - The files to share.\n *\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {string} share-url - Reflects the shareUrl property.\n * @attribute {string} share-title - Reflects the shareTitle property.\n * @attribute {string} share-text - Reflects the shareText property.\n *\n * @slot button - The button to share content.\n * @slot button-content - The content of the button to share content.\n *\n * @csspart button - The button to share content.\n * @csspart button--disabled - The button to share content when disabled.\n *\n * @event web-share:success - Fired when the share operation is successful.\n * @event web-share:abort - Fired when the share operation is aborted.\n * @event web-share:error - Fired when the share operation fails.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method share - Instance method. Shares the shareable data taken from the element's properties.\n */ class $e179325634270afd$export$30b344bef3e55b67 extends HTMLElement {\n /** @type {Nullable} */ #buttonSlot;\n /** @type {Nullable} */ #buttonEl;\n /** @type {File[]} */ #files = [];\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\",\n delegatesFocus: true\n });\n shadowRoot.appendChild($e179325634270afd$var$template.content.cloneNode(true));\n }\n this.#buttonSlot = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null;\n this.#buttonEl = this.#getButton();\n }\n static get observedAttributes() {\n return [\n \"disabled\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"disabled\" && oldValue !== newValue && this.#buttonEl) {\n this.#buttonEl.toggleAttribute(\"disabled\", this.disabled);\n this.#buttonEl.setAttribute(\"aria-disabled\", this.disabled.toString());\n if (this.#buttonEl.part && this.#buttonEl.part.contains(\"button\")) this.#buttonEl.part.toggle(\"button--disabled\", this.disabled);\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"shareUrl\");\n this.#upgradeProperty(\"shareTitle\");\n this.#upgradeProperty(\"shareText\");\n this.#upgradeProperty(\"shareFiles\");\n this.#upgradeProperty(\"disabled\");\n this.#buttonSlot?.addEventListener(\"slotchange\", this.#handleSlotChange);\n this.#buttonEl?.addEventListener(\"click\", this.#handleClick);\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#buttonSlot?.removeEventListener(\"slotchange\", this.#handleSlotChange);\n this.#buttonEl?.removeEventListener(\"click\", this.#handleClick);\n }\n /**\n * @type {boolean} - Indicates whether the button is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */ get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n this.toggleAttribute(\"disabled\", !!value);\n }\n /**\n * @type {string} - The URL to share.\n * @attribute share-url - Reflects the shareUrl property.\n */ get shareUrl() {\n return this.getAttribute(\"share-url\") || \"\";\n }\n set shareUrl(value) {\n this.setAttribute(\"share-url\", value);\n }\n /**\n * @type {string} - The title to share.\n * @attribute share-title - Reflects the shareTitle property.\n */ get shareTitle() {\n return this.getAttribute(\"share-title\") || \"\";\n }\n set shareTitle(value) {\n this.setAttribute(\"share-title\", value);\n }\n /**\n * @type {string} - The text to share.\n * @attribute share-text - Reflects the shareText property.\n */ get shareText() {\n return this.getAttribute(\"share-text\") || \"\";\n }\n set shareText(value) {\n this.setAttribute(\"share-text\", value);\n }\n /**\n * @type {File[]} - The files to share.\n */ get shareFiles() {\n return this.#files;\n }\n set shareFiles(value) {\n if (Array.isArray(value) && value.length > 0) this.#files = value;\n }\n /**\n * Shares the shareable data taken from the element's properties.\n *\n * @returns {Promise} - A promise that resolves when the share operation is complete.\n */ async share() {\n if (this.disabled) return;\n try {\n /** @type {ShareData} */ const shareData = {};\n if (this.shareUrl) shareData.url = this.shareUrl;\n if (this.shareTitle) shareData.title = this.shareTitle;\n if (this.shareText) shareData.text = this.shareText;\n if (Array.isArray(this.shareFiles) && this.shareFiles.length > 0 && navigator.canShare && navigator.canShare({\n files: this.shareFiles\n })) shareData.files = this.shareFiles;\n await navigator.share(shareData);\n this.dispatchEvent(new CustomEvent(\"web-share:success\", {\n bubbles: true,\n composed: true,\n detail: {\n shareData: shareData\n }\n }));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n this.dispatchEvent(new CustomEvent(\"web-share:abort\", {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n return;\n }\n this.dispatchEvent(new CustomEvent(\"web-share:error\", {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n }\n /**\n * Handles the click event on the button.\n *\n * @param {any} evt - The event object.\n */ #handleClick = (evt)=>{\n evt.preventDefault();\n if (this.disabled) return;\n this.share();\n };\n /**\n * Handles the slotchange event on the button slot.\n *\n * @param {any} evt - The event object.\n */ #handleSlotChange = (evt)=>{\n if (evt.target && evt.target.name === \"button\") {\n this.#buttonEl?.removeEventListener(\"click\", this.#handleClick);\n this.#buttonEl = this.#getButton();\n if (this.#buttonEl) {\n this.#buttonEl.addEventListener(\"click\", this.#handleClick);\n if (this.#buttonEl.nodeName !== \"BUTTON\" && !this.#buttonEl.hasAttribute(\"role\")) this.#buttonEl.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Returns the button element from the button slot.\n *\n * @returns {Nullable} - The button element.\n */ #getButton() {\n if (!this.#buttonSlot) return null;\n return this.#buttonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"button\";\n }) || null;\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'shareUrl' | 'shareTitle' | 'shareText' | 'shareFiles' | 'disabled'} prop - The property name to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n static defineCustomElement(elementName = \"web-share\") {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $e179325634270afd$export$30b344bef3e55b67);\n }\n}\n\n\n(0, $e179325634270afd$export$30b344bef3e55b67).defineCustomElement();\n\n\nexport {$e179325634270afd$export$30b344bef3e55b67 as WebShare};\n//# sourceMappingURL=web-share-defined.js.map\n","// @ts-check\n\n/**\n * Check if Web Share API is supported by the platform.\n *\n * @param {import('./web-share').ShareData} [options]\n * @returns {boolean} Returns `true` if Web Share API is supported; otherwise `false`.\n */\nfunction isWebShareSupported(options) {\n if (options !== null && typeof options === 'object') {\n return 'share' in navigator && 'canShare' in navigator && navigator.canShare(options);\n }\n\n return 'share' in navigator;\n}\n\nexport { isWebShareSupported };\n","Object.defineProperty({},\"WebShare\",{get:function(){return s},set:void 0,enumerable:!0,configurable:!0});let t=`\n :host {\n display: inline-block;\n }\n`,e=document.createElement(\"template\");e.innerHTML=`\n \n \n`;class s extends HTMLElement{#t;#e;#s=[];constructor(){super(),this.shadowRoot||this.attachShadow({mode:\"open\",delegatesFocus:!0}).appendChild(e.content.cloneNode(!0)),this.#t=this.shadowRoot?.querySelector('slot[name=\"button\"]')||null,this.#e=this.#i()}static get observedAttributes(){return[\"disabled\"]}attributeChangedCallback(t,e,s){\"disabled\"===t&&e!==s&&this.#e&&(this.#e.toggleAttribute(\"disabled\",this.disabled),this.#e.setAttribute(\"aria-disabled\",this.disabled.toString()),this.#e.part&&this.#e.part.contains(\"button\")&&this.#e.part.toggle(\"button--disabled\",this.disabled))}connectedCallback(){this.#r(\"shareUrl\"),this.#r(\"shareTitle\"),this.#r(\"shareText\"),this.#r(\"shareFiles\"),this.#r(\"disabled\"),this.#t?.addEventListener(\"slotchange\",this.#a),this.#e?.addEventListener(\"click\",this.#n)}disconnectedCallback(){this.#t?.removeEventListener(\"slotchange\",this.#a),this.#e?.removeEventListener(\"click\",this.#n)}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(t){this.toggleAttribute(\"disabled\",!!t)}get shareUrl(){return this.getAttribute(\"share-url\")||\"\"}set shareUrl(t){this.setAttribute(\"share-url\",t)}get shareTitle(){return this.getAttribute(\"share-title\")||\"\"}set shareTitle(t){this.setAttribute(\"share-title\",t)}get shareText(){return this.getAttribute(\"share-text\")||\"\"}set shareText(t){this.setAttribute(\"share-text\",t)}get shareFiles(){return this.#s}set shareFiles(t){Array.isArray(t)&&t.length>0&&(this.#s=t)}async share(){if(!this.disabled)try{let t={};this.shareUrl&&(t.url=this.shareUrl),this.shareTitle&&(t.title=this.shareTitle),this.shareText&&(t.text=this.shareText),Array.isArray(this.shareFiles)&&this.shareFiles.length>0&&navigator.canShare&&navigator.canShare({files:this.shareFiles})&&(t.files=this.shareFiles),await navigator.share(t),this.dispatchEvent(new CustomEvent(\"web-share:success\",{bubbles:!0,composed:!0,detail:{shareData:t}}))}catch(t){if(t instanceof Error&&\"AbortError\"===t.name){this.dispatchEvent(new CustomEvent(\"web-share:abort\",{bubbles:!0,composed:!0,detail:{error:t}}));return}this.dispatchEvent(new CustomEvent(\"web-share:error\",{bubbles:!0,composed:!0,detail:{error:t}}))}}#n=t=>{t.preventDefault(),this.disabled||this.share()};#a=t=>{t.target&&\"button\"===t.target.name&&(this.#e?.removeEventListener(\"click\",this.#n),this.#e=this.#i(),this.#e&&(this.#e.addEventListener(\"click\",this.#n),\"BUTTON\"===this.#e.nodeName||this.#e.hasAttribute(\"role\")||this.#e.setAttribute(\"role\",\"button\")))};#i(){return this.#t&&this.#t.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"button\"===t.getAttribute(\"slot\"))||null}#r(t){if(Object.prototype.hasOwnProperty.call(this,t)){let e=this[t];delete this[t],this[t]=e}}static defineCustomElement(t=\"web-share\"){\"undefined\"==typeof window||window.customElements.get(t)||window.customElements.define(t,s)}}s.defineCustomElement();export{s as WebShare};\n//# sourceMappingURL=web-share-defined.js.map\n","import { WebShare } from './web-share.js';\n\nWebShare.defineCustomElement();\n\nexport { WebShare };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\n/**\n * Represents the data to share.\n *\n * @typedef {Object} ShareData\n * @property {string} [url] - The URL to share.\n * @property {string} [title] - The title to share.\n * @property {string} [text] - The text to share.\n * @property {File[]} [files] - The files to share.\n */\n\nconst styles = /* css */`\n :host {\n display: inline-block;\n }\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */ `\n \n \n`;\n\n/**\n * @summary A custom element that provides a button to share content.\n * @documentation https://github.com/georapbox/web-share-element\n *\n * @tagname web-share - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {boolean} disabled - Indicates whether the button is disabled.\n * @property {string} shareUrl - The URL to share.\n * @property {string} shareTitle - The title to share.\n * @property {string} shareText - The text to share.\n * @property {File[]} shareFiles - The files to share.\n *\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {string} share-url - Reflects the shareUrl property.\n * @attribute {string} share-title - Reflects the shareTitle property.\n * @attribute {string} share-text - Reflects the shareText property.\n *\n * @slot button - The button to share content.\n * @slot button-content - The content of the button to share content.\n *\n * @csspart button - The button to share content.\n * @csspart button--disabled - The button to share content when disabled.\n *\n * @event web-share:success - Fired when the share operation is successful.\n * @event web-share:abort - Fired when the share operation is aborted.\n * @event web-share:error - Fired when the share operation fails.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method share - Instance method. Shares the shareable data taken from the element's properties.\n */\nclass WebShare extends HTMLElement {\n /** @type {Nullable} */\n #buttonSlot;\n\n /** @type {Nullable} */\n #buttonEl;\n\n /** @type {File[]} */\n #files = [];\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open', delegatesFocus: true });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n this.#buttonSlot = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null;\n this.#buttonEl = this.#getButton();\n }\n\n static get observedAttributes() {\n return ['disabled'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'disabled' && oldValue !== newValue && this.#buttonEl) {\n this.#buttonEl.toggleAttribute('disabled', this.disabled);\n this.#buttonEl.setAttribute('aria-disabled', this.disabled.toString());\n\n if (this.#buttonEl.part && this.#buttonEl.part.contains('button')) {\n this.#buttonEl.part.toggle('button--disabled', this.disabled);\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('shareUrl');\n this.#upgradeProperty('shareTitle');\n this.#upgradeProperty('shareText');\n this.#upgradeProperty('shareFiles');\n this.#upgradeProperty('disabled');\n\n this.#buttonSlot?.addEventListener('slotchange', this.#handleSlotChange);\n this.#buttonEl?.addEventListener('click', this.#handleClick);\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#buttonSlot?.removeEventListener('slotchange', this.#handleSlotChange);\n this.#buttonEl?.removeEventListener('click', this.#handleClick);\n }\n\n /**\n * @type {boolean} - Indicates whether the button is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n set disabled(value) {\n this.toggleAttribute('disabled', !!value);\n }\n\n /**\n * @type {string} - The URL to share.\n * @attribute share-url - Reflects the shareUrl property.\n */\n get shareUrl() {\n return this.getAttribute('share-url') || '';\n }\n\n set shareUrl(value) {\n this.setAttribute('share-url', value);\n }\n\n /**\n * @type {string} - The title to share.\n * @attribute share-title - Reflects the shareTitle property.\n */\n get shareTitle() {\n return this.getAttribute('share-title') || '';\n }\n\n set shareTitle(value) {\n this.setAttribute('share-title', value);\n }\n\n /**\n * @type {string} - The text to share.\n * @attribute share-text - Reflects the shareText property.\n */\n get shareText() {\n return this.getAttribute('share-text') || '';\n }\n\n set shareText(value) {\n this.setAttribute('share-text', value);\n }\n\n /**\n * @type {File[]} - The files to share.\n */\n get shareFiles() {\n return this.#files;\n }\n\n set shareFiles(value) {\n if (Array.isArray(value) && value.length > 0) {\n this.#files = value;\n }\n }\n\n /**\n * Shares the shareable data taken from the element's properties.\n *\n * @returns {Promise} - A promise that resolves when the share operation is complete.\n */\n async share() {\n if (this.disabled) {\n return;\n }\n\n try {\n /** @type {ShareData} */\n const shareData = {};\n\n if (this.shareUrl) {\n shareData.url = this.shareUrl;\n }\n\n if (this.shareTitle) {\n shareData.title = this.shareTitle;\n }\n\n if (this.shareText) {\n shareData.text = this.shareText;\n }\n\n if (\n Array.isArray(this.shareFiles)\n && this.shareFiles.length > 0\n && navigator.canShare\n && navigator.canShare({ files: this.shareFiles })\n ) {\n shareData.files = this.shareFiles;\n }\n\n await navigator.share(shareData);\n\n this.dispatchEvent(new CustomEvent('web-share:success', {\n bubbles: true,\n composed: true,\n detail: { shareData }\n }));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.dispatchEvent(new CustomEvent('web-share:abort', {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n\n return;\n }\n\n this.dispatchEvent(new CustomEvent('web-share:error', {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n }\n\n /**\n * Handles the click event on the button.\n *\n * @param {any} evt - The event object.\n */\n #handleClick = evt => {\n evt.preventDefault();\n\n if (this.disabled) {\n return;\n }\n\n this.share();\n };\n\n /**\n * Handles the slotchange event on the button slot.\n *\n * @param {any} evt - The event object.\n */\n #handleSlotChange = evt => {\n if (evt.target && evt.target.name === 'button') {\n this.#buttonEl?.removeEventListener('click', this.#handleClick);\n this.#buttonEl = this.#getButton();\n\n if (this.#buttonEl) {\n this.#buttonEl.addEventListener('click', this.#handleClick);\n\n if (this.#buttonEl.nodeName !== 'BUTTON' && !this.#buttonEl.hasAttribute('role')) {\n this.#buttonEl.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Returns the button element from the button slot.\n *\n * @returns {Nullable} - The button element.\n */\n #getButton() {\n if (!this.#buttonSlot) {\n return null;\n }\n\n return this.#buttonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'button';\n }) || null;\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'shareUrl' | 'shareTitle' | 'shareText' | 'shareFiles' | 'disabled'} prop - The property name to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n static defineCustomElement(elementName = 'web-share') {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, WebShare);\n }\n }\n}\n\nexport { WebShare };\n","Object.defineProperty({},\"CapturePhoto\",{get:function(){return n},set:void 0,enumerable:!0,configurable:!0});let t=(t,e,i)=>(Number.isNaN(e)&&(e=0),Number.isNaN(i)&&(i=0),Math.min(Math.max(t,Math.min(e,i)),Math.max(e,i))),e=\"capture-photo\",i=`\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`,o=document.createElement(\"template\");o.innerHTML=`\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;class n extends HTMLElement{#t={};#e=null;#i=null;#o=null;#n=null;#a=null;#s=null;#r=null;#l=null;constructor(){super(),this.#t=this.getSupportedConstraints(),this.shadowRoot||this.attachShadow({mode:\"open\"}).appendChild(o.content.cloneNode(!0))}static get observedAttributes(){return[\"no-image\",\"facing-mode\",\"camera-resolution\",\"pan\",\"tilt\",\"zoom\"]}attributeChangedCallback(t,e,i){if(!this.isConnected)return;let o=this.getTrackCapabilities(),n=this.getTrackSettings();if(\"no-image\"===t&&e!==i&&this.#u(),\"facing-mode\"===t&&e!==i&&\"facingMode\"in this.#t){let t=[\"user\",\"environment\"].includes(this.facingMode||\"\");\"facingMode\"in n&&t&&(this.stopVideoStream(),this.startVideoStream())}if(\"camera-resolution\"===t&&e!==i&&\"string\"==typeof this.cameraResolution&&this.cameraResolution.trim().length>0){let[t=0,e=0]=this.cameraResolution.split(\"x\").map(t=>Number(t));if(t>0&&e>0&&\"width\"in o&&\"height\"in o){let i=!!(o.width?.min&&o.width?.max)&&t>=o?.width?.min&&t<=o?.width?.max,a=!!(o.height?.min&&o.height?.max)&&e>=o?.height?.min&&e<=o?.height?.max;\"width\"in n&&\"height\"in n&&i&&a&&(this.stopVideoStream(),this.startVideoStream())}}if(\"pan\"===t&&e!==i&&\"pan\"in this.#t){let t=!!(\"pan\"in o&&o.pan?.min&&o.pan?.max)&&this.pan>=o.pan.min&&this.pan<=o.pan.max;\"pan\"in n&&\"number\"==typeof this.pan&&t&&this.#h(\"pan\",this.pan)}if(\"tilt\"===t&&e!==i&&\"tilt\"in this.#t){let t=!!(\"tilt\"in o&&o.tilt?.min&&o.tilt?.max)&&this.tilt>=o.tilt.min&&this.tilt<=o.tilt.max;\"tilt\"in n&&\"number\"==typeof this.tilt&&t&&this.#h(\"tilt\",this.tilt)}if(\"zoom\"===t&&e!==i&&\"zoom\"in this.#t){let t=!!(\"zoom\"in o&&o.zoom?.min&&o.zoom?.max)&&this.zoom>=o.zoom.min&&this.zoom<=o.zoom.max;\"zoom\"in n&&\"number\"==typeof this.zoom&&t&&this.#h(\"zoom\",this.zoom)}}connectedCallback(){if(this.#d(\"autpoPlay\"),this.#d(\"noImage\"),this.#d(\"facingMode\"),this.#d(\"cameraResolution\"),this.#d(\"pan\"),this.#d(\"tilt\"),this.#d(\"zoom\"),this.#d(\"calculateFileSize\"),this.#i=this.shadowRoot?.querySelector(\"canvas\")||null,this.#o=this.shadowRoot?.getElementById(\"output\")||null,this.#n=this.shadowRoot?.querySelector(\"video\")||null,this.#a=this.shadowRoot?.querySelector('slot[name=\"capture-button\"]')||null,this.#s=this.#c(),this.#r=this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]')||null,this.#l=this.#m(),this.#n?.addEventListener(\"loadedmetadata\",this.#p),this.#a?.addEventListener(\"slotchange\",this.#g),this.#s?.addEventListener(\"click\",this.#b),this.#r?.addEventListener(\"slotchange\",this.#f),this.#l?.addEventListener(\"click\",this.#v),!n.isSupported())return this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:{name:\"NotSupportedError\",message:\"Not supported\"}}}));this.autoPlay&&this.startVideoStream()}disconnectedCallback(){this.stopVideoStream(),this.#l?.removeEventListener(\"click\",this.#v),this.#s?.removeEventListener(\"click\",this.#b),this.#n?.removeEventListener(\"canplay\",this.#p),this.#a?.removeEventListener(\"slotchange\",this.#g),this.#r?.removeEventListener(\"slotchange\",this.#f)}get autoPlay(){return this.hasAttribute(\"auto-play\")}set autoPlay(t){this.toggleAttribute(\"auto-play\",!!t)}get noImage(){return this.hasAttribute(\"no-image\")}set noImage(t){this.toggleAttribute(\"no-image\",!!t)}get facingMode(){return this.getAttribute(\"facing-mode\")||\"user\"}set facingMode(t){this.setAttribute(\"facing-mode\",t)}get cameraResolution(){return this.getAttribute(\"camera-resolution\")||\"\"}set cameraResolution(t){this.setAttribute(\"camera-resolution\",t)}get pan(){return Number(this.getAttribute(\"pan\"))||0}set pan(t){this.setAttribute(\"pan\",null!=t?t.toString():t)}get tilt(){return Number(this.getAttribute(\"tilt\"))||0}set tilt(t){this.setAttribute(\"tilt\",null!=t?t.toString():t)}get zoom(){return Number(this.getAttribute(\"zoom\"))||1}set zoom(t){this.setAttribute(\"zoom\",null!=t?t.toString():t)}get loading(){return this.hasAttribute(\"loading\")}get calculateFileSize(){return this.hasAttribute(\"calculate-file-size\")}set calculateFileSize(t){this.toggleAttribute(\"calculate-file-size\",!!t)}#v=t=>{t.preventDefault(),this.loading||(this.facingMode=\"user\"!==this.facingMode&&this.facingMode?\"user\":\"environment\")};#b=t=>{t.preventDefault(),this.capture()};#p=t=>{let i=t.target;i.play().then(()=>{this.dispatchEvent(new CustomEvent(`${e}:video-play`,{bubbles:!0,composed:!0,detail:{video:i}}))}).catch(t=>{this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}).finally(()=>{this.removeAttribute(\"loading\")})};#u(){this.#o&&Array.from(this.#o.childNodes).forEach(t=>t.remove())}#h(e,i){if(!this.#e||!e||!i)return;let[o]=this.#e.getVideoTracks(),n=this.getTrackCapabilities();e in this.getTrackSettings()&&o.applyConstraints({advanced:[{[e]:t(Number(i),n[e]?.min||1,n[e]?.max||1)}]})}#g=t=>{t.target?.name===\"capture-button\"&&(this.#s?.removeEventListener(\"click\",this.#b),this.#s=this.#c(),this.#s&&(this.#s.addEventListener(\"click\",this.#b),\"BUTTON\"===this.#s.nodeName||this.#s.hasAttribute(\"role\")||this.#s.setAttribute(\"role\",\"button\")))};#f=t=>{t.target?.name===\"facing-mode-button\"&&(this.#l?.removeEventListener(\"click\",this.#v),this.#l=this.#m(),this.#l&&(this.#l.addEventListener(\"click\",this.#v),\"BUTTON\"===this.#l.nodeName||this.#l.hasAttribute(\"role\")||this.#l.setAttribute(\"role\",\"button\")))};#m(){return this.#r&&this.#r.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"facing-mode-button\"===t.getAttribute(\"slot\"))||null}#c(){return this.#a&&this.#a.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"capture-button\"===t.getAttribute(\"slot\"))||null}#d(t){if(Object.prototype.hasOwnProperty.call(this,t)){let e=this[t];delete this[t],this[t]=e}}async startVideoStream(){if(!n.isSupported()||this.#e)return;this.setAttribute(\"loading\",\"\");let t={video:{facingMode:{ideal:this.facingMode||\"user\"},pan:!0,tilt:!0,zoom:!0},audio:!1};if(\"string\"==typeof this.cameraResolution&&this.cameraResolution.trim().length>0){let[e=0,i=0]=this.cameraResolution.split(\"x\").map(t=>Number(t));e>0&&i>0&&(t.video.width=e,t.video.height=i)}try{this.#e=await navigator.mediaDevices.getUserMedia(t),this.#n&&(this.#n.srcObject=this.#e),this.#h(\"pan\",this.pan),this.#h(\"tilt\",this.tilt),this.#h(\"zoom\",this.zoom);let e=this.getTrackSettings();\"facingMode\"in e&&this.#r&&(this.#r.hidden=!1)}catch(t){this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}finally{this.removeAttribute(\"loading\")}}stopVideoStream(){if(!this.#n||!this.#e)return;let[t]=this.#e.getVideoTracks();t?.stop(),this.#n.srcObject=null,this.#e=null}async capture(){if(!this.loading&&this.#i&&this.#n)try{let t=this.#i.getContext(\"2d\"),i=this.#n.videoWidth,o=this.#n.videoHeight;this.#i.width=i,this.#i.height=o,t?.drawImage(this.#n,0,0,i,o);let n=this.#i.toDataURL(\"image/png\");if(\"string\"==typeof n&&n.includes(\"data:image\")){if(!this.noImage){let t=new Image;t.src=n,t.width=i,t.height=o,t.setAttribute(\"part\",\"output-image\"),this.#u(),this.#o?.appendChild(t)}let t={dataURI:n,width:i,height:o};if(this.calculateFileSize)try{let e=await fetch(n),i=(await e.blob()).size;i&&(t.size=i)}catch(t){}this.dispatchEvent(new CustomEvent(`${e}:success`,{bubbles:!0,composed:!0,detail:t}))}}catch(t){this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}}getSupportedConstraints(){return n.isSupported()&&navigator.mediaDevices.getSupportedConstraints()||{}}getTrackCapabilities(){if(!this.#e)return{};let[t]=this.#e.getVideoTracks();return t&&\"function\"==typeof t.getCapabilities&&t.getCapabilities()||{}}getTrackSettings(){if(!this.#e)return{};let[t]=this.#e.getVideoTracks();return t&&\"function\"==typeof t.getSettings&&t.getSettings()||{}}static isSupported(){return!!navigator.mediaDevices?.getUserMedia}static defineCustomElement(t=e){\"undefined\"==typeof window||window.customElements.get(t)||window.customElements.define(t,n)}}n.defineCustomElement();export{n as CapturePhoto};\n//# sourceMappingURL=capture-photo-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $c290816263f90981$exports = {};\n\n$parcel$export($c290816263f90981$exports, \"CapturePhoto\", function () { return $c290816263f90981$export$cc30a98fe3890794; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ /**\n * @typedef {Object} ExtendedMediaTrackCapabilities\n * @property {ULongRange} [width] - The width of the video track.\n * @property {ULongRange} [height] - The height of the video track.\n * @property {ULongRange} [pan] - The pan level of the camera.\n * @property {ULongRange} [tilt] - The tilt level of the camera.\n * @property {ULongRange} [zoom] - The zoom level of the camera.\n * @property {MediaTrackCapabilities} [nativeMediaTrackCapabilities] - The native track capabilities.\n */ /**\n * @typedef {Object} ExtendedMediaTrackConstraints\n * @property {MediaTrackConstraints & {pan: boolean, tilt: boolean, zoom: boolean}} video - The video constraints.\n * @property {MediaTrackConstraints | boolean} audio - The audio constraints.\n */ // @ts-check\n/**\n * Clamps number within the inclusive `min` and `max` bounds,\n * making sure it does not go beyond them on either side.\n * If `min` is greater than `max` the parameters are swapped to support inverted ranges.\n *\n * @param {number} value - The number to clamp.\n * @param {number} lower - The lower bound.\n * @param {number} upper - The upper bound.\n * @throws {TypeError} - If one or more of the arguments passed is not a number.\n * @returns {number} - The clamped number.\n * @example\n *\n * clamp(10, -5, 5);\n * // => 5\n *\n * clamp(-10, -5, 5);\n * // => -5\n *\n * clamp(-15, 0, 100);\n * // => 0\n *\n * clamp(120, 0, 100);\n * // => 100\n *\n * clamp(-5, NaN, 5); // If any of lower or upper bound are `NaN`, they will be converted to `0`.\n * // => 0\n *\n * clamp(120, 100, 0); // The order of lower and upper bounds is reversed (100 > 0)\n * // => 100\n */ const $02ad8beec419df62$export$7d15b64cf5a3a4c4 = (value, lower, upper)=>{\n if (Number.isNaN(lower)) lower = 0;\n if (Number.isNaN(upper)) upper = 0;\n return Math.min(Math.max(value, Math.min(lower, upper)), Math.max(lower, upper));\n};\n\n\nconst $c290816263f90981$var$COMPONENT_NAME = \"capture-photo\";\nconst $c290816263f90981$var$styles = /* css */ `\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`;\nconst $c290816263f90981$var$template = document.createElement(\"template\");\n$c290816263f90981$var$template.innerHTML = /* html */ `\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\n/**\n * @summary A custom element that implements the MediaDevices.getUserMedia() method of the MediaDevices interface to capture a photo in the browser.\n * @documentation https://github.com/georapbox/capture-photo-element\n *\n * @tagname capture-photo This is the default tag name, unless overridden by the `defineCustomElement` method.\n * @extends HTMLElement\n *\n * @property {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @property {boolean} noImage - Whether or not to show the captured image.\n * @property {string} facingMode - The facing mode of the camera.\n * @property {string} cameraResolution - The resolution of the camera.\n * @property {number} pan - The pan value of the camera.\n * @property {number} tilt - The tilt value of the camera.\n * @property {number} zoom - The zoom value of the camera.\n * @property {boolean} loading - Whether or not the video stream is loading.\n * @property {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n *\n * @atttribute {boolean} auto-play - Reflects the autoPlay property.\n * @atttribute {boolean} no-image - Reflects the noImage property.\n * @atttribute {string} facing-mode - Reflects the facingMode property.\n * @atttribute {string} camera-resolution - Reflects the cameraResolution property.\n * @atttribute {number} pan - Reflects the pan property.\n * @atttribute {number} tilt - Reflects the tilt property.\n * @atttribute {number} zoom - Reflects the zoom property.\n * @atttribute {boolean} loading - Reflects the loading property.\n * @atttribute {boolean} calculate-file-size - Reflects the calculateFileSize property.\n *\n * @slot capture-button - The capture button.\n * @slot capture-button-content - The capture button content.\n * @slot facing-mode-button - The facing mode button.\n * @slot facing-mode-button-content - The facing mode button content.\n * @slot actions - The actions container.\n * @slot - A default un-named slot to add content inside the component.\n *\n * @csspart video - The video element.\n * @csspart actions-container - The actions container.\n * @csspart capture-button - The capture button.\n * @csspart facing-mode-button - The facing mode button.\n * @csspart output-container - The output container.\n * @csspart output-image - The output image.\n *\n * @event capture-photo:video-play - Fires when the video stream is successfully playing.\n * @event capture-photo:success - Fires when the photo is successfully captured.\n * @event capture-photo:error - Fires when an error occurs.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method isSupported - Static method. Checks if the MediaDevices.getUserMedia() method is supported.\n * @method startVideoStream - Instance method. Starts the video stream.\n * @method stopVideoStream - Instance method. Stops the video stream.\n * @method capture - Instance method. Captures a photo.\n * @method getSupportedConstraints - Instance method. Gets the supported constraints.\n * @method getTrackCapabilities - Instance method. Gets the track capabilities.\n * @method getTrackSettings - Instance method. Gets the track settings.\n */ class $c290816263f90981$export$cc30a98fe3890794 extends HTMLElement {\n /** @type {MediaTrackSupportedConstraints | {}}*/ #supportedConstraints = {};\n /** @type {Nullable} */ #stream = null;\n /** @type {Nullable} */ #canvasElement = null;\n /** @type {Nullable} */ #outputElement = null;\n /** @type {Nullable} */ #videoElement = null;\n /** @type {Nullable} */ #captureButtonSlot = null;\n /** @type {Nullable} */ #captureButton = null;\n /** @type {Nullable} */ #facingModeButtonSlot = null;\n /** @type {Nullable} */ #facingModeButton = null;\n constructor(){\n super();\n this.#supportedConstraints = this.getSupportedConstraints();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($c290816263f90981$var$template.content.cloneNode(true));\n }\n }\n static get observedAttributes() {\n return [\n \"no-image\",\n \"facing-mode\",\n \"camera-resolution\",\n \"pan\",\n \"tilt\",\n \"zoom\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (!this.isConnected) return;\n /** @type {ExtendedMediaTrackCapabilities} */ const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n if (name === \"no-image\" && oldValue !== newValue) this.#emptyOutputElement();\n if (name === \"facing-mode\" && oldValue !== newValue && \"facingMode\" in this.#supportedConstraints) {\n const isValidFacingMode = [\n \"user\",\n \"environment\"\n ].includes(this.facingMode || \"\");\n if (\"facingMode\" in trackSettings && isValidFacingMode) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n if (name === \"camera-resolution\" && oldValue !== newValue) {\n if (typeof this.cameraResolution === \"string\" && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split(\"x\").map((x)=>Number(x));\n if (width > 0 && height > 0 && \"width\" in trackCapabilities && \"height\" in trackCapabilities) {\n const widthInAllowedRange = trackCapabilities.width?.min && trackCapabilities.width?.max ? width >= trackCapabilities?.width?.min && width <= trackCapabilities?.width?.max : false;\n const heightInAllowedRange = trackCapabilities.height?.min && trackCapabilities.height?.max ? height >= trackCapabilities?.height?.min && height <= trackCapabilities?.height?.max : false;\n if (\"width\" in trackSettings && \"height\" in trackSettings && widthInAllowedRange && heightInAllowedRange) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n }\n }\n if (name === \"pan\" && oldValue !== newValue && \"pan\" in this.#supportedConstraints) {\n const panInAllowedRange = \"pan\" in trackCapabilities && trackCapabilities.pan?.min && trackCapabilities.pan?.max ? this.pan >= trackCapabilities.pan.min && this.pan <= trackCapabilities.pan.max : false;\n if (\"pan\" in trackSettings && typeof this.pan === \"number\" && panInAllowedRange) this.#applyPTZ(\"pan\", this.pan);\n }\n if (name === \"tilt\" && oldValue !== newValue && \"tilt\" in this.#supportedConstraints) {\n const tiltInAllowedRange = \"tilt\" in trackCapabilities && trackCapabilities.tilt?.min && trackCapabilities.tilt?.max ? this.tilt >= trackCapabilities.tilt.min && this.tilt <= trackCapabilities.tilt.max : false;\n if (\"tilt\" in trackSettings && typeof this.tilt === \"number\" && tiltInAllowedRange) this.#applyPTZ(\"tilt\", this.tilt);\n }\n if (name === \"zoom\" && oldValue !== newValue && \"zoom\" in this.#supportedConstraints) {\n const zoomInAllowedRange = \"zoom\" in trackCapabilities && trackCapabilities.zoom?.min && trackCapabilities.zoom?.max ? this.zoom >= trackCapabilities.zoom.min && this.zoom <= trackCapabilities.zoom.max : false;\n if (\"zoom\" in trackSettings && typeof this.zoom === \"number\" && zoomInAllowedRange) this.#applyPTZ(\"zoom\", this.zoom);\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"autpoPlay\");\n this.#upgradeProperty(\"noImage\");\n this.#upgradeProperty(\"facingMode\");\n this.#upgradeProperty(\"cameraResolution\");\n this.#upgradeProperty(\"pan\");\n this.#upgradeProperty(\"tilt\");\n this.#upgradeProperty(\"zoom\");\n this.#upgradeProperty(\"calculateFileSize\");\n this.#canvasElement = this.shadowRoot?.querySelector(\"canvas\") || null;\n this.#outputElement = this.shadowRoot?.getElementById(\"output\") || null;\n this.#videoElement = this.shadowRoot?.querySelector(\"video\") || null;\n this.#captureButtonSlot = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null;\n this.#captureButton = this.#getCaptureButton();\n this.#facingModeButtonSlot = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null;\n this.#facingModeButton = this.#getFacingModeButton();\n this.#videoElement?.addEventListener(\"loadedmetadata\", this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.addEventListener(\"slotchange\", this.#onCaptureButtonSlotChange);\n this.#captureButton?.addEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#facingModeButtonSlot?.addEventListener(\"slotchange\", this.#onFacingModeButtonSlotChange);\n this.#facingModeButton?.addEventListener(\"click\", this.#onFacingModeButtonClick);\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported()) return this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: {\n name: \"NotSupportedError\",\n message: \"Not supported\"\n }\n }\n }));\n if (this.autoPlay) this.startVideoStream();\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.stopVideoStream();\n this.#facingModeButton?.removeEventListener(\"click\", this.#onFacingModeButtonClick);\n this.#captureButton?.removeEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#videoElement?.removeEventListener(\"canplay\", this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.removeEventListener(\"slotchange\", this.#onCaptureButtonSlotChange);\n this.#facingModeButtonSlot?.removeEventListener(\"slotchange\", this.#onFacingModeButtonSlotChange);\n }\n /**\n * @type {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @attribute auto-play - Reflects the autoPlay attribute.\n */ get autoPlay() {\n return this.hasAttribute(\"auto-play\");\n }\n set autoPlay(value) {\n this.toggleAttribute(\"auto-play\", !!value);\n }\n /**\n * @type {boolean} noImage - Whether or not to show the captured image.\n * @attribute no-image - Reflects the noImage attribute.\n */ get noImage() {\n return this.hasAttribute(\"no-image\");\n }\n set noImage(value) {\n this.toggleAttribute(\"no-image\", !!value);\n }\n /**\n * @type {string} facingMode - The facing mode of the camera.\n * @attribute facing-mode - Reflects the facingMode attribute.\n */ get facingMode() {\n return this.getAttribute(\"facing-mode\") || \"user\";\n }\n set facingMode(value) {\n this.setAttribute(\"facing-mode\", value);\n }\n /**\n * @type {string} cameraResolution - The resolution of the camera.\n * @attribute camera-resolution - Reflects the cameraResolution attribute.\n */ get cameraResolution() {\n return this.getAttribute(\"camera-resolution\") || \"\";\n }\n set cameraResolution(value) {\n this.setAttribute(\"camera-resolution\", value);\n }\n /**\n * @type {number} pan - The pan value of the camera.\n * @attribute pan - Reflects the pan attribute.\n */ get pan() {\n return Number(this.getAttribute(\"pan\")) || 0;\n }\n set pan(value) {\n this.setAttribute(\"pan\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} tilt - The tilt value of the camera.\n * @attribute tilt - Reflects the tilt attribute.\n */ get tilt() {\n return Number(this.getAttribute(\"tilt\")) || 0;\n }\n set tilt(value) {\n this.setAttribute(\"tilt\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} zoom - The zoom value of the camera.\n * @attribute zoom - Reflects the zoom attribute.\n */ get zoom() {\n return Number(this.getAttribute(\"zoom\")) || 1;\n }\n set zoom(value) {\n this.setAttribute(\"zoom\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} loading - Whether or not the video stream is loading.\n * @attribute loading - Reflects the loading attribute.\n */ get loading() {\n return this.hasAttribute(\"loading\");\n }\n /**\n * @type {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n * @attribute calculate-file-size - Reflects the calculateFileSize attribute.\n */ get calculateFileSize() {\n return this.hasAttribute(\"calculate-file-size\");\n }\n set calculateFileSize(value) {\n this.toggleAttribute(\"calculate-file-size\", !!value);\n }\n /**\n * Handles the click event of the facing mode button.\n *\n * @param {*} evt - The click event.\n */ #onFacingModeButtonClick = (evt)=>{\n evt.preventDefault();\n if (this.loading) return;\n this.facingMode = this.facingMode === \"user\" || !this.facingMode ? \"environment\" : \"user\";\n };\n /**\n * Handles the click event of the capture button.\n *\n * @param {*} evt - The click event.\n */ #onCapturePhotoButtonClick = (evt)=>{\n evt.preventDefault();\n this.capture();\n };\n /**\n * Handles the loadedmetadata event of the video element.\n *\n * @param {*} evt - The loadedmetadata event.\n */ #onVideoLoadedMetaData = (evt)=>{\n const video = evt.target;\n video.play().then(()=>{\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:video-play`, {\n bubbles: true,\n composed: true,\n detail: {\n video: video\n }\n }));\n }).catch(/** @param {Error} error */ (error)=>{\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }).finally(()=>{\n this.removeAttribute(\"loading\");\n });\n };\n /**\n * Removes all child nodes from the output element.\n */ #emptyOutputElement() {\n if (!this.#outputElement) return;\n Array.from(this.#outputElement.childNodes).forEach((node)=>node.remove());\n }\n /**\n * Applies the pan, tilt or zoom constraint.\n *\n * @param {'pan' | 'tilt' | 'zoom'} constraintName - The name of the constraint.\n * @param {number} constraintValue - The value of the constraint.\n */ #applyPTZ(constraintName, constraintValue) {\n if (!this.#stream || !constraintName || !constraintValue) return;\n const [track] = this.#stream.getVideoTracks();\n /** @type {ExtendedMediaTrackCapabilities} */ const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n if (constraintName in trackSettings) track.applyConstraints({\n advanced: [\n {\n [constraintName]: (0, $02ad8beec419df62$export$7d15b64cf5a3a4c4)(Number(constraintValue), trackCapabilities[constraintName]?.min || 1, trackCapabilities[constraintName]?.max || 1)\n }\n ]\n });\n }\n /**\n * Handles the slotchange event of the capture button slot.\n *\n * @param {*} evt - The slotchange event.\n */ #onCaptureButtonSlotChange = (evt)=>{\n if (evt.target?.name === \"capture-button\") {\n this.#captureButton?.removeEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#captureButton = this.#getCaptureButton();\n if (this.#captureButton) {\n this.#captureButton.addEventListener(\"click\", this.#onCapturePhotoButtonClick);\n if (this.#captureButton.nodeName !== \"BUTTON\" && !this.#captureButton.hasAttribute(\"role\")) this.#captureButton.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Handles the slotchange event of the facing mode button slot.\n *\n * @param {*} evt - The slotchange event.\n */ #onFacingModeButtonSlotChange = (evt)=>{\n if (evt.target?.name === \"facing-mode-button\") {\n this.#facingModeButton?.removeEventListener(\"click\", this.#onFacingModeButtonClick);\n this.#facingModeButton = this.#getFacingModeButton();\n if (this.#facingModeButton) {\n this.#facingModeButton.addEventListener(\"click\", this.#onFacingModeButtonClick);\n if (this.#facingModeButton.nodeName !== \"BUTTON\" && !this.#facingModeButton.hasAttribute(\"role\")) this.#facingModeButton.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Returns the facing mode button.\n *\n * @returns {Nullable}\n */ #getFacingModeButton() {\n if (!this.#facingModeButtonSlot) return null;\n return this.#facingModeButtonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"facing-mode-button\";\n }) || null;\n }\n /**\n * Returns the capture button.\n *\n * @returns {Nullable}\n */ #getCaptureButton() {\n if (!this.#captureButtonSlot) return null;\n return this.#captureButtonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"capture-button\";\n }) || null;\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and\n * set a value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would\n * miss that property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'autpoPlay' | 'noImage' | 'facingMode' | 'cameraResolution' | 'pan' | 'tilt' | 'zoom' | 'calculateFileSize'} prop\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Starts the video stream.\n *\n * @returns Promise\n */ async startVideoStream() {\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported() || this.#stream) return;\n this.setAttribute(\"loading\", \"\");\n /** @type {ExtendedMediaTrackConstraints} */ const constraints = {\n video: {\n facingMode: {\n ideal: this.facingMode || \"user\"\n },\n pan: true,\n tilt: true,\n zoom: true\n },\n audio: false\n };\n if (typeof this.cameraResolution === \"string\" && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split(\"x\").map((x)=>Number(x));\n if (width > 0 && height > 0) {\n constraints.video.width = width;\n constraints.video.height = height;\n }\n }\n try {\n this.#stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (this.#videoElement) this.#videoElement.srcObject = this.#stream;\n this.#applyPTZ(\"pan\", this.pan);\n this.#applyPTZ(\"tilt\", this.tilt);\n this.#applyPTZ(\"zoom\", this.zoom);\n const trackSettings = this.getTrackSettings();\n if (\"facingMode\" in trackSettings && this.#facingModeButtonSlot) this.#facingModeButtonSlot.hidden = false;\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n } finally{\n this.removeAttribute(\"loading\");\n }\n }\n /**\n * Stops the video stream.\n */ stopVideoStream() {\n if (!this.#videoElement || !this.#stream) return;\n const [track] = this.#stream.getVideoTracks();\n track?.stop();\n this.#videoElement.srcObject = null;\n this.#stream = null;\n }\n /**\n * Captures a photo using the element's properties.\n *\n * @returns Promise\n */ async capture() {\n if (this.loading || !this.#canvasElement || !this.#videoElement) return;\n try {\n const ctx = this.#canvasElement.getContext(\"2d\");\n const width = this.#videoElement.videoWidth;\n const height = this.#videoElement.videoHeight;\n this.#canvasElement.width = width;\n this.#canvasElement.height = height;\n ctx?.drawImage(this.#videoElement, 0, 0, width, height);\n const dataURI = this.#canvasElement.toDataURL(\"image/png\");\n if (typeof dataURI === \"string\" && dataURI.includes(\"data:image\")) {\n if (!this.noImage) {\n const image = new Image();\n image.src = dataURI;\n image.width = width;\n image.height = height;\n image.setAttribute(\"part\", \"output-image\");\n this.#emptyOutputElement();\n this.#outputElement?.appendChild(image);\n }\n /** @type {{ dataURI: string, width: number, height: number, size?: number }} */ const eventDetail = {\n dataURI: dataURI,\n width: width,\n height: height\n };\n if (this.calculateFileSize) try {\n const file = await fetch(dataURI);\n const blob = await file.blob();\n const size = blob.size;\n if (size) eventDetail.size = size;\n } catch (err) {\n // Fail silently...\n }\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:success`, {\n bubbles: true,\n composed: true,\n detail: eventDetail\n }));\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n }\n /**\n * Returns an object based on the `MediaTrackSupportedConstraints` dictionary,\n * whose member fields each specify one ofthe constrainable properties the user agent understands.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaDevices/getSupportedConstraints\n * @returns {MediaTrackSupportedConstraints | {}}\n */ getSupportedConstraints() {\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported()) return {};\n return navigator.mediaDevices.getSupportedConstraints() || {};\n }\n /**\n * Returns a `MediaTrackCapabilities` object which specifies the values or range of values\n * which each constrainable property, based upon the platform and user agent.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getCapabilities\n * @returns {MediaTrackCapabilities | {}}\n */ getTrackCapabilities() {\n if (!this.#stream) return {};\n const [track] = this.#stream.getVideoTracks();\n if (track && typeof track.getCapabilities === \"function\") return track.getCapabilities() || {};\n return {};\n }\n /**\n * Returns a `MediaTrackSettings` object containing the current values of each of\n * the constrainable properties for the current MediaStreamTrack.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getSettings\n * @returns {MediaTrackSettings | {}}\n */ getTrackSettings() {\n if (!this.#stream) return {};\n const [track] = this.#stream.getVideoTracks();\n if (track && typeof track.getSettings === \"function\") return track.getSettings() || {};\n return {};\n }\n /**\n * Checks if the `MediaDevices.getUserMedia()` method is supported.\n *\n * @returns {boolean}\n */ static isSupported() {\n return Boolean(navigator.mediaDevices?.getUserMedia);\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='capture-photo'] - The name of the custom element.\n * @example\n *\n * CapturePhoto.defineCustomElement('my-capture-photo');\n */ static defineCustomElement(elementName = $c290816263f90981$var$COMPONENT_NAME) {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $c290816263f90981$export$cc30a98fe3890794);\n }\n}\n\n\n(0, $c290816263f90981$export$cc30a98fe3890794).defineCustomElement();\n\n\nexport {$c290816263f90981$export$cc30a98fe3890794 as CapturePhoto};\n//# sourceMappingURL=capture-photo-defined.js.map\n","import { CapturePhoto } from './capture-photo.js';\n\nCapturePhoto.defineCustomElement();\n\nexport { CapturePhoto };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\n/**\n * @typedef {Object} ExtendedMediaTrackCapabilities\n * @property {ULongRange} [width] - The width of the video track.\n * @property {ULongRange} [height] - The height of the video track.\n * @property {ULongRange} [pan] - The pan level of the camera.\n * @property {ULongRange} [tilt] - The tilt level of the camera.\n * @property {ULongRange} [zoom] - The zoom level of the camera.\n * @property {MediaTrackCapabilities} [nativeMediaTrackCapabilities] - The native track capabilities.\n */\n\n/**\n * @typedef {Object} ExtendedMediaTrackConstraints\n * @property {MediaTrackConstraints & {pan: boolean, tilt: boolean, zoom: boolean}} video - The video constraints.\n * @property {MediaTrackConstraints | boolean} audio - The audio constraints.\n */\n\nimport { clamp } from './utils/clamp.js';\n\nconst COMPONENT_NAME = 'capture-photo';\n\nconst styles = /* css */`\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */`\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\n\n/**\n * @summary A custom element that implements the MediaDevices.getUserMedia() method of the MediaDevices interface to capture a photo in the browser.\n * @documentation https://github.com/georapbox/capture-photo-element\n *\n * @tagname capture-photo This is the default tag name, unless overridden by the `defineCustomElement` method.\n * @extends HTMLElement\n *\n * @property {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @property {boolean} noImage - Whether or not to show the captured image.\n * @property {string} facingMode - The facing mode of the camera.\n * @property {string} cameraResolution - The resolution of the camera.\n * @property {number} pan - The pan value of the camera.\n * @property {number} tilt - The tilt value of the camera.\n * @property {number} zoom - The zoom value of the camera.\n * @property {boolean} loading - Whether or not the video stream is loading.\n * @property {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n *\n * @atttribute {boolean} auto-play - Reflects the autoPlay property.\n * @atttribute {boolean} no-image - Reflects the noImage property.\n * @atttribute {string} facing-mode - Reflects the facingMode property.\n * @atttribute {string} camera-resolution - Reflects the cameraResolution property.\n * @atttribute {number} pan - Reflects the pan property.\n * @atttribute {number} tilt - Reflects the tilt property.\n * @atttribute {number} zoom - Reflects the zoom property.\n * @atttribute {boolean} loading - Reflects the loading property.\n * @atttribute {boolean} calculate-file-size - Reflects the calculateFileSize property.\n *\n * @slot capture-button - The capture button.\n * @slot capture-button-content - The capture button content.\n * @slot facing-mode-button - The facing mode button.\n * @slot facing-mode-button-content - The facing mode button content.\n * @slot actions - The actions container.\n * @slot - A default un-named slot to add content inside the component.\n *\n * @csspart video - The video element.\n * @csspart actions-container - The actions container.\n * @csspart capture-button - The capture button.\n * @csspart facing-mode-button - The facing mode button.\n * @csspart output-container - The output container.\n * @csspart output-image - The output image.\n *\n * @event capture-photo:video-play - Fires when the video stream is successfully playing.\n * @event capture-photo:success - Fires when the photo is successfully captured.\n * @event capture-photo:error - Fires when an error occurs.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method isSupported - Static method. Checks if the MediaDevices.getUserMedia() method is supported.\n * @method startVideoStream - Instance method. Starts the video stream.\n * @method stopVideoStream - Instance method. Stops the video stream.\n * @method capture - Instance method. Captures a photo.\n * @method getSupportedConstraints - Instance method. Gets the supported constraints.\n * @method getTrackCapabilities - Instance method. Gets the track capabilities.\n * @method getTrackSettings - Instance method. Gets the track settings.\n */\nclass CapturePhoto extends HTMLElement {\n /** @type {MediaTrackSupportedConstraints | {}}*/\n #supportedConstraints = {};\n\n /** @type {Nullable} */\n #stream = null;\n\n /** @type {Nullable} */\n #canvasElement = null;\n\n /** @type {Nullable} */\n #outputElement = null;\n\n /** @type {Nullable} */\n #videoElement = null;\n\n /** @type {Nullable} */\n #captureButtonSlot = null;\n\n /** @type {Nullable} */\n #captureButton = null;\n\n /** @type {Nullable} */\n #facingModeButtonSlot = null;\n\n /** @type {Nullable} */\n #facingModeButton = null;\n\n constructor() {\n super();\n\n this.#supportedConstraints = this.getSupportedConstraints();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n }\n\n static get observedAttributes() {\n return ['no-image', 'facing-mode', 'camera-resolution', 'pan', 'tilt', 'zoom'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (!this.isConnected) {\n return;\n }\n\n /** @type {ExtendedMediaTrackCapabilities} */\n const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n\n if (name === 'no-image' && oldValue !== newValue) {\n this.#emptyOutputElement();\n }\n\n if (name === 'facing-mode' && oldValue !== newValue && 'facingMode' in this.#supportedConstraints) {\n const isValidFacingMode = ['user', 'environment'].includes(this.facingMode || '');\n\n if ('facingMode' in trackSettings && isValidFacingMode) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n\n if (name === 'camera-resolution' && oldValue !== newValue) {\n if (typeof this.cameraResolution === 'string' && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split('x').map(x => Number(x));\n\n if (width > 0 && height > 0 && 'width' in trackCapabilities && 'height' in trackCapabilities) {\n const widthInAllowedRange = trackCapabilities.width?.min && trackCapabilities.width?.max\n ? width >= trackCapabilities?.width?.min && width <= trackCapabilities?.width?.max\n : false;\n\n const heightInAllowedRange = trackCapabilities.height?.min && trackCapabilities.height?.max\n ? height >= trackCapabilities?.height?.min && height <= trackCapabilities?.height?.max\n : false;\n\n if ('width' in trackSettings && 'height' in trackSettings && widthInAllowedRange && heightInAllowedRange) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n }\n }\n\n if (name === 'pan' && oldValue !== newValue && 'pan' in this.#supportedConstraints) {\n const panInAllowedRange = 'pan' in trackCapabilities && trackCapabilities.pan?.min && trackCapabilities.pan?.max\n ? this.pan >= trackCapabilities.pan.min && this.pan <= trackCapabilities.pan.max\n : false;\n\n if ('pan' in trackSettings && typeof this.pan === 'number' && panInAllowedRange) {\n this.#applyPTZ('pan', this.pan);\n }\n }\n\n if (name === 'tilt' && oldValue !== newValue && 'tilt' in this.#supportedConstraints) {\n const tiltInAllowedRange = 'tilt' in trackCapabilities && trackCapabilities.tilt?.min && trackCapabilities.tilt?.max\n ? this.tilt >= trackCapabilities.tilt.min && this.tilt <= trackCapabilities.tilt.max\n : false;\n\n if ('tilt' in trackSettings && typeof this.tilt === 'number' && tiltInAllowedRange) {\n this.#applyPTZ('tilt', this.tilt);\n }\n }\n\n if (name === 'zoom' && oldValue !== newValue && 'zoom' in this.#supportedConstraints) {\n const zoomInAllowedRange = 'zoom' in trackCapabilities && trackCapabilities.zoom?.min && trackCapabilities.zoom?.max\n ? this.zoom >= trackCapabilities.zoom.min && this.zoom <= trackCapabilities.zoom.max\n : false;\n\n if ('zoom' in trackSettings && typeof this.zoom === 'number' && zoomInAllowedRange) {\n this.#applyPTZ('zoom', this.zoom);\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('autpoPlay');\n this.#upgradeProperty('noImage');\n this.#upgradeProperty('facingMode');\n this.#upgradeProperty('cameraResolution');\n this.#upgradeProperty('pan');\n this.#upgradeProperty('tilt');\n this.#upgradeProperty('zoom');\n this.#upgradeProperty('calculateFileSize');\n\n this.#canvasElement = this.shadowRoot?.querySelector('canvas') || null;\n this.#outputElement = this.shadowRoot?.getElementById('output') || null;\n this.#videoElement = this.shadowRoot?.querySelector('video') || null;\n this.#captureButtonSlot = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null;\n this.#captureButton = this.#getCaptureButton();\n this.#facingModeButtonSlot = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null;\n this.#facingModeButton = this.#getFacingModeButton();\n\n this.#videoElement?.addEventListener('loadedmetadata', this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.addEventListener('slotchange', this.#onCaptureButtonSlotChange);\n this.#captureButton?.addEventListener('click', this.#onCapturePhotoButtonClick);\n this.#facingModeButtonSlot?.addEventListener('slotchange', this.#onFacingModeButtonSlotChange);\n this.#facingModeButton?.addEventListener('click', this.#onFacingModeButtonClick);\n\n if (!CapturePhoto.isSupported()) {\n return this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: {\n name: 'NotSupportedError',\n message: 'Not supported'\n }\n }\n }));\n }\n\n if (this.autoPlay) {\n this.startVideoStream();\n }\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.stopVideoStream();\n this.#facingModeButton?.removeEventListener('click', this.#onFacingModeButtonClick);\n this.#captureButton?.removeEventListener('click', this.#onCapturePhotoButtonClick);\n this.#videoElement?.removeEventListener('canplay', this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.removeEventListener('slotchange', this.#onCaptureButtonSlotChange);\n this.#facingModeButtonSlot?.removeEventListener('slotchange', this.#onFacingModeButtonSlotChange);\n }\n\n /**\n * @type {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @attribute auto-play - Reflects the autoPlay attribute.\n */\n get autoPlay() {\n return this.hasAttribute('auto-play');\n }\n\n set autoPlay(value) {\n this.toggleAttribute('auto-play', !!value);\n }\n\n /**\n * @type {boolean} noImage - Whether or not to show the captured image.\n * @attribute no-image - Reflects the noImage attribute.\n */\n get noImage() {\n return this.hasAttribute('no-image');\n }\n\n set noImage(value) {\n this.toggleAttribute('no-image', !!value);\n }\n\n /**\n * @type {string} facingMode - The facing mode of the camera.\n * @attribute facing-mode - Reflects the facingMode attribute.\n */\n get facingMode() {\n return this.getAttribute('facing-mode') || 'user';\n }\n\n set facingMode(value) {\n this.setAttribute('facing-mode', value);\n }\n\n /**\n * @type {string} cameraResolution - The resolution of the camera.\n * @attribute camera-resolution - Reflects the cameraResolution attribute.\n */\n get cameraResolution() {\n return this.getAttribute('camera-resolution') || '';\n }\n\n set cameraResolution(value) {\n this.setAttribute('camera-resolution', value);\n }\n\n /**\n * @type {number} pan - The pan value of the camera.\n * @attribute pan - Reflects the pan attribute.\n */\n get pan() {\n return Number(this.getAttribute('pan')) || 0;\n }\n\n set pan(value) {\n this.setAttribute('pan', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} tilt - The tilt value of the camera.\n * @attribute tilt - Reflects the tilt attribute.\n */\n get tilt() {\n return Number(this.getAttribute('tilt')) || 0;\n }\n\n set tilt(value) {\n this.setAttribute('tilt', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} zoom - The zoom value of the camera.\n * @attribute zoom - Reflects the zoom attribute.\n */\n get zoom() {\n return Number(this.getAttribute('zoom')) || 1;\n }\n\n set zoom(value) {\n this.setAttribute('zoom', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} loading - Whether or not the video stream is loading.\n * @attribute loading - Reflects the loading attribute.\n */\n get loading() {\n return this.hasAttribute('loading');\n }\n\n /**\n * @type {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n * @attribute calculate-file-size - Reflects the calculateFileSize attribute.\n */\n get calculateFileSize() {\n return this.hasAttribute('calculate-file-size');\n }\n\n set calculateFileSize(value) {\n this.toggleAttribute('calculate-file-size', !!value);\n }\n\n /**\n * Handles the click event of the facing mode button.\n *\n * @param {*} evt - The click event.\n */\n #onFacingModeButtonClick = evt => {\n evt.preventDefault();\n\n if (this.loading) {\n return;\n }\n\n this.facingMode = this.facingMode === 'user' || !this.facingMode ? 'environment' : 'user';\n };\n\n /**\n * Handles the click event of the capture button.\n *\n * @param {*} evt - The click event.\n */\n #onCapturePhotoButtonClick = evt => {\n evt.preventDefault();\n this.capture();\n };\n\n /**\n * Handles the loadedmetadata event of the video element.\n *\n * @param {*} evt - The loadedmetadata event.\n */\n #onVideoLoadedMetaData = evt => {\n const video = evt.target;\n\n video.play().then(() => {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:video-play`, {\n bubbles: true,\n composed: true,\n detail: { video }\n }));\n }).catch(/** @param {Error} error */error => {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }).finally(() => {\n this.removeAttribute('loading');\n });\n };\n\n /**\n * Removes all child nodes from the output element.\n */\n #emptyOutputElement() {\n if (!this.#outputElement) {\n return;\n }\n\n Array.from(this.#outputElement.childNodes).forEach(node => node.remove());\n }\n\n /**\n * Applies the pan, tilt or zoom constraint.\n *\n * @param {'pan' | 'tilt' | 'zoom'} constraintName - The name of the constraint.\n * @param {number} constraintValue - The value of the constraint.\n */\n #applyPTZ(constraintName, constraintValue) {\n if (!this.#stream || !constraintName || !constraintValue) {\n return;\n }\n\n const [track] = this.#stream.getVideoTracks();\n /** @type {ExtendedMediaTrackCapabilities} */\n const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n\n if (constraintName in trackSettings) {\n track.applyConstraints({\n advanced: [{\n [constraintName]: clamp(Number(constraintValue), trackCapabilities[constraintName]?.min || 1, trackCapabilities[constraintName]?.max || 1)\n }]\n });\n }\n }\n\n /**\n * Handles the slotchange event of the capture button slot.\n *\n * @param {*} evt - The slotchange event.\n */\n #onCaptureButtonSlotChange = evt => {\n if (evt.target?.name === 'capture-button') {\n this.#captureButton?.removeEventListener('click', this.#onCapturePhotoButtonClick);\n this.#captureButton = this.#getCaptureButton();\n\n if (this.#captureButton) {\n this.#captureButton.addEventListener('click', this.#onCapturePhotoButtonClick);\n\n if (this.#captureButton.nodeName !== 'BUTTON' && !this.#captureButton.hasAttribute('role')) {\n this.#captureButton.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Handles the slotchange event of the facing mode button slot.\n *\n * @param {*} evt - The slotchange event.\n */\n #onFacingModeButtonSlotChange = evt => {\n if (evt.target?.name === 'facing-mode-button') {\n this.#facingModeButton?.removeEventListener('click', this.#onFacingModeButtonClick);\n this.#facingModeButton = this.#getFacingModeButton();\n\n if (this.#facingModeButton) {\n this.#facingModeButton.addEventListener('click', this.#onFacingModeButtonClick);\n\n if (this.#facingModeButton.nodeName !== 'BUTTON' && !this.#facingModeButton.hasAttribute('role')) {\n this.#facingModeButton.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Returns the facing mode button.\n *\n * @returns {Nullable}\n */\n #getFacingModeButton() {\n if (!this.#facingModeButtonSlot) {\n return null;\n }\n\n return this.#facingModeButtonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'facing-mode-button';\n }) || null;\n }\n\n /**\n * Returns the capture button.\n *\n * @returns {Nullable}\n */\n #getCaptureButton() {\n if (!this.#captureButtonSlot) {\n return null;\n }\n\n return this.#captureButtonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'capture-button';\n }) || null;\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and\n * set a value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would\n * miss that property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'autpoPlay' | 'noImage' | 'facingMode' | 'cameraResolution' | 'pan' | 'tilt' | 'zoom' | 'calculateFileSize'} prop\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Starts the video stream.\n *\n * @returns Promise\n */\n async startVideoStream() {\n if (!CapturePhoto.isSupported() || this.#stream) {\n return;\n }\n\n this.setAttribute('loading', '');\n\n /** @type {ExtendedMediaTrackConstraints} */\n const constraints = {\n video: {\n facingMode: {\n ideal: this.facingMode || 'user'\n },\n pan: true,\n tilt: true,\n zoom: true\n },\n audio: false\n };\n\n if (typeof this.cameraResolution === 'string' && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split('x').map(x => Number(x));\n\n if (width > 0 && height > 0) {\n constraints.video.width = width;\n constraints.video.height = height;\n }\n }\n\n try {\n this.#stream = await navigator.mediaDevices.getUserMedia(constraints);\n\n if (this.#videoElement) {\n this.#videoElement.srcObject = this.#stream;\n }\n\n this.#applyPTZ('pan', this.pan);\n this.#applyPTZ('tilt', this.tilt);\n this.#applyPTZ('zoom', this.zoom);\n\n const trackSettings = this.getTrackSettings();\n\n if ('facingMode' in trackSettings && this.#facingModeButtonSlot) {\n this.#facingModeButtonSlot.hidden = false;\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n } finally {\n this.removeAttribute('loading');\n }\n }\n\n /**\n * Stops the video stream.\n */\n stopVideoStream() {\n if (!this.#videoElement || !this.#stream) {\n return;\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n track?.stop();\n this.#videoElement.srcObject = null;\n this.#stream = null;\n }\n\n /**\n * Captures a photo using the element's properties.\n *\n * @returns Promise\n */\n async capture() {\n if (this.loading || !this.#canvasElement || !this.#videoElement) {\n return;\n }\n\n try {\n const ctx = this.#canvasElement.getContext('2d');\n const width = this.#videoElement.videoWidth;\n const height = this.#videoElement.videoHeight;\n this.#canvasElement.width = width;\n this.#canvasElement.height = height;\n ctx?.drawImage(this.#videoElement, 0, 0, width, height);\n const dataURI = this.#canvasElement.toDataURL('image/png');\n\n if (typeof dataURI === 'string' && dataURI.includes('data:image')) {\n if (!this.noImage) {\n const image = new Image();\n image.src = dataURI;\n image.width = width;\n image.height = height;\n image.setAttribute('part', 'output-image');\n this.#emptyOutputElement();\n this.#outputElement?.appendChild(image);\n }\n\n /** @type {{ dataURI: string, width: number, height: number, size?: number }} */\n const eventDetail = { dataURI, width, height };\n\n if (this.calculateFileSize) {\n try {\n const file = await fetch(dataURI);\n const blob = await file.blob();\n const size = blob.size;\n\n if (size) {\n eventDetail.size = size;\n }\n } catch (err) {\n // Fail silently...\n }\n }\n\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:success`, {\n bubbles: true,\n composed: true,\n detail: eventDetail\n }));\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n }\n\n /**\n * Returns an object based on the `MediaTrackSupportedConstraints` dictionary,\n * whose member fields each specify one ofthe constrainable properties the user agent understands.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaDevices/getSupportedConstraints\n * @returns {MediaTrackSupportedConstraints | {}}\n */\n getSupportedConstraints() {\n if (!CapturePhoto.isSupported()) {\n return {};\n }\n\n return navigator.mediaDevices.getSupportedConstraints() || {};\n }\n\n /**\n * Returns a `MediaTrackCapabilities` object which specifies the values or range of values\n * which each constrainable property, based upon the platform and user agent.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getCapabilities\n * @returns {MediaTrackCapabilities | {}}\n */\n getTrackCapabilities() {\n if (!this.#stream) {\n return {};\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n if (track && typeof track.getCapabilities === 'function') {\n return track.getCapabilities() || {};\n }\n\n return {};\n }\n\n /**\n * Returns a `MediaTrackSettings` object containing the current values of each of\n * the constrainable properties for the current MediaStreamTrack.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getSettings\n * @returns {MediaTrackSettings | {}}\n */\n getTrackSettings() {\n if (!this.#stream) {\n return {};\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n if (track && typeof track.getSettings === 'function') {\n return track.getSettings() || {};\n }\n\n return {};\n }\n\n /**\n * Checks if the `MediaDevices.getUserMedia()` method is supported.\n *\n * @returns {boolean}\n */\n static isSupported() {\n return Boolean(navigator.mediaDevices?.getUserMedia);\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='capture-photo'] - The name of the custom element.\n * @example\n *\n * CapturePhoto.defineCustomElement('my-capture-photo');\n */\n static defineCustomElement(elementName = COMPONENT_NAME) {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, CapturePhoto);\n }\n }\n}\n\nexport { CapturePhoto };\n","// @ts-check\n\n/**\n * Clamps number within the inclusive `min` and `max` bounds,\n * making sure it does not go beyond them on either side.\n * If `min` is greater than `max` the parameters are swapped to support inverted ranges.\n *\n * @param {number} value - The number to clamp.\n * @param {number} lower - The lower bound.\n * @param {number} upper - The upper bound.\n * @throws {TypeError} - If one or more of the arguments passed is not a number.\n * @returns {number} - The clamped number.\n * @example\n *\n * clamp(10, -5, 5);\n * // => 5\n *\n * clamp(-10, -5, 5);\n * // => -5\n *\n * clamp(-15, 0, 100);\n * // => 0\n *\n * clamp(120, 0, 100);\n * // => 100\n *\n * clamp(-5, NaN, 5); // If any of lower or upper bound are `NaN`, they will be converted to `0`.\n * // => 0\n *\n * clamp(120, 100, 0); // The order of lower and upper bounds is reversed (100 > 0)\n * // => 100\n */\nexport const clamp = (value, lower, upper) => {\n if (Number.isNaN(lower)) {\n lower = 0;\n }\n\n if (Number.isNaN(upper)) {\n upper = 0;\n }\n\n return Math.min(Math.max(value, Math.min(lower, upper)), Math.max(lower, upper));\n};\n","Object.defineProperty({},\"ModalElement\",{get:function(){return t},set:void 0,enumerable:!0,configurable:!0});let e=document.createElement(\"template\");e.innerHTML=/* html */`\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */class t extends HTMLElement{/** @type {Nullable} */#e=null;/** @type {Nullable} */#t=null;/** @type {ReturnType | undefined} */#o=void 0;constructor(){if(super(),!this.shadowRoot){let t=this.attachShadow({mode:\"open\"});t.appendChild(e.content.cloneNode(!0))}this.shadowRoot&&(this.#e=this.shadowRoot.querySelector(\"dialog\"),this.#t=this.shadowRoot.querySelector('slot[name=\"footer\"]'))}static get observedAttributes(){return[\"open\",\"no-header\",\"no-animations\",\"no-close-button\"]}/**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */attributeChangedCallback(e,t,o){if(null!==this.#e){if(\"open\"===e&&t!==o&&(this.open?(this.#e.showModal(),document.body&&(document.body.style.overflowY=\"hidden\"),this.dispatchEvent(new CustomEvent(\"me-open\",{bubbles:!0,composed:!0,detail:{element:this}}))):this.#e.close()),\"no-header\"===e&&t!==o){/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__header\");null!==e&&(e.hidden=this.noHeader)}if(\"no-animations\"===e&&t!==o&&this.#e.classList.toggle(\"dialog--no-animations\",this.noAnimations),\"no-close-button\"===e&&t!==o){/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__close\");null!==e&&(e.hidden=this.noCloseButton)}}}/**\n * Lifecycle method that is called when the element is added to the DOM.\n */connectedCallback(){this.#i(\"open\"),this.#i(\"staticBackdrop\"),this.#i(\"noHeader\"),this.#i(\"noAnimations\"),this.#i(\"noCloseButton\"),this.#i(\"fullscreen\"),this.#e?.addEventListener(\"click\",this.#a),this.#e?.addEventListener(\"close\",this.#l),this.#e?.addEventListener(\"cancel\",this.#s),this.#e?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\",this.#n),this.#t?.addEventListener(\"slotchange\",this.#r)}/**\n * Lifecycle method that is called when the element is removed from the DOM.\n */disconnectedCallback(){this.#o&&clearTimeout(this.#o),this.#e?.addEventListener(\"click\",this.#a),this.#e?.removeEventListener(\"close\",this.#l),this.#e?.removeEventListener(\"cancel\",this.#s),this.#e?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\",this.#n),this.#t?.removeEventListener(\"slotchange\",this.#r)}/**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */get open(){return this.hasAttribute(\"open\")}set open(e){e?this.setAttribute(\"open\",\"\"):this.removeAttribute(\"open\")}/**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */get staticBackdrop(){return this.hasAttribute(\"static-backdrop\")}set staticBackdrop(e){e?this.setAttribute(\"static-backdrop\",\"\"):this.removeAttribute(\"static-backdrop\")}/**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */get noHeader(){return this.hasAttribute(\"no-header\")}set noHeader(e){e?this.setAttribute(\"no-header\",\"\"):this.removeAttribute(\"no-header\")}/**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */get noAnimations(){return this.hasAttribute(\"no-animations\")}set noAnimations(e){e?this.setAttribute(\"no-animations\",\"\"):this.removeAttribute(\"no-animations\")}/**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */get noCloseButton(){return this.hasAttribute(\"no-close-button\")}set noCloseButton(e){e?this.setAttribute(\"no-close-button\",\"\"):this.removeAttribute(\"no-close-button\")}/**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */get fullscreen(){return this.hasAttribute(\"fullscreen\")}set fullscreen(e){e?this.setAttribute(\"fullscreen\",\"\"):this.removeAttribute(\"fullscreen\")}/**\n * Applies a pulse effect on the dialog.\n */#d(){this.#o||(this.#e?.classList.add(\"dialog--pulse\"),this.#o=setTimeout(()=>{this.#e?.classList.remove(\"dialog--pulse\"),clearTimeout(this.#o),this.#o=void 0},300))}/**\n * Handles the close event of the dialog.\n */#l=()=>{// This is needed because the dialog element does not reset\n// the open property when the dialog is closed by the user.\nthis.open=!1,document.body&&(document.body.style.overflowY=\"\"),this.dispatchEvent(new CustomEvent(\"me-close\",{bubbles:!0,composed:!0,detail:{element:this}}))};/**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */#s=e=>{let t=this.#c(\"escape-key\");this.dispatchEvent(t),t.defaultPrevented&&(e.preventDefault(),this.noAnimations||this.#d())};/**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */#n=e=>{let t=this.#c(\"close-button\");this.dispatchEvent(t),t.defaultPrevented&&(e.preventDefault(),this.noAnimations||this.#d())};/**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */#a=e=>{if(e.target!==e.currentTarget)return;let t=this.#c(\"backdrop-click\");if(this.dispatchEvent(t),t.defaultPrevented||this.staticBackdrop){this.noAnimations||this.#d();return}this.#e?.close()};/**\n * Handles the slotchange event of the footer slot.\n */#r=()=>{if(null===this.#e)return;/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__footer\");if(null===e)return;let t=this.#t?.assignedNodes(),o=!!t&&t.length>0;e.hidden=!o};/**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */#c(e){return new CustomEvent(\"me-request-close\",{bubbles:!0,composed:!0,cancelable:!0,detail:{reason:e,element:this}})}/**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */#i(e){if(Object.prototype.hasOwnProperty.call(this,e)){let t=this[e];delete this[e],this[e]=t}}/**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */show(){this.open||(this.open=!0)}/**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */hide(){this.open&&(this.open=!1)}/**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */static defineCustomElement(e=\"modal-element\"){\"undefined\"==typeof window||window.customElements.get(e)||window.customElements.define(e,t)}}t.defineCustomElement();export{t as ModalElement};//# sourceMappingURL=modal-element-defined.js.map\n\n//# sourceMappingURL=modal-element-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $180b6dcf923bafc7$exports = {};\n\n$parcel$export($180b6dcf923bafc7$exports, \"ModalElement\", function () { return $180b6dcf923bafc7$export$32589115725b904b; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ const $180b6dcf923bafc7$var$PULSE_ANIMATION_DURATION = 300;\nconst $180b6dcf923bafc7$var$template = document.createElement(\"template\");\n$180b6dcf923bafc7$var$template.innerHTML = /* html */ `\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;\n/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */ class $180b6dcf923bafc7$export$32589115725b904b extends HTMLElement {\n /** @type {Nullable} */ #dialogEl = null;\n /** @type {Nullable} */ #footerSlotEl = null;\n /** @type {ReturnType | undefined} */ #pulseAnimationTimeout = void 0;\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($180b6dcf923bafc7$var$template.content.cloneNode(true));\n }\n if (this.shadowRoot) {\n this.#dialogEl = this.shadowRoot.querySelector(\"dialog\");\n this.#footerSlotEl = this.shadowRoot.querySelector('slot[name=\"footer\"]');\n }\n }\n static get observedAttributes() {\n return [\n \"open\",\n \"no-header\",\n \"no-animations\",\n \"no-close-button\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (this.#dialogEl === null) return;\n if (name === \"open\" && oldValue !== newValue) {\n if (this.open) {\n this.#dialogEl.showModal();\n if (document.body) document.body.style.overflowY = \"hidden\";\n this.dispatchEvent(new CustomEvent(\"me-open\", {\n bubbles: true,\n composed: true,\n detail: {\n element: this\n }\n }));\n } else this.#dialogEl.close();\n }\n if (name === \"no-header\" && oldValue !== newValue) {\n /** @type {Nullable} */ const headerEl = this.#dialogEl.querySelector(\".dialog__header\");\n if (headerEl !== null) headerEl.hidden = this.noHeader;\n }\n if (name === \"no-animations\" && oldValue !== newValue) this.#dialogEl.classList.toggle(\"dialog--no-animations\", this.noAnimations);\n if (name === \"no-close-button\" && oldValue !== newValue) {\n /** @type {Nullable} */ const closeBtnEl = this.#dialogEl.querySelector(\".dialog__close\");\n if (closeBtnEl !== null) closeBtnEl.hidden = this.noCloseButton;\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"open\");\n this.#upgradeProperty(\"staticBackdrop\");\n this.#upgradeProperty(\"noHeader\");\n this.#upgradeProperty(\"noAnimations\");\n this.#upgradeProperty(\"noCloseButton\");\n this.#upgradeProperty(\"fullscreen\");\n this.#dialogEl?.addEventListener(\"click\", this.#handleDialogClick);\n this.#dialogEl?.addEventListener(\"close\", this.#handleDialogClose);\n this.#dialogEl?.addEventListener(\"cancel\", this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\", this.#handleCloseButtonClick);\n this.#footerSlotEl?.addEventListener(\"slotchange\", this.#handleFooterSlotChange);\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#pulseAnimationTimeout && clearTimeout(this.#pulseAnimationTimeout);\n this.#dialogEl?.addEventListener(\"click\", this.#handleDialogClick);\n this.#dialogEl?.removeEventListener(\"close\", this.#handleDialogClose);\n this.#dialogEl?.removeEventListener(\"cancel\", this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\", this.#handleCloseButtonClick);\n this.#footerSlotEl?.removeEventListener(\"slotchange\", this.#handleFooterSlotChange);\n }\n /**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */ get open() {\n return this.hasAttribute(\"open\");\n }\n set open(value) {\n if (value) this.setAttribute(\"open\", \"\");\n else this.removeAttribute(\"open\");\n }\n /**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */ get staticBackdrop() {\n return this.hasAttribute(\"static-backdrop\");\n }\n set staticBackdrop(value) {\n if (value) this.setAttribute(\"static-backdrop\", \"\");\n else this.removeAttribute(\"static-backdrop\");\n }\n /**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */ get noHeader() {\n return this.hasAttribute(\"no-header\");\n }\n set noHeader(value) {\n if (value) this.setAttribute(\"no-header\", \"\");\n else this.removeAttribute(\"no-header\");\n }\n /**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */ get noAnimations() {\n return this.hasAttribute(\"no-animations\");\n }\n set noAnimations(value) {\n if (value) this.setAttribute(\"no-animations\", \"\");\n else this.removeAttribute(\"no-animations\");\n }\n /**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */ get noCloseButton() {\n return this.hasAttribute(\"no-close-button\");\n }\n set noCloseButton(value) {\n if (value) this.setAttribute(\"no-close-button\", \"\");\n else this.removeAttribute(\"no-close-button\");\n }\n /**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */ get fullscreen() {\n return this.hasAttribute(\"fullscreen\");\n }\n set fullscreen(value) {\n if (value) this.setAttribute(\"fullscreen\", \"\");\n else this.removeAttribute(\"fullscreen\");\n }\n /**\n * Applies a pulse effect on the dialog.\n */ #applyPulseEffectOnDialog() {\n if (this.#pulseAnimationTimeout) return;\n this.#dialogEl?.classList.add(\"dialog--pulse\");\n this.#pulseAnimationTimeout = setTimeout(()=>{\n this.#dialogEl?.classList.remove(\"dialog--pulse\");\n clearTimeout(this.#pulseAnimationTimeout);\n this.#pulseAnimationTimeout = void 0;\n }, $180b6dcf923bafc7$var$PULSE_ANIMATION_DURATION);\n }\n /**\n * Handles the close event of the dialog.\n */ #handleDialogClose = ()=>{\n // This is needed because the dialog element does not reset\n // the open property when the dialog is closed by the user.\n this.open = false;\n if (document.body) document.body.style.overflowY = \"\";\n this.dispatchEvent(new CustomEvent(\"me-close\", {\n bubbles: true,\n composed: true,\n detail: {\n element: this\n }\n }));\n };\n /**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */ #handleDialogCancel = (evt)=>{\n const requestCloseEvent = this.#createRequestCloseEvent(\"escape-key\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n /**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */ #handleCloseButtonClick = (evt)=>{\n const requestCloseEvent = this.#createRequestCloseEvent(\"close-button\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n /**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */ #handleDialogClick = (evt)=>{\n if (evt.target !== evt.currentTarget) return;\n const requestCloseEvent = this.#createRequestCloseEvent(\"backdrop-click\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented || this.staticBackdrop) {\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n return;\n }\n this.#dialogEl?.close();\n };\n /**\n * Handles the slotchange event of the footer slot.\n */ #handleFooterSlotChange = ()=>{\n if (this.#dialogEl === null) return;\n /** @type {Nullable} */ const footerEl = this.#dialogEl.querySelector(\".dialog__footer\");\n if (footerEl === null) return;\n const footerSlotNodes = this.#footerSlotEl?.assignedNodes();\n const hasFooterSlotNodes = footerSlotNodes ? footerSlotNodes.length > 0 : false;\n footerEl.hidden = !hasFooterSlotNodes;\n };\n /**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */ #createRequestCloseEvent(reason) {\n return new CustomEvent(\"me-request-close\", {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n reason: reason,\n element: this\n }\n });\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */ show() {\n if (this.open) return;\n this.open = true;\n }\n /**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */ hide() {\n if (!this.open) return;\n this.open = false;\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */ static defineCustomElement(elementName = \"modal-element\") {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $180b6dcf923bafc7$export$32589115725b904b);\n }\n}\n\n\n(0, $180b6dcf923bafc7$export$32589115725b904b).defineCustomElement();\n\n\nexport {$180b6dcf923bafc7$export$32589115725b904b as ModalElement};\n//# sourceMappingURL=modal-element-defined.js.map\n","import { ModalElement } from './modal-element.js';\n\nModalElement.defineCustomElement();\n\nexport { ModalElement };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\nconst PULSE_ANIMATION_DURATION = 300;\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */`\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;\n\n/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */\nclass ModalElement extends HTMLElement {\n /** @type {Nullable} */\n #dialogEl = null;\n\n /** @type {Nullable} */\n #footerSlotEl = null;\n\n /** @type {ReturnType | undefined} */\n #pulseAnimationTimeout = void 0;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n if (this.shadowRoot) {\n this.#dialogEl = this.shadowRoot.querySelector('dialog');\n this.#footerSlotEl = this.shadowRoot.querySelector('slot[name=\"footer\"]');\n }\n }\n\n static get observedAttributes() {\n return ['open', 'no-header', 'no-animations', 'no-close-button'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (this.#dialogEl === null) {\n return;\n }\n\n if (name === 'open' && oldValue !== newValue) {\n if (this.open) {\n this.#dialogEl.showModal();\n\n if (document.body) {\n document.body.style.overflowY = 'hidden';\n }\n\n this.dispatchEvent(new CustomEvent('me-open', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n }));\n } else {\n this.#dialogEl.close();\n }\n }\n\n if (name === 'no-header' && oldValue !== newValue) {\n /** @type {Nullable} */\n const headerEl = this.#dialogEl.querySelector('.dialog__header');\n\n if (headerEl !== null) {\n headerEl.hidden = this.noHeader;\n }\n }\n\n if (name === 'no-animations' && oldValue !== newValue) {\n this.#dialogEl.classList.toggle('dialog--no-animations', this.noAnimations);\n }\n\n if (name === 'no-close-button' && oldValue !== newValue) {\n /** @type {Nullable} */\n const closeBtnEl = this.#dialogEl.querySelector('.dialog__close');\n\n if (closeBtnEl !== null) {\n closeBtnEl.hidden = this.noCloseButton;\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('open');\n this.#upgradeProperty('staticBackdrop');\n this.#upgradeProperty('noHeader');\n this.#upgradeProperty('noAnimations');\n this.#upgradeProperty('noCloseButton');\n this.#upgradeProperty('fullscreen');\n\n this.#dialogEl?.addEventListener('click', this.#handleDialogClick);\n this.#dialogEl?.addEventListener('close', this.#handleDialogClose);\n this.#dialogEl?.addEventListener('cancel', this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.addEventListener('submit', this.#handleCloseButtonClick);\n this.#footerSlotEl?.addEventListener('slotchange', this.#handleFooterSlotChange);\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#pulseAnimationTimeout && clearTimeout(this.#pulseAnimationTimeout);\n this.#dialogEl?.addEventListener('click', this.#handleDialogClick);\n this.#dialogEl?.removeEventListener('close', this.#handleDialogClose);\n this.#dialogEl?.removeEventListener('cancel', this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.removeEventListener('submit', this.#handleCloseButtonClick);\n this.#footerSlotEl?.removeEventListener('slotchange', this.#handleFooterSlotChange);\n }\n\n /**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */\n get open() {\n return this.hasAttribute('open');\n }\n\n set open(value) {\n if (value) {\n this.setAttribute('open', '');\n } else {\n this.removeAttribute('open');\n }\n }\n\n /**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */\n get staticBackdrop() {\n return this.hasAttribute('static-backdrop');\n }\n\n set staticBackdrop(value) {\n if (value) {\n this.setAttribute('static-backdrop', '');\n } else {\n this.removeAttribute('static-backdrop');\n }\n }\n\n /**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */\n get noHeader() {\n return this.hasAttribute('no-header');\n }\n\n set noHeader(value) {\n if (value) {\n this.setAttribute('no-header', '');\n } else {\n this.removeAttribute('no-header');\n }\n }\n\n /**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */\n get noAnimations() {\n return this.hasAttribute('no-animations');\n }\n\n set noAnimations(value) {\n if (value) {\n this.setAttribute('no-animations', '');\n } else {\n this.removeAttribute('no-animations');\n }\n }\n\n /**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */\n get noCloseButton() {\n return this.hasAttribute('no-close-button');\n }\n\n set noCloseButton(value) {\n if (value) {\n this.setAttribute('no-close-button', '');\n } else {\n this.removeAttribute('no-close-button');\n }\n }\n\n /**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */\n get fullscreen() {\n return this.hasAttribute('fullscreen');\n }\n\n set fullscreen(value) {\n if (value) {\n this.setAttribute('fullscreen', '');\n } else {\n this.removeAttribute('fullscreen');\n }\n }\n\n /**\n * Applies a pulse effect on the dialog.\n */\n #applyPulseEffectOnDialog() {\n if (this.#pulseAnimationTimeout) {\n return;\n }\n\n this.#dialogEl?.classList.add('dialog--pulse');\n\n this.#pulseAnimationTimeout = setTimeout(() => {\n this.#dialogEl?.classList.remove('dialog--pulse');\n clearTimeout(this.#pulseAnimationTimeout);\n this.#pulseAnimationTimeout = void 0;\n }, PULSE_ANIMATION_DURATION);\n }\n\n /**\n * Handles the close event of the dialog.\n */\n #handleDialogClose = () => {\n // This is needed because the dialog element does not reset\n // the open property when the dialog is closed by the user.\n this.open = false;\n\n if (document.body) {\n document.body.style.overflowY = '';\n }\n\n this.dispatchEvent(new CustomEvent('me-close', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n }));\n };\n\n /**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */\n #handleDialogCancel = evt => {\n const requestCloseEvent = this.#createRequestCloseEvent('escape-key');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n\n /**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */\n #handleCloseButtonClick = evt => {\n const requestCloseEvent = this.#createRequestCloseEvent('close-button');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n\n /**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */\n #handleDialogClick = evt => {\n if (evt.target !== evt.currentTarget) {\n return;\n }\n\n const requestCloseEvent = this.#createRequestCloseEvent('backdrop-click');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented || this.staticBackdrop) {\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n return;\n }\n\n this.#dialogEl?.close();\n };\n\n /**\n * Handles the slotchange event of the footer slot.\n */\n #handleFooterSlotChange = () => {\n if (this.#dialogEl === null) {\n return;\n }\n\n /** @type {Nullable} */\n const footerEl = this.#dialogEl.querySelector('.dialog__footer');\n\n if (footerEl === null) {\n return;\n }\n\n const footerSlotNodes = this.#footerSlotEl?.assignedNodes();\n const hasFooterSlotNodes = footerSlotNodes ? footerSlotNodes.length > 0 : false;\n\n footerEl.hidden = !hasFooterSlotNodes;\n };\n\n /**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */\n #createRequestCloseEvent(reason) {\n return new CustomEvent('me-request-close', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n reason,\n element: this\n }\n });\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */\n show() {\n if (this.open) {\n return;\n }\n\n this.open = true;\n }\n\n /**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */\n hide() {\n if (!this.open) {\n return;\n }\n\n this.open = false;\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */\n static defineCustomElement(elementName = 'modal-element') {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, ModalElement);\n }\n }\n}\n\nexport { ModalElement };\n","Object.defineProperty({},\"FilesDropzone\",{get:function(){return m},set:void 0,enumerable:!0,configurable:!0});let e=new Map([[\"aac\",\"audio/aac\"],[\"abw\",\"application/x-abiword\"],[\"arc\",\"application/x-freearc\"],[\"avif\",\"image/avif\"],[\"avi\",\"video/x-msvideo\"],[\"azw\",\"application/vnd.amazon.ebook\"],[\"bin\",\"application/octet-stream\"],[\"bmp\",\"image/bmp\"],[\"bz\",\"application/x-bzip\"],[\"bz2\",\"application/x-bzip2\"],[\"cda\",\"application/x-cdf\"],[\"csh\",\"application/x-csh\"],[\"css\",\"text/css\"],[\"csv\",\"text/csv\"],[\"doc\",\"application/msword\"],[\"docx\",\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"],[\"eot\",\"application/vnd.ms-fontobject\"],[\"epub\",\"application/epub+zip\"],[\"gz\",\"application/gzip\"],[\"gif\",\"image/gif\"],[\"heic\",\"image/heic\"],[\"heif\",\"image/heif\"],[\"htm\",\"text/html\"],[\"html\",\"text/html\"],[\"ico\",\"image/vnd.microsoft.icon\"],[\"ics\",\"text/calendar\"],[\"jar\",\"application/java-archive\"],[\"jpeg\",\"image/jpeg\"],[\"jpg\",\"image/jpeg\"],[\"jxl\",\"image/jxl\"],[\"js\",\"text/javascript\"],[\"json\",\"application/json\"],[\"jsonld\",\"application/ld+json\"],[\"markdown\",\"text/markdown\"],[\"md\",\"text/markdown\"],[\"mid\",\"audio/midi\"],[\"midi\",\"audio/midi\"],[\"mjs\",\"text/javascript\"],[\"mp3\",\"audio/mpeg\"],[\"mp4\",\"video/mp4\"],[\"mpeg\",\"video/mpeg\"],[\"mpkg\",\"application/vnd.apple.installer+xml\"],[\"odp\",\"application/vnd.oasis.opendocument.presentation\"],[\"ods\",\"application/vnd.oasis.opendocument.spreadsheet\"],[\"odt\",\"application/vnd.oasis.opendocument.text\"],[\"oga\",\"audio/ogg\"],[\"ogv\",\"video/ogg\"],[\"ogx\",\"application/ogg\"],[\"opus\",\"audio/opus\"],[\"otf\",\"font/otf\"],[\"png\",\"image/png\"],[\"pdf\",\"application/pdf\"],[\"php\",\"application/x-httpd-php\"],[\"ppt\",\"application/vnd.ms-powerpoint\"],[\"pptx\",\"application/vnd.openxmlformats-officedocument.presentationml.presentation\"],[\"rar\",\"application/vnd.rar\"],[\"rtf\",\"application/rtf\"],[\"sh\",\"application/x-sh\"],[\"svg\",\"image/svg+xml\"],[\"swf\",\"application/x-shockwave-flash\"],[\"tar\",\"application/x-tar\"],[\"tif\",\"image/tiff\"],[\"tiff\",\"image/tiff\"],[\"ts\",\"video/mp2t\"],[\"ttf\",\"font/ttf\"],[\"txt\",\"text/plain\"],[\"vsd\",\"application/vnd.visio\"],[\"wav\",\"audio/wav\"],[\"weba\",\"audio/webm\"],[\"webm\",\"video/webm\"],[\"webp\",\"image/webp\"],[\"woff\",\"font/woff\"],[\"woff2\",\"font/woff2\"],[\"xhtml\",\"application/xhtml+xml\"],[\"xls\",\"application/vnd.ms-excel\"],[\"xlsx\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],[\"xml\",\"application/xml\"],[\"xul\",\"application/vnd.mozilla.xul+xml\"],[\"zip\",\"application/zip\"],[\"7z\",\"application/x-7z-compressed\"],[\"mkv\",\"video/x-matroska\"],[\"mov\",\"video/quicktime\"],[\"msg\",\"application/vnd.ms-outlook\"]]),t=[\".DS_Store\",\"Thumbs.db\"],o=t=>{let{name:o}=t;if(o&&-1!==o.lastIndexOf(\".\")&&!t.type){let i=(o.split(\".\").pop()||\"\").toLowerCase(),r=e.get(i);r&&Object.defineProperty(t,\"type\",{value:r,writable:!1,configurable:!1,enumerable:!0})}return t},i=(e,t)=>{let i=o(e);if(\"string\"!=typeof i.path){let{webkitRelativePath:o}=e;Object.defineProperty(i,\"path\",{value:\"string\"==typeof t?t:o||e.name,writable:!1,configurable:!1,enumerable:!0})}return i},r=async e=>await new Promise((t,o)=>{e.readEntries(t,o)}),a=async e=>{let t=[],o=await r(e);for(;o.length>0;)t.push(...o),o=await r(e);return t},n=e=>new Promise((t,o)=>{e.file(o=>t(i(o,e.fullPath)),o)}),s=async e=>{let o=[],i=[];for(let t of e){if(\"file\"!==t.kind)continue;let e=t.getAsEntry?t.getAsEntry():t.webkitGetAsEntry();i.push(e)}for(;i.length>0;){let e=i.shift();if(e){if(e.isFile){let i=await n(e);-1===t.indexOf(i.name)&&o.push(i)}else e.isDirectory&&i.push(...await a(e.createReader()))}}return o},d=async e=>{let o=[];for(let r of e)-1===t.indexOf(r.name)&&o.push(i(r));return o},l=async e=>e.dataTransfer?e.dataTransfer.items?await s(e.dataTransfer.items):await d(e.dataTransfer.files):await d(e.target.files),p=\"files-dropzone\",c=\"TOO_MANY_FILES\",h=document.createElement(\"template\"),u=`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;h.innerHTML=`\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;class m extends HTMLElement{#e=null;#t=null;constructor(){super(),this.shadowRoot||this.attachShadow({mode:\"open\"}).appendChild(h.content.cloneNode(!0)),this.shadowRoot&&(this.#e=this.shadowRoot.getElementById(\"fileInput\"),this.#t=this.shadowRoot.getElementById(\"dropzoneEl\"))}static get observedAttributes(){return[\"accept\",\"disabled\",\"multiple\",\"no-keyboard\"]}attributeChangedCallback(e,t,o){\"accept\"===e&&t!==o&&this.#e&&(this.#e.accept=this.accept),\"disabled\"===e&&t!==o&&this.#e&&(this.#e.disabled=this.disabled,this.disabled?this.#t?.removeAttribute(\"tabindex\"):this.#t?.setAttribute(\"tabindex\",\"0\")),\"multiple\"===e&&t!==o&&this.#e&&(this.#e.multiple=this.multiple),\"no-keyboard\"===e&&t!==o&&this.#t&&(this.noKeyboard?this.#t.removeAttribute(\"tabindex\"):this.#t.setAttribute(\"tabindex\",\"0\"))}connectedCallback(){this.#o(\"accept\"),this.#o(\"disabled\"),this.#o(\"maxFiles\"),this.#o(\"maxSize\"),this.#o(\"minSize\"),this.#o(\"multiple\"),this.#o(\"noClick\"),this.#o(\"noDrag\"),this.#o(\"noKeyboard\"),this.#o(\"autoFocus\"),this.#o(\"noStyle\"),this.#e?.addEventListener(\"change\",this.#i),this.#t?.addEventListener(\"dragenter\",this.#r),this.#t?.addEventListener(\"dragover\",this.#a),this.#t?.addEventListener(\"dragleave\",this.#n),this.#t?.addEventListener(\"drop\",this.#s),this.#t?.addEventListener(\"click\",this.#d),this.#t?.addEventListener(\"keyup\",this.#l),this.autoFocus&&this.#t?.focus()}disconnectedCallback(){this.#e?.removeEventListener(\"change\",this.#i),this.#t?.removeEventListener(\"dragenter\",this.#r),this.#t?.removeEventListener(\"dragover\",this.#a),this.#t?.removeEventListener(\"dragleave\",this.#n),this.#t?.removeEventListener(\"drop\",this.#s),this.#t?.removeEventListener(\"click\",this.#d),this.#t?.removeEventListener(\"keyup\",this.#l)}get accept(){return this.getAttribute(\"accept\")||\"\"}set accept(e){this.setAttribute(\"accept\",null!=e?e.toString():e)}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(e){this.toggleAttribute(\"disabled\",!!e)}get maxFiles(){let e=Number(this.getAttribute(\"max-files\"))||0;return e<=0?1/0:Math.floor(Math.abs(e))}set maxFiles(e){this.setAttribute(\"max-files\",null!=e?e.toString():e)}get maxSize(){let e=this.getAttribute(\"max-size\");if(null===e)return 1/0;let t=Number(e);return Number.isNaN(t)?1/0:t}set maxSize(e){this.setAttribute(\"max-size\",null!=e?e.toString():e)}get minSize(){let e=this.getAttribute(\"min-size\");if(null===e)return 0;let t=Number(e);return Number.isNaN(t)?0:t}set minSize(e){this.setAttribute(\"min-size\",null!=e?e.toString():e)}get multiple(){return this.hasAttribute(\"multiple\")}set multiple(e){this.toggleAttribute(\"multiple\",!!e)}get noClick(){return this.hasAttribute(\"no-click\")}set noClick(e){this.toggleAttribute(\"no-click\",!!e)}get noDrag(){return this.hasAttribute(\"no-drag\")}set noDrag(e){this.toggleAttribute(\"no-drag\",!!e)}get noKeyboard(){return this.hasAttribute(\"no-keyboard\")}set noKeyboard(e){this.toggleAttribute(\"no-keyboard\",!!e)}get autoFocus(){return this.hasAttribute(\"auto-focus\")}set autoFocus(e){this.toggleAttribute(\"auto-focus\",!!e)}get noStyle(){return this.hasAttribute(\"no-style\")}set noStyle(e){this.toggleAttribute(\"no-style\",!!e)}#i=async e=>{try{this.#p(await l(e))}catch(e){this.dispatchEvent(new CustomEvent(`${p}-error`,{bubbles:!0,composed:!0,detail:{error:e}}))}};#r=()=>{this.disabled||this.noDrag||this.dispatchEvent(new Event(`${p}-dragenter`,{bubbles:!0,composed:!0}))};#a=e=>{if(e.preventDefault(),this.disabled||this.noDrag){e.dataTransfer.dropEffect=\"none\";return}e.dataTransfer.dropEffect=\"copy\",this.#t&&(this.#t.classList.add(\"dropzone--dragover\"),this.#t.part.add(\"dropzone--dragover\")),this.dispatchEvent(new Event(`${p}-dragover`,{bubbles:!0,composed:!0}))};#n=()=>{this.disabled||this.noDrag||(this.#t&&(this.#t.classList.remove(\"dropzone--dragover\"),this.#t.part.remove(\"dropzone--dragover\")),this.dispatchEvent(new Event(`${p}-dragleave`,{bubbles:!0,composed:!0})))};#s=async e=>{if(!this.disabled&&!this.noDrag){e.preventDefault(),this.#t&&(this.#t.classList.remove(\"dropzone--dragover\"),this.#t.part.remove(\"dropzone--dragover\"));try{this.#p(await l(e))}catch(e){this.dispatchEvent(new CustomEvent(`${p}-error`,{bubbles:!0,composed:!0,detail:{error:e}}))}}};#d=()=>{this.disabled||this.noClick||this.#e?.click()};#l=e=>{this.disabled||this.noKeyboard||\" \"!==e.key&&\"Enter\"!==e.key||this.#e?.click()};#p(e){if(!Array.isArray(e)||!e.length)return;let t=[],o=[],i=e.length;if(!this.multiple&&i>1)for(let t of e)o.push({file:t,errors:[{code:c,message:\"Too many files selected. Only 1 file is allowed.\"}]});else if(this.multiple&&i>this.maxFiles)for(let t of e)o.push({file:t,errors:[{code:c,message:`Too many files selected. Only ${this.maxFiles} ${this.maxFiles>1?\"files are\":\"file is\"} allowed.`}]});else for(let i of e){let e=function(e,t=\"\"){if(!t)return!0;let o=[...new Set(t.split(\",\").map(e=>e.trim()).filter(Boolean))],i=e.type,r=i.replace(/\\/.*$/,\"\");for(let t of o)if(\".\"===t.charAt(0)){if(-1!==e.name.toLowerCase().indexOf(t.toLowerCase(),e.name.length-t.length))return!0}else if(/\\/\\*$/.test(t)){if(r===t.replace(/\\/.*$/,\"\"))return!0}else if(i===t)return!0;return!1}(i,this.accept),r=i.size>this.maxSize,a=i.size0&&this.dispatchEvent(new CustomEvent(`${p}-drop-accepted`,{bubbles:!0,composed:!0,detail:{acceptedFiles:t}})),o.length>0&&this.dispatchEvent(new CustomEvent(`${p}-drop-rejected`,{bubbles:!0,composed:!0,detail:{rejectedFiles:o}})),this.#e&&(this.#e.value=this.#e.defaultValue)}openFileDialog(){this.disabled||this.#e?.click()}#o(e){if(Object.prototype.hasOwnProperty.call(this,e)){let t=this[e];delete this[e],this[e]=t}}static defineCustomElement(e=p){\"undefined\"==typeof window||window.customElements.get(e)||window.customElements.define(e,m)}}m.defineCustomElement();export{m as FilesDropzone};\n//# sourceMappingURL=files-dropzone-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $862aa3736b0514bc$exports = {};\n\n$parcel$export($862aa3736b0514bc$exports, \"FilesDropzone\", function () { return $862aa3736b0514bc$export$6ccd1735166caad9; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ // @ts-check\n/**\n * Checks if a file is valid based on the accepted file type specifiers.\n *\n * @param {File} file - The File object to validate.\n * @param {string} [acceptedTypeSpecifiers=''] - The accepted file type specifiers.\n * @returns {boolean} - True if the file is valid, false otherwise.\n */ function $38f222170fd4d21a$export$7c47054fed488f80(file, acceptedTypeSpecifiers = \"\") {\n if (!acceptedTypeSpecifiers) return true;\n const acceptedMimeTypesList = [\n ...new Set(acceptedTypeSpecifiers.split(\",\").map((v)=>v.trim()).filter(Boolean))\n ];\n const fileMimeType = file.type;\n const baseMimeType = fileMimeType.replace(/\\/.*$/, \"\");\n for (const validType of acceptedMimeTypesList){\n if (validType.charAt(0) === \".\") {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) return true;\n } else if (/\\/\\*$/.test(validType)) {\n // Check for mime type that looks like \"image/*\" or similar.\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) return true;\n } else {\n if (fileMimeType === validType) return true;\n }\n }\n return false;\n}\n\n\n// @ts-check\n/**\n * A map of common file extensions and their associated MIME types.\n */ const $f31161edf38949e9$var$COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n [\n \"aac\",\n \"audio/aac\"\n ],\n [\n \"abw\",\n \"application/x-abiword\"\n ],\n [\n \"arc\",\n \"application/x-freearc\"\n ],\n [\n \"avif\",\n \"image/avif\"\n ],\n [\n \"avi\",\n \"video/x-msvideo\"\n ],\n [\n \"azw\",\n \"application/vnd.amazon.ebook\"\n ],\n [\n \"bin\",\n \"application/octet-stream\"\n ],\n [\n \"bmp\",\n \"image/bmp\"\n ],\n [\n \"bz\",\n \"application/x-bzip\"\n ],\n [\n \"bz2\",\n \"application/x-bzip2\"\n ],\n [\n \"cda\",\n \"application/x-cdf\"\n ],\n [\n \"csh\",\n \"application/x-csh\"\n ],\n [\n \"css\",\n \"text/css\"\n ],\n [\n \"csv\",\n \"text/csv\"\n ],\n [\n \"doc\",\n \"application/msword\"\n ],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ],\n [\n \"eot\",\n \"application/vnd.ms-fontobject\"\n ],\n [\n \"epub\",\n \"application/epub+zip\"\n ],\n [\n \"gz\",\n \"application/gzip\"\n ],\n [\n \"gif\",\n \"image/gif\"\n ],\n [\n \"heic\",\n \"image/heic\"\n ],\n [\n \"heif\",\n \"image/heif\"\n ],\n [\n \"htm\",\n \"text/html\"\n ],\n [\n \"html\",\n \"text/html\"\n ],\n [\n \"ico\",\n \"image/vnd.microsoft.icon\"\n ],\n [\n \"ics\",\n \"text/calendar\"\n ],\n [\n \"jar\",\n \"application/java-archive\"\n ],\n [\n \"jpeg\",\n \"image/jpeg\"\n ],\n [\n \"jpg\",\n \"image/jpeg\"\n ],\n [\n \"jxl\",\n \"image/jxl\"\n ],\n [\n \"js\",\n \"text/javascript\"\n ],\n [\n \"json\",\n \"application/json\"\n ],\n [\n \"jsonld\",\n \"application/ld+json\"\n ],\n [\n \"markdown\",\n \"text/markdown\"\n ],\n [\n \"md\",\n \"text/markdown\"\n ],\n [\n \"mid\",\n \"audio/midi\"\n ],\n [\n \"midi\",\n \"audio/midi\"\n ],\n [\n \"mjs\",\n \"text/javascript\"\n ],\n [\n \"mp3\",\n \"audio/mpeg\"\n ],\n [\n \"mp4\",\n \"video/mp4\"\n ],\n [\n \"mpeg\",\n \"video/mpeg\"\n ],\n [\n \"mpkg\",\n \"application/vnd.apple.installer+xml\"\n ],\n [\n \"odp\",\n \"application/vnd.oasis.opendocument.presentation\"\n ],\n [\n \"ods\",\n \"application/vnd.oasis.opendocument.spreadsheet\"\n ],\n [\n \"odt\",\n \"application/vnd.oasis.opendocument.text\"\n ],\n [\n \"oga\",\n \"audio/ogg\"\n ],\n [\n \"ogv\",\n \"video/ogg\"\n ],\n [\n \"ogx\",\n \"application/ogg\"\n ],\n [\n \"opus\",\n \"audio/opus\"\n ],\n [\n \"otf\",\n \"font/otf\"\n ],\n [\n \"png\",\n \"image/png\"\n ],\n [\n \"pdf\",\n \"application/pdf\"\n ],\n [\n \"php\",\n \"application/x-httpd-php\"\n ],\n [\n \"ppt\",\n \"application/vnd.ms-powerpoint\"\n ],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n ],\n [\n \"rar\",\n \"application/vnd.rar\"\n ],\n [\n \"rtf\",\n \"application/rtf\"\n ],\n [\n \"sh\",\n \"application/x-sh\"\n ],\n [\n \"svg\",\n \"image/svg+xml\"\n ],\n [\n \"swf\",\n \"application/x-shockwave-flash\"\n ],\n [\n \"tar\",\n \"application/x-tar\"\n ],\n [\n \"tif\",\n \"image/tiff\"\n ],\n [\n \"tiff\",\n \"image/tiff\"\n ],\n [\n \"ts\",\n \"video/mp2t\"\n ],\n [\n \"ttf\",\n \"font/ttf\"\n ],\n [\n \"txt\",\n \"text/plain\"\n ],\n [\n \"vsd\",\n \"application/vnd.visio\"\n ],\n [\n \"wav\",\n \"audio/wav\"\n ],\n [\n \"weba\",\n \"audio/webm\"\n ],\n [\n \"webm\",\n \"video/webm\"\n ],\n [\n \"webp\",\n \"image/webp\"\n ],\n [\n \"woff\",\n \"font/woff\"\n ],\n [\n \"woff2\",\n \"font/woff2\"\n ],\n [\n \"xhtml\",\n \"application/xhtml+xml\"\n ],\n [\n \"xls\",\n \"application/vnd.ms-excel\"\n ],\n [\n \"xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ],\n [\n \"xml\",\n \"application/xml\"\n ],\n [\n \"xul\",\n \"application/vnd.mozilla.xul+xml\"\n ],\n [\n \"zip\",\n \"application/zip\"\n ],\n [\n \"7z\",\n \"application/x-7z-compressed\"\n ],\n // Others\n [\n \"mkv\",\n \"video/x-matroska\"\n ],\n [\n \"mov\",\n \"video/quicktime\"\n ],\n [\n \"msg\",\n \"application/vnd.ms-outlook\"\n ]\n]);\nconst $f31161edf38949e9$var$FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n \".DS_Store\",\n \"Thumbs.db\" // Windows\n];\n/**\n * Adds a `type` property to the file object if it doesn't have one and the file has an extension.\n * This is needed because Firefox doesn't add a type property to files dragged from the desktop.\n * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=1424689\n *\n * @param {File} file - The file object to add the type property to.\n * @returns {File} - The file object with the type property added.\n */ const $f31161edf38949e9$var$toFileWithMimeType = (file)=>{\n const { name: name } = file;\n const hasExtension = name && name.lastIndexOf(\".\") !== -1;\n if (hasExtension && !file.type) {\n const extension = (name.split(\".\").pop() || \"\").toLowerCase();\n const type = $f31161edf38949e9$var$COMMON_MIME_TYPES.get(extension);\n if (type) Object.defineProperty(file, \"type\", {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return file;\n};\n/**\n * Adds a `path` property to the file object if it doesn't have one.\n * If `path` is not provided, the `webkitRelativePath` property of the file will be used\n * or the file's name if `webkitRelativePath` is not available.\n *\n * @param {File} file - The file object to add the path property to.\n * @param {string} [path] - The path to set on the file object.\n * @returns {File} - The file object with the path property added.\n */ const $f31161edf38949e9$var$toFileWithPath = (file, path)=>{\n const fileWithMimeType = $f31161edf38949e9$var$toFileWithMimeType(file);\n // @ts-ignore\n if (typeof fileWithMimeType.path !== \"string\") {\n const { webkitRelativePath: webkitRelativePath } = file;\n Object.defineProperty(fileWithMimeType, \"path\", {\n value: typeof path === \"string\" ? path : webkitRelativePath || file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return fileWithMimeType;\n};\n/**\n * Wrap `FileSystemDirectoryReader.readEntries` in a promise to make working with read entries easier.\n * https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */ const $f31161edf38949e9$var$readEntriesPromise = async (directoryReader)=>{\n return await new Promise((resolve, reject)=>{\n directoryReader.readEntries(resolve, reject);\n });\n};\n/**\n * Read all entries in a directory or sub-directory\n * by calling `readEntries` until it returns an empty array.\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */ const $f31161edf38949e9$var$readAllDirectoryEntries = async (directoryReader)=>{\n const entries = [];\n let readEntries = await $f31161edf38949e9$var$readEntriesPromise(directoryReader);\n while(readEntries.length > 0){\n entries.push(...readEntries);\n readEntries = await $f31161edf38949e9$var$readEntriesPromise(directoryReader);\n }\n return entries;\n};\n/**\n * Get a `File` object from a `FileSystemFileEntry` object.\n *\n * @param {FileSystemFileEntry} fileEntry - The file entry to get a `File` object from.\n * @returns {Promise} - A promise that resolves with a `File` object.\n */ const $f31161edf38949e9$var$getFileFromFileEntry = (fileEntry)=>{\n return new Promise((resolve, reject)=>{\n fileEntry.file((file)=>resolve($f31161edf38949e9$var$toFileWithPath(file, fileEntry.fullPath)), reject);\n });\n};\n/**\n * Get an array of `File` objects from a `DataTransferItemList` object.\n *\n * @param {DataTransferItemList} dataTransferItemList - The item list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */ const $f31161edf38949e9$var$getFilesFromDataTransferItemList = async (dataTransferItemList)=>{\n const files = [];\n // Chromium browsers read only 100 files at a time as per the spec, so we need to use\n // BFS (Breadth-first search) to traverse the entire directory/file structure.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#javascript_content\n const queue = [];\n for (const item of dataTransferItemList){\n if (item.kind !== \"file\") continue;\n // https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry\n // This function is implemented as `webkitGetAsEntry()` in non-WebKit browsers\n // including Firefox at this time but it may be renamed to `getAsEntry()` in the future.\n // @ts-ignore\n const entry = item.getAsEntry ? item.getAsEntry() : item.webkitGetAsEntry();\n queue.push(entry);\n }\n while(queue.length > 0){\n const entry = queue.shift();\n if (!entry) continue;\n else if (entry.isFile) {\n const file = await $f31161edf38949e9$var$getFileFromFileEntry(entry);\n if ($f31161edf38949e9$var$FILES_TO_IGNORE.indexOf(file.name) === -1) files.push(file);\n } else if (entry.isDirectory) queue.push(...await $f31161edf38949e9$var$readAllDirectoryEntries(entry.createReader()));\n }\n return files;\n};\n/**\n * Get an array of `File` objects from a `FileList` object.\n *\n * @param {FileList} fileList - The file list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */ const $f31161edf38949e9$var$getFilesFromFileList = async (fileList)=>{\n const files = [];\n for (const file of fileList)if ($f31161edf38949e9$var$FILES_TO_IGNORE.indexOf(file.name) === -1) files.push($f31161edf38949e9$var$toFileWithPath(file));\n return files;\n};\nconst $f31161edf38949e9$export$6d52664cd15c442 = async (evt)=>{\n if (evt.dataTransfer) return evt.dataTransfer.items ? await $f31161edf38949e9$var$getFilesFromDataTransferItemList(evt.dataTransfer.items) : await $f31161edf38949e9$var$getFilesFromFileList(evt.dataTransfer.files);\n return await $f31161edf38949e9$var$getFilesFromFileList(evt.target.files);\n};\n\n\nconst $862aa3736b0514bc$var$COMPONENT_NAME = \"files-dropzone\";\nconst $862aa3736b0514bc$var$TOO_MANY_FILES = \"TOO_MANY_FILES\";\nconst $862aa3736b0514bc$var$FILE_TOO_LARGE = \"FILE_TOO_LARGE\";\nconst $862aa3736b0514bc$var$FILE_TOO_SMALL = \"FILE_TOO_SMALL\";\nconst $862aa3736b0514bc$var$INVALID_MIME_TYPE = \"INVALID_MIME_TYPE\";\nconst $862aa3736b0514bc$var$template = document.createElement(\"template\");\nconst $862aa3736b0514bc$var$styles = /* css */ `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n$862aa3736b0514bc$var$template.innerHTML = /* html */ `\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\n/**\n * @summary A custom element that allows users to drag and drop files into it.\n * @documentation https://github.com/georapbox/files-dropzone-element\n *\n * @tagname files-dropzone - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {string} accept - A comma-separated list of unique file type specifiers describing file types to allow.\n * @property {boolean} disabled - Determines whether the dropzone is disabled.\n * @property {number} maxFiles - The maximum number of files allowed to be dropped.\n * @property {number} maxSize - The maximum file size allowed in bytes.\n * @property {number} minSize - The minimum file size allowed in bytes.\n * @property {boolean} multiple - Allows multiple files to be dropped.\n * @property {boolean} noClick - Prevents the file dialog from opening when the dropzone is clicked.\n * @property {boolean} noDrag - Prevents the dropzone from reacting to drag events.\n * @property {boolean} noKeyboard - Prevents the dropzone from reacting to keyboard events.\n * @property {boolean} autoFocus - Automatically focuses the dropzone when it's connected to the DOM.\n * @property {boolean} noStyle - Prevents the dropzone from applying any styling.\n *\n * @attribute {string} accept - Reflects the accept property.\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {number} max-files - Reflects the maxFiles property.\n * @attribute {number} max-size - Reflects the maxSize property.\n * @attribute {number} min-size - Reflects the minSize property.\n * @attribute {boolean} multiple - Reflects the multiple property.\n * @attribute {boolean} no-click - Reflects the noClick property.\n * @attribute {boolean} no-drag - Reflects the noDrag property.\n * @attribute {boolean} no-keyboard - Reflects the noKeyboard property.\n * @attribute {boolean} auto-focus - Reflects the autoFocus property.\n * @attribute {boolean} no-style - Reflects the noStyle property.\n *\n * @slot - The default slot content of the dropzone.\n *\n * @csspart dropzone - The dropzone element.\n * @csspart dropzone--dragover - The state of the dropzone when dragging over it.\n *\n * @cssproperty --dropzone-border-width - The border width of the dropzone.\n * @cssproperty --dropzone-border-style - The border style of the dropzone.\n * @cssproperty --dropzone-border-radius - The border radius of the dropzone.\n * @cssproperty --dropzone-border-color - The border color of the dropzone.\n * @cssproperty --dropzone-border-color-dragover - The border color of the dropzone when dragging over it.\n * @cssproperty --dropzone-border-color-hover - The border color of the dropzone when hovering over it.\n * @cssproperty --dropzone-background-color - The background color of the dropzone.\n * @cssproperty --dropzone-background-color-dragover - The background color of the dropzone when dragging over it.\n * @cssproperty --dropzone-background-color-hover - The background color of the dropzone when hovering over it.\n * @cssproperty --dropzone-body-color - The text color of the dropzone.\n * @cssproperty --dropzone-body-color-dragover - The text color of the dropzone when dragging over it.\n * @cssproperty --dropzone-body-color-hover - The text color of the dropzone when hovering over it.\n * @cssproperty --dropzone-focus-shadow-rgb - The RGB value of the dropzone's focus shadow.\n * @cssproperty --dropzone-focus-box-shadow - The box shadow of the dropzone when focused.\n * @cssproperty --dropzone-transition-duration - The transition's duration for the dropzone area.\n *\n * @event files-dropzone-drop - Fired when files are dropped.\n * @event files-dropzone-drop-accepted - Fired when files dropped files are accepted.\n * @event files-dropzone-drop-rejected - Fired when files dropped files are rejected.\n * @event files-dropzone-dragenter - Fired when files are dragged into the dropzone.\n * @event files-dropzone-dragover - Fired when files are dragged over the dropzone.\n * @event files-dropzone-dragleave - Fired when files are dragged out of the dropzone.\n * @event files-dropzone-error - Fired when there is any error in the process of reading dropped files or directories.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method openFileDialog - Instance method. Opens the file dialog programmatically.\n */ class $862aa3736b0514bc$export$6ccd1735166caad9 extends HTMLElement {\n /** @type {Nullable} */ #fileInput = null;\n /** @type {Nullable} */ #dropzoneEl = null;\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($862aa3736b0514bc$var$template.content.cloneNode(true));\n }\n if (this.shadowRoot) {\n this.#fileInput = /** @type {Nullable} */ this.shadowRoot.getElementById(\"fileInput\");\n this.#dropzoneEl = this.shadowRoot.getElementById(\"dropzoneEl\");\n }\n }\n static get observedAttributes() {\n return [\n \"accept\",\n \"disabled\",\n \"multiple\",\n \"no-keyboard\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"accept\" && oldValue !== newValue && this.#fileInput) this.#fileInput.accept = this.accept;\n if (name === \"disabled\" && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.disabled = this.disabled;\n if (this.disabled) this.#dropzoneEl?.removeAttribute(\"tabindex\");\n else this.#dropzoneEl?.setAttribute(\"tabindex\", \"0\");\n }\n if (name === \"multiple\" && oldValue !== newValue && this.#fileInput) this.#fileInput.multiple = this.multiple;\n if (name === \"no-keyboard\" && oldValue !== newValue && this.#dropzoneEl) {\n if (this.noKeyboard) this.#dropzoneEl.removeAttribute(\"tabindex\");\n else this.#dropzoneEl.setAttribute(\"tabindex\", \"0\");\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"accept\");\n this.#upgradeProperty(\"disabled\");\n this.#upgradeProperty(\"maxFiles\");\n this.#upgradeProperty(\"maxSize\");\n this.#upgradeProperty(\"minSize\");\n this.#upgradeProperty(\"multiple\");\n this.#upgradeProperty(\"noClick\");\n this.#upgradeProperty(\"noDrag\");\n this.#upgradeProperty(\"noKeyboard\");\n this.#upgradeProperty(\"autoFocus\");\n this.#upgradeProperty(\"noStyle\");\n this.#fileInput?.addEventListener(\"change\", this.#handleFileInputChange);\n this.#dropzoneEl?.addEventListener(\"dragenter\", this.#handleDragEnter);\n this.#dropzoneEl?.addEventListener(\"dragover\", this.#handleDragOver);\n this.#dropzoneEl?.addEventListener(\"dragleave\", this.#handleDragLeave);\n this.#dropzoneEl?.addEventListener(\"drop\", this.#handleDrop);\n this.#dropzoneEl?.addEventListener(\"click\", this.#handleClick);\n this.#dropzoneEl?.addEventListener(\"keyup\", this.#handleKeyUp);\n this.autoFocus && this.#dropzoneEl?.focus();\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#fileInput?.removeEventListener(\"change\", this.#handleFileInputChange);\n this.#dropzoneEl?.removeEventListener(\"dragenter\", this.#handleDragEnter);\n this.#dropzoneEl?.removeEventListener(\"dragover\", this.#handleDragOver);\n this.#dropzoneEl?.removeEventListener(\"dragleave\", this.#handleDragLeave);\n this.#dropzoneEl?.removeEventListener(\"drop\", this.#handleDrop);\n this.#dropzoneEl?.removeEventListener(\"click\", this.#handleClick);\n this.#dropzoneEl?.removeEventListener(\"keyup\", this.#handleKeyUp);\n }\n /**\n * @type {string} - A comma-separated list of unique file type specifiers describing file types to allow.\n * @attribute accept - Reflects the accept property.\n */ get accept() {\n return this.getAttribute(\"accept\") || \"\";\n }\n set accept(value) {\n this.setAttribute(\"accept\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} - Determines whether the dropzone is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */ get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n this.toggleAttribute(\"disabled\", !!value);\n }\n /**\n * @type {number} - The maximum number of files allowed to be dropped.\n * @default Infinity\n * @attribute max-files - Reflects the maxFiles property.\n */ get maxFiles() {\n const num = Number(this.getAttribute(\"max-files\")) || 0;\n if (num <= 0) return Infinity;\n return Math.floor(Math.abs(num));\n }\n set maxFiles(value) {\n this.setAttribute(\"max-files\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} - The maximum file size allowed in bytes.\n * @default Infinity\n * @attribute max-size - Reflects the maxSize property.\n */ get maxSize() {\n const value = this.getAttribute(\"max-size\");\n if (value === null) return Infinity;\n const num = Number(value);\n return Number.isNaN(num) ? Infinity : num;\n }\n set maxSize(value) {\n this.setAttribute(\"max-size\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} - The minimum file size allowed in bytes.\n * @default 0\n * @attribute min-size - Reflects the minSize property.\n */ get minSize() {\n const value = this.getAttribute(\"min-size\");\n if (value === null) return 0;\n const num = Number(value);\n return Number.isNaN(num) ? 0 : num;\n }\n set minSize(value) {\n this.setAttribute(\"min-size\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} - Allows multiple files to be dropped.\n * @default false\n * @attribute multiple - Reflects the multiple property.\n */ get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(value) {\n this.toggleAttribute(\"multiple\", !!value);\n }\n /**\n * @type {boolean} - Prevents the file dialog from opening when the dropzone is clicked.\n * @default false\n * @attribute no-click - Reflects the noClick property.\n */ get noClick() {\n return this.hasAttribute(\"no-click\");\n }\n set noClick(value) {\n this.toggleAttribute(\"no-click\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from reacting to drag events.\n * @default false\n * @attribute no-drag - Reflects the noDrag property.\n */ get noDrag() {\n return this.hasAttribute(\"no-drag\");\n }\n set noDrag(value) {\n this.toggleAttribute(\"no-drag\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from reacting to keyboard events.\n * @default false\n * @attribute no-keyboard - Reflects the noKeyboard property.\n */ get noKeyboard() {\n return this.hasAttribute(\"no-keyboard\");\n }\n set noKeyboard(value) {\n this.toggleAttribute(\"no-keyboard\", !!value);\n }\n /**\n * @type {boolean} - Automatically focuses the dropzone when it's connected to the DOM.\n * @default false\n * @attribute auto-focus - Reflects the autoFocus property.\n */ get autoFocus() {\n return this.hasAttribute(\"auto-focus\");\n }\n set autoFocus(value) {\n this.toggleAttribute(\"auto-focus\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from applying any styling.\n * @default false\n * @attribute no-style - Reflects the noStyle property.\n */ get noStyle() {\n return this.hasAttribute(\"no-style\");\n }\n set noStyle(value) {\n this.toggleAttribute(\"no-style\", !!value);\n }\n /**\n * Handles the change event of the file input.\n *\n * @param {*} evt - The event object.\n */ #handleFileInputChange = async (evt)=>{\n try {\n this.#handleFilesSelect(await (0, $f31161edf38949e9$export$6d52664cd15c442)(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n };\n /**\n * Handles the dragenter event of the dropzone.\n */ #handleDragEnter = ()=>{\n if (this.disabled || this.noDrag) return;\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragenter`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the dragover event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleDragOver = (evt)=>{\n evt.preventDefault();\n if (this.disabled || this.noDrag) {\n evt.dataTransfer.dropEffect = \"none\";\n return;\n }\n evt.dataTransfer.dropEffect = \"copy\";\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.add(\"dropzone--dragover\");\n this.#dropzoneEl.part.add(\"dropzone--dragover\");\n }\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragover`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the dragleave event of the dropzone.\n */ #handleDragLeave = ()=>{\n if (this.disabled || this.noDrag) return;\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove(\"dropzone--dragover\");\n this.#dropzoneEl.part.remove(\"dropzone--dragover\");\n }\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragleave`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the drop event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleDrop = async (evt)=>{\n if (this.disabled || this.noDrag) return;\n evt.preventDefault();\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove(\"dropzone--dragover\");\n this.#dropzoneEl.part.remove(\"dropzone--dragover\");\n }\n try {\n this.#handleFilesSelect(await (0, $f31161edf38949e9$export$6d52664cd15c442)(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n };\n /**\n * Handles the click event of the dropzone.\n */ #handleClick = ()=>{\n if (this.disabled || this.noClick) return;\n this.#fileInput?.click();\n };\n /**\n * Handles the keyup event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleKeyUp = (evt)=>{\n if (this.disabled || this.noKeyboard) return;\n if (evt.key === \" \" || evt.key === \"Enter\") this.#fileInput?.click();\n };\n /**\n * Handles the selection of files.\n *\n * @param {File[]} files - The files to handle.\n */ #handleFilesSelect(files) {\n if (!Array.isArray(files) || !files.length) return;\n const acceptedFiles = [];\n const rejectedFiles = [];\n const filesLength = files.length;\n // If the component is not in multiple mode, reject all files.\n if (!this.multiple && filesLength > 1) for (const file of files)rejectedFiles.push({\n file: file,\n errors: [\n {\n code: $862aa3736b0514bc$var$TOO_MANY_FILES,\n message: `Too many files selected. Only 1 file is allowed.`\n }\n ]\n });\n else if (this.multiple && filesLength > this.maxFiles) // If the component is in multiple mode, but the number of files exceeds\n // the maxFiles attribute, reject all files.\n for (const file of files)rejectedFiles.push({\n file: file,\n errors: [\n {\n code: $862aa3736b0514bc$var$TOO_MANY_FILES,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? \"files are\" : \"file is\"} allowed.`\n }\n ]\n });\n else // Validate each file. If it's valid, add it to the accepted files array,\n // otherwise add it to the rejected files array.\n for (const file of files){\n const fileHasValidType = (0, $38f222170fd4d21a$export$7c47054fed488f80)(file, this.accept);\n const fileExceedsMaxSize = file.size > this.maxSize;\n const fileIsSmallerThanMinSize = file.size < this.minSize;\n if (fileHasValidType && !fileExceedsMaxSize && !fileIsSmallerThanMinSize) acceptedFiles.push(file);\n else {\n const errors = [];\n if (!fileHasValidType) errors.push({\n code: $862aa3736b0514bc$var$INVALID_MIME_TYPE,\n message: `File type \"${file.type}\" is not accepted.`\n });\n if (fileExceedsMaxSize) errors.push({\n code: $862aa3736b0514bc$var$FILE_TOO_LARGE,\n message: `File size ${file.size} exceeds the maximum size of ${this.maxSize}.`\n });\n if (fileIsSmallerThanMinSize) errors.push({\n code: $862aa3736b0514bc$var$FILE_TOO_SMALL,\n message: `File size ${file.size} is smaller than the minimum size of ${this.minSize}.`\n });\n rejectedFiles.push({\n file: file,\n errors: errors\n });\n }\n }\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles: acceptedFiles,\n rejectedFiles: rejectedFiles\n }\n }));\n if (acceptedFiles.length > 0) this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop-accepted`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles: acceptedFiles\n }\n }));\n if (rejectedFiles.length > 0) this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop-rejected`, {\n bubbles: true,\n composed: true,\n detail: {\n rejectedFiles: rejectedFiles\n }\n }));\n if (this.#fileInput) this.#fileInput.value = this.#fileInput.defaultValue;\n }\n /**\n * Opens the file dialog programmatically.\n */ openFileDialog() {\n if (this.disabled) return;\n this.#fileInput?.click();\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'accept' | 'disabled' | 'maxFiles' | 'maxSize' | 'minSize' | 'multiple' | 'noClick' | 'noDrag' | 'noKeyboard' | 'autoFocus' | 'noStyle'} prop - The property name to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='files-dropzone'] - The name of the custom element.\n * @example\n *\n * FilesDropzone.defineCustomElement('my-dropzone');\n */ static defineCustomElement(elementName = $862aa3736b0514bc$var$COMPONENT_NAME) {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $862aa3736b0514bc$export$6ccd1735166caad9);\n }\n}\n\n\n(0, $862aa3736b0514bc$export$6ccd1735166caad9).defineCustomElement();\n\n\nexport {$862aa3736b0514bc$export$6ccd1735166caad9 as FilesDropzone};\n//# sourceMappingURL=files-dropzone-defined.js.map\n","import { FilesDropzone } from './files-dropzone.js';\n\nFilesDropzone.defineCustomElement();\n\nexport { FilesDropzone };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\nimport { isValidFile } from './utils/is-valid-file.js';\nimport { getFilesFromEvent } from './utils/files-selector.js';\n\nconst COMPONENT_NAME = 'files-dropzone';\nconst TOO_MANY_FILES = 'TOO_MANY_FILES';\nconst FILE_TOO_LARGE = 'FILE_TOO_LARGE';\nconst FILE_TOO_SMALL = 'FILE_TOO_SMALL';\nconst INVALID_MIME_TYPE = 'INVALID_MIME_TYPE';\nconst template = document.createElement('template');\n\nconst styles = /* css */`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n\ntemplate.innerHTML = /* html */`\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\n\n/**\n * @summary A custom element that allows users to drag and drop files into it.\n * @documentation https://github.com/georapbox/files-dropzone-element\n *\n * @tagname files-dropzone - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {string} accept - A comma-separated list of unique file type specifiers describing file types to allow.\n * @property {boolean} disabled - Determines whether the dropzone is disabled.\n * @property {number} maxFiles - The maximum number of files allowed to be dropped.\n * @property {number} maxSize - The maximum file size allowed in bytes.\n * @property {number} minSize - The minimum file size allowed in bytes.\n * @property {boolean} multiple - Allows multiple files to be dropped.\n * @property {boolean} noClick - Prevents the file dialog from opening when the dropzone is clicked.\n * @property {boolean} noDrag - Prevents the dropzone from reacting to drag events.\n * @property {boolean} noKeyboard - Prevents the dropzone from reacting to keyboard events.\n * @property {boolean} autoFocus - Automatically focuses the dropzone when it's connected to the DOM.\n * @property {boolean} noStyle - Prevents the dropzone from applying any styling.\n *\n * @attribute {string} accept - Reflects the accept property.\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {number} max-files - Reflects the maxFiles property.\n * @attribute {number} max-size - Reflects the maxSize property.\n * @attribute {number} min-size - Reflects the minSize property.\n * @attribute {boolean} multiple - Reflects the multiple property.\n * @attribute {boolean} no-click - Reflects the noClick property.\n * @attribute {boolean} no-drag - Reflects the noDrag property.\n * @attribute {boolean} no-keyboard - Reflects the noKeyboard property.\n * @attribute {boolean} auto-focus - Reflects the autoFocus property.\n * @attribute {boolean} no-style - Reflects the noStyle property.\n *\n * @slot - The default slot content of the dropzone.\n *\n * @csspart dropzone - The dropzone element.\n * @csspart dropzone--dragover - The state of the dropzone when dragging over it.\n *\n * @cssproperty --dropzone-border-width - The border width of the dropzone.\n * @cssproperty --dropzone-border-style - The border style of the dropzone.\n * @cssproperty --dropzone-border-radius - The border radius of the dropzone.\n * @cssproperty --dropzone-border-color - The border color of the dropzone.\n * @cssproperty --dropzone-border-color-dragover - The border color of the dropzone when dragging over it.\n * @cssproperty --dropzone-border-color-hover - The border color of the dropzone when hovering over it.\n * @cssproperty --dropzone-background-color - The background color of the dropzone.\n * @cssproperty --dropzone-background-color-dragover - The background color of the dropzone when dragging over it.\n * @cssproperty --dropzone-background-color-hover - The background color of the dropzone when hovering over it.\n * @cssproperty --dropzone-body-color - The text color of the dropzone.\n * @cssproperty --dropzone-body-color-dragover - The text color of the dropzone when dragging over it.\n * @cssproperty --dropzone-body-color-hover - The text color of the dropzone when hovering over it.\n * @cssproperty --dropzone-focus-shadow-rgb - The RGB value of the dropzone's focus shadow.\n * @cssproperty --dropzone-focus-box-shadow - The box shadow of the dropzone when focused.\n * @cssproperty --dropzone-transition-duration - The transition's duration for the dropzone area.\n *\n * @event files-dropzone-drop - Fired when files are dropped.\n * @event files-dropzone-drop-accepted - Fired when files dropped files are accepted.\n * @event files-dropzone-drop-rejected - Fired when files dropped files are rejected.\n * @event files-dropzone-dragenter - Fired when files are dragged into the dropzone.\n * @event files-dropzone-dragover - Fired when files are dragged over the dropzone.\n * @event files-dropzone-dragleave - Fired when files are dragged out of the dropzone.\n * @event files-dropzone-error - Fired when there is any error in the process of reading dropped files or directories.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method openFileDialog - Instance method. Opens the file dialog programmatically.\n */\nclass FilesDropzone extends HTMLElement {\n /** @type {Nullable} */\n #fileInput = null;\n\n /** @type {Nullable} */\n #dropzoneEl = null;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n if (this.shadowRoot) {\n this.#fileInput = /** @type {Nullable} */(this.shadowRoot.getElementById('fileInput'));\n this.#dropzoneEl = this.shadowRoot.getElementById('dropzoneEl');\n }\n }\n\n static get observedAttributes() {\n return ['accept', 'disabled', 'multiple', 'no-keyboard'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'accept' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.accept = this.accept;\n }\n\n if (name === 'disabled' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.disabled = this.disabled;\n\n if (this.disabled) {\n this.#dropzoneEl?.removeAttribute('tabindex');\n } else {\n this.#dropzoneEl?.setAttribute('tabindex', '0');\n }\n }\n\n if (name === 'multiple' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.multiple = this.multiple;\n }\n\n if (name === 'no-keyboard' && oldValue !== newValue && this.#dropzoneEl) {\n if (this.noKeyboard) {\n this.#dropzoneEl.removeAttribute('tabindex');\n } else {\n this.#dropzoneEl.setAttribute('tabindex', '0');\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('accept');\n this.#upgradeProperty('disabled');\n this.#upgradeProperty('maxFiles');\n this.#upgradeProperty('maxSize');\n this.#upgradeProperty('minSize');\n this.#upgradeProperty('multiple');\n this.#upgradeProperty('noClick');\n this.#upgradeProperty('noDrag');\n this.#upgradeProperty('noKeyboard');\n this.#upgradeProperty('autoFocus');\n this.#upgradeProperty('noStyle');\n\n this.#fileInput?.addEventListener('change', this.#handleFileInputChange);\n this.#dropzoneEl?.addEventListener('dragenter', this.#handleDragEnter);\n this.#dropzoneEl?.addEventListener('dragover', this.#handleDragOver);\n this.#dropzoneEl?.addEventListener('dragleave', this.#handleDragLeave);\n this.#dropzoneEl?.addEventListener('drop', this.#handleDrop);\n this.#dropzoneEl?.addEventListener('click', this.#handleClick);\n this.#dropzoneEl?.addEventListener('keyup', this.#handleKeyUp);\n\n this.autoFocus && this.#dropzoneEl?.focus();\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#fileInput?.removeEventListener('change', this.#handleFileInputChange);\n this.#dropzoneEl?.removeEventListener('dragenter', this.#handleDragEnter);\n this.#dropzoneEl?.removeEventListener('dragover', this.#handleDragOver);\n this.#dropzoneEl?.removeEventListener('dragleave', this.#handleDragLeave);\n this.#dropzoneEl?.removeEventListener('drop', this.#handleDrop);\n this.#dropzoneEl?.removeEventListener('click', this.#handleClick);\n this.#dropzoneEl?.removeEventListener('keyup', this.#handleKeyUp);\n }\n\n /**\n * @type {string} - A comma-separated list of unique file type specifiers describing file types to allow.\n * @attribute accept - Reflects the accept property.\n */\n get accept() {\n return this.getAttribute('accept') || '';\n }\n\n set accept(value) {\n this.setAttribute('accept', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} - Determines whether the dropzone is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n set disabled(value) {\n this.toggleAttribute('disabled', !!value);\n }\n\n /**\n * @type {number} - The maximum number of files allowed to be dropped.\n * @default Infinity\n * @attribute max-files - Reflects the maxFiles property.\n */\n get maxFiles() {\n const num = Number(this.getAttribute('max-files')) || 0;\n\n if (num <= 0) {\n return Infinity;\n }\n\n return Math.floor(Math.abs(num));\n }\n\n set maxFiles(value) {\n this.setAttribute('max-files', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} - The maximum file size allowed in bytes.\n * @default Infinity\n * @attribute max-size - Reflects the maxSize property.\n */\n get maxSize() {\n const value = this.getAttribute('max-size');\n\n if (value === null) {\n return Infinity;\n }\n\n const num = Number(value);\n\n return Number.isNaN(num) ? Infinity : num;\n }\n\n set maxSize(value) {\n this.setAttribute('max-size', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} - The minimum file size allowed in bytes.\n * @default 0\n * @attribute min-size - Reflects the minSize property.\n */\n get minSize() {\n const value = this.getAttribute('min-size');\n\n if (value === null) {\n return 0;\n }\n\n const num = Number(value);\n\n return Number.isNaN(num) ? 0 : num;\n }\n\n set minSize(value) {\n this.setAttribute('min-size', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} - Allows multiple files to be dropped.\n * @default false\n * @attribute multiple - Reflects the multiple property.\n */\n get multiple() {\n return this.hasAttribute('multiple');\n }\n\n set multiple(value) {\n this.toggleAttribute('multiple', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the file dialog from opening when the dropzone is clicked.\n * @default false\n * @attribute no-click - Reflects the noClick property.\n */\n get noClick() {\n return this.hasAttribute('no-click');\n }\n\n set noClick(value) {\n this.toggleAttribute('no-click', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from reacting to drag events.\n * @default false\n * @attribute no-drag - Reflects the noDrag property.\n */\n get noDrag() {\n return this.hasAttribute('no-drag');\n }\n\n set noDrag(value) {\n this.toggleAttribute('no-drag', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from reacting to keyboard events.\n * @default false\n * @attribute no-keyboard - Reflects the noKeyboard property.\n */\n get noKeyboard() {\n return this.hasAttribute('no-keyboard');\n }\n\n set noKeyboard(value) {\n this.toggleAttribute('no-keyboard', !!value);\n }\n\n /**\n * @type {boolean} - Automatically focuses the dropzone when it's connected to the DOM.\n * @default false\n * @attribute auto-focus - Reflects the autoFocus property.\n */\n get autoFocus() {\n return this.hasAttribute('auto-focus');\n }\n\n set autoFocus(value) {\n this.toggleAttribute('auto-focus', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from applying any styling.\n * @default false\n * @attribute no-style - Reflects the noStyle property.\n */\n get noStyle() {\n return this.hasAttribute('no-style');\n }\n\n set noStyle(value) {\n this.toggleAttribute('no-style', !!value);\n }\n\n /**\n * Handles the change event of the file input.\n *\n * @param {*} evt - The event object.\n */\n #handleFileInputChange = async evt => {\n try {\n this.#handleFilesSelect(await getFilesFromEvent(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n };\n\n /**\n * Handles the dragenter event of the dropzone.\n */\n #handleDragEnter = () => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragenter`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the dragover event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleDragOver = evt => {\n evt.preventDefault();\n\n if (this.disabled || this.noDrag) {\n evt.dataTransfer.dropEffect = 'none';\n return;\n }\n\n evt.dataTransfer.dropEffect = 'copy';\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.add('dropzone--dragover');\n this.#dropzoneEl.part.add('dropzone--dragover');\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragover`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the dragleave event of the dropzone.\n */\n #handleDragLeave = () => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove('dropzone--dragover');\n this.#dropzoneEl.part.remove('dropzone--dragover');\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragleave`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the drop event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleDrop = async evt => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n evt.preventDefault();\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove('dropzone--dragover');\n this.#dropzoneEl.part.remove('dropzone--dragover');\n }\n\n try {\n this.#handleFilesSelect(await getFilesFromEvent(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n };\n\n /**\n * Handles the click event of the dropzone.\n */\n #handleClick = () => {\n if (this.disabled || this.noClick) {\n return;\n }\n\n this.#fileInput?.click();\n };\n\n /**\n * Handles the keyup event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleKeyUp = evt => {\n if (this.disabled || this.noKeyboard) {\n return;\n }\n\n if (evt.key === ' ' || evt.key === 'Enter') {\n this.#fileInput?.click();\n }\n };\n\n /**\n * Handles the selection of files.\n *\n * @param {File[]} files - The files to handle.\n */\n #handleFilesSelect(files) {\n if (!Array.isArray(files) || !files.length) {\n return;\n }\n\n const acceptedFiles = [];\n const rejectedFiles = [];\n const filesLength = files.length;\n\n // If the component is not in multiple mode, reject all files.\n if (!this.multiple && filesLength > 1) {\n for (const file of files) {\n rejectedFiles.push({\n file,\n errors: [{\n code: TOO_MANY_FILES,\n message: `Too many files selected. Only 1 file is allowed.`\n }]\n });\n }\n } else if (this.multiple && filesLength > this.maxFiles) {\n // If the component is in multiple mode, but the number of files exceeds\n // the maxFiles attribute, reject all files.\n for (const file of files) {\n rejectedFiles.push({\n file,\n errors: [{\n code: TOO_MANY_FILES,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? 'files are' : 'file is'} allowed.`\n }]\n });\n }\n } else {\n // Validate each file. If it's valid, add it to the accepted files array,\n // otherwise add it to the rejected files array.\n for (const file of files) {\n const fileHasValidType = isValidFile(file, this.accept);\n const fileExceedsMaxSize = file.size > this.maxSize;\n const fileIsSmallerThanMinSize = file.size < this.minSize;\n\n if (fileHasValidType && !fileExceedsMaxSize && !fileIsSmallerThanMinSize) {\n acceptedFiles.push(file);\n } else {\n const errors = [];\n\n if (!fileHasValidType) {\n errors.push({\n code: INVALID_MIME_TYPE,\n message: `File type \"${file.type}\" is not accepted.`\n });\n }\n\n if (fileExceedsMaxSize) {\n errors.push({\n code: FILE_TOO_LARGE,\n message: `File size ${file.size} exceeds the maximum size of ${this.maxSize}.`\n });\n }\n\n if (fileIsSmallerThanMinSize) {\n errors.push({\n code: FILE_TOO_SMALL,\n message: `File size ${file.size} is smaller than the minimum size of ${this.minSize}.`\n });\n }\n\n rejectedFiles.push({ file, errors });\n }\n }\n }\n\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles,\n rejectedFiles\n }\n }));\n\n if (acceptedFiles.length > 0) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop-accepted`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles\n }\n }));\n }\n\n if (rejectedFiles.length > 0) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop-rejected`, {\n bubbles: true,\n composed: true,\n detail: {\n rejectedFiles\n }\n }));\n }\n\n if (this.#fileInput) {\n this.#fileInput.value = this.#fileInput.defaultValue;\n }\n }\n\n /**\n * Opens the file dialog programmatically.\n */\n openFileDialog() {\n if (this.disabled) {\n return;\n }\n\n this.#fileInput?.click();\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'accept' | 'disabled' | 'maxFiles' | 'maxSize' | 'minSize' | 'multiple' | 'noClick' | 'noDrag' | 'noKeyboard' | 'autoFocus' | 'noStyle'} prop - The property name to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='files-dropzone'] - The name of the custom element.\n * @example\n *\n * FilesDropzone.defineCustomElement('my-dropzone');\n */\n static defineCustomElement(elementName = COMPONENT_NAME) {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, FilesDropzone);\n }\n }\n}\n\nexport { FilesDropzone };\n","// @ts-check\n\n/**\n * Checks if a file is valid based on the accepted file type specifiers.\n *\n * @param {File} file - The File object to validate.\n * @param {string} [acceptedTypeSpecifiers=''] - The accepted file type specifiers.\n * @returns {boolean} - True if the file is valid, false otherwise.\n */\nexport function isValidFile(file, acceptedTypeSpecifiers = '') {\n if (!acceptedTypeSpecifiers) {\n return true;\n }\n\n const acceptedMimeTypesList = [\n ...new Set(acceptedTypeSpecifiers.split(',').map(v => v.trim()).filter(Boolean))\n ];\n\n const fileMimeType = file.type;\n const baseMimeType = fileMimeType.replace(/\\/.*$/, '');\n\n for (const validType of acceptedMimeTypesList) {\n if (validType.charAt(0) === '.') {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n return true;\n }\n } else if (/\\/\\*$/.test(validType)) {\n // Check for mime type that looks like \"image/*\" or similar.\n if (baseMimeType === validType.replace(/\\/.*$/, '')) {\n return true;\n }\n } else {\n if (fileMimeType === validType) {\n return true;\n }\n }\n }\n\n return false;\n}\n","// @ts-check\n\n/**\n * A map of common file extensions and their associated MIME types.\n */\nconst COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n ['aac', 'audio/aac'],\n ['abw', 'application/x-abiword'],\n ['arc', 'application/x-freearc'],\n ['avif', 'image/avif'],\n ['avi', 'video/x-msvideo'],\n ['azw', 'application/vnd.amazon.ebook'],\n ['bin', 'application/octet-stream'],\n ['bmp', 'image/bmp'],\n ['bz', 'application/x-bzip'],\n ['bz2', 'application/x-bzip2'],\n ['cda', 'application/x-cdf'],\n ['csh', 'application/x-csh'],\n ['css', 'text/css'],\n ['csv', 'text/csv'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n ['eot', 'application/vnd.ms-fontobject'],\n ['epub', 'application/epub+zip'],\n ['gz', 'application/gzip'],\n ['gif', 'image/gif'],\n ['heic', 'image/heic'],\n ['heif', 'image/heif'],\n ['htm', 'text/html'],\n ['html', 'text/html'],\n ['ico', 'image/vnd.microsoft.icon'],\n ['ics', 'text/calendar'],\n ['jar', 'application/java-archive'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['jxl', 'image/jxl'],\n ['js', 'text/javascript'],\n ['json', 'application/json'],\n ['jsonld', 'application/ld+json'],\n ['markdown', 'text/markdown'],\n ['md', 'text/markdown'],\n ['mid', 'audio/midi'],\n ['midi', 'audio/midi'],\n ['mjs', 'text/javascript'],\n ['mp3', 'audio/mpeg'],\n ['mp4', 'video/mp4'],\n ['mpeg', 'video/mpeg'],\n ['mpkg', 'application/vnd.apple.installer+xml'],\n ['odp', 'application/vnd.oasis.opendocument.presentation'],\n ['ods', 'application/vnd.oasis.opendocument.spreadsheet'],\n ['odt', 'application/vnd.oasis.opendocument.text'],\n ['oga', 'audio/ogg'],\n ['ogv', 'video/ogg'],\n ['ogx', 'application/ogg'],\n ['opus', 'audio/opus'],\n ['otf', 'font/otf'],\n ['png', 'image/png'],\n ['pdf', 'application/pdf'],\n ['php', 'application/x-httpd-php'],\n ['ppt', 'application/vnd.ms-powerpoint'],\n ['pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'],\n ['rar', 'application/vnd.rar'],\n ['rtf', 'application/rtf'],\n ['sh', 'application/x-sh'],\n ['svg', 'image/svg+xml'],\n ['swf', 'application/x-shockwave-flash'],\n ['tar', 'application/x-tar'],\n ['tif', 'image/tiff'],\n ['tiff', 'image/tiff'],\n ['ts', 'video/mp2t'],\n ['ttf', 'font/ttf'],\n ['txt', 'text/plain'],\n ['vsd', 'application/vnd.visio'],\n ['wav', 'audio/wav'],\n ['weba', 'audio/webm'],\n ['webm', 'video/webm'],\n ['webp', 'image/webp'],\n ['woff', 'font/woff'],\n ['woff2', 'font/woff2'],\n ['xhtml', 'application/xhtml+xml'],\n ['xls', 'application/vnd.ms-excel'],\n ['xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],\n ['xml', 'application/xml'],\n ['xul', 'application/vnd.mozilla.xul+xml'],\n ['zip', 'application/zip'],\n ['7z', 'application/x-7z-compressed'],\n\n // Others\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['msg', 'application/vnd.ms-outlook']\n]);\n\nconst FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store', // macOs\n 'Thumbs.db' // Windows\n];\n\n/**\n * Adds a `type` property to the file object if it doesn't have one and the file has an extension.\n * This is needed because Firefox doesn't add a type property to files dragged from the desktop.\n * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=1424689\n *\n * @param {File} file - The file object to add the type property to.\n * @returns {File} - The file object with the type property added.\n */\nconst toFileWithMimeType = file => {\n const { name } = file;\n const hasExtension = name && name.lastIndexOf('.') !== -1;\n\n if (hasExtension && !file.type) {\n const extension = (name.split('.').pop() || '').toLowerCase();\n const type = COMMON_MIME_TYPES.get(extension);\n\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n\n return file;\n};\n\n/**\n * Adds a `path` property to the file object if it doesn't have one.\n * If `path` is not provided, the `webkitRelativePath` property of the file will be used\n * or the file's name if `webkitRelativePath` is not available.\n *\n * @param {File} file - The file object to add the path property to.\n * @param {string} [path] - The path to set on the file object.\n * @returns {File} - The file object with the path property added.\n */\nconst toFileWithPath = (file, path) => {\n const fileWithMimeType = toFileWithMimeType(file);\n\n // @ts-ignore\n if (typeof fileWithMimeType.path !== 'string') {\n const { webkitRelativePath } = file;\n\n Object.defineProperty(fileWithMimeType, 'path', {\n value: typeof path === 'string' ? path : webkitRelativePath || file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n\n return fileWithMimeType;\n};\n\n/**\n * Wrap `FileSystemDirectoryReader.readEntries` in a promise to make working with read entries easier.\n * https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */\nconst readEntriesPromise = async directoryReader => {\n return await new Promise((resolve, reject) => {\n directoryReader.readEntries(resolve, reject);\n });\n};\n\n/**\n * Read all entries in a directory or sub-directory\n * by calling `readEntries` until it returns an empty array.\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */\nconst readAllDirectoryEntries = async directoryReader => {\n const entries = [];\n let readEntries = await readEntriesPromise(directoryReader);\n\n while (readEntries.length > 0) {\n entries.push(...readEntries);\n readEntries = await readEntriesPromise(directoryReader);\n }\n\n return entries;\n};\n\n/**\n * Get a `File` object from a `FileSystemFileEntry` object.\n *\n * @param {FileSystemFileEntry} fileEntry - The file entry to get a `File` object from.\n * @returns {Promise} - A promise that resolves with a `File` object.\n */\nconst getFileFromFileEntry = fileEntry => {\n return new Promise((resolve, reject) => {\n fileEntry.file(file => resolve(toFileWithPath(file, fileEntry.fullPath)), reject);\n });\n};\n\n/**\n * Get an array of `File` objects from a `DataTransferItemList` object.\n *\n * @param {DataTransferItemList} dataTransferItemList - The item list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nconst getFilesFromDataTransferItemList = async dataTransferItemList => {\n const files = [];\n\n // Chromium browsers read only 100 files at a time as per the spec, so we need to use\n // BFS (Breadth-first search) to traverse the entire directory/file structure.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#javascript_content\n const queue = [];\n\n for (const item of dataTransferItemList) {\n if (item.kind !== 'file') {\n // Ignore non-file items, such as links.\n continue;\n }\n\n // https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry\n // This function is implemented as `webkitGetAsEntry()` in non-WebKit browsers\n // including Firefox at this time but it may be renamed to `getAsEntry()` in the future.\n // @ts-ignore\n const entry = item.getAsEntry ? item.getAsEntry() : item.webkitGetAsEntry();\n\n queue.push(entry);\n }\n\n while (queue.length > 0) {\n const entry = queue.shift();\n\n if (!entry) {\n continue;\n } else if (entry.isFile) {\n const file = await getFileFromFileEntry(entry);\n\n if (FILES_TO_IGNORE.indexOf(file.name) === -1) {\n files.push(file);\n }\n } else if (entry.isDirectory) {\n queue.push(...await readAllDirectoryEntries(entry.createReader()));\n }\n }\n\n return files;\n};\n\n/**\n * Get an array of `File` objects from a `FileList` object.\n *\n * @param {FileList} fileList - The file list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nconst getFilesFromFileList = async fileList => {\n const files = [];\n\n for (const file of fileList) {\n if (FILES_TO_IGNORE.indexOf(file.name) === -1) {\n files.push(toFileWithPath(file));\n }\n }\n\n return files;\n};\n\n/**\n * Get an array of `File` objects from an event.\n * This function supports both `drop` and `change` events.\n *\n * @param {*} evt - The event to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nexport const getFilesFromEvent = async evt => {\n if (evt.dataTransfer) {\n return evt.dataTransfer.items\n ? await getFilesFromDataTransferItemList(evt.dataTransfer.items)\n : await getFilesFromFileList(evt.dataTransfer.files);\n }\n\n return await getFilesFromFileList(evt.target.files);\n};\n","/**\n * Removes one or more elements from an array at the specified index(es).\n *\n * @param {Array} array The initial array to remove elements from.\n * @param {Number} ...indexes The index(es) of the elements to be removed. Non numbers are ignored.\n * @throws {TypeError} If `array` is not array.\n * @returns {Array} The result array with the elements specified removed.\n * @example\n *\n * const arr = [1, 2, 3, 4, 5];\n *\n * remove(arr, 0);\n * // => [2, 3, 4, 5]\n *\n * remove(arr, 0, 1);\n * // => [3, 4, 5]\n *\n * remove(arr, 0, 4);\n * // => [2, 3, 4]\n *\n * remove(arr);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length - 1);\n * // => [1, 2, 3, 4]\n *\n * remove(arr, NaN);\n * // => [1, 2, 3, 4, 5]\n */\nexport const arrayRemove = (array, ...indexes) => {\n if (!Array.isArray(array)) {\n throw new TypeError('Expected an array for first argument');\n }\n\n return array.filter((_, i) => indexes.indexOf(i) === -1);\n};\n","/**\n * Generates a unique id of the form `${prefix}-${randomString}-${suffix}`.\n *\n * @param {string} [prefix=''] - The prefix to use for the id.\n * @param {string} [suffix=''] - The suffix to use for the id.\n * @returns {string} - The unique id.\n */\nconst uid = (prefix = '', suffix = '') => {\n const prefixString = typeof prefix === 'string' && prefix !== '' ? prefix + '-' : '';\n const suffixString = typeof suffix === 'string' && suffix !== '' ? '-' + suffix : '';\n const randomString = Math.random().toString(36).substring(2, 8); // Pseudo-random string of six alphanumeric characters.\n\n return `${prefixString}${randomString}${suffixString}`;\n};\n\nexport { uid };\n","export const ACCEPTED_MIME_TYPES = ['image/jpg', 'image/jpeg', 'image/png', 'image/apng', 'image/gif', 'image/webp', 'image/avif'];\n","import Pressuru from 'url:../assets/fonts/Pressuru/Pressuru.ttf';\nimport OswaldRegular from 'url:../assets/fonts/Oswald/Oswald-Regular.ttf';\nimport OswaldBold from 'url:../assets/fonts/Oswald/Oswald-Bold.ttf';\nimport RobotoRegular from 'url:../assets/fonts/Roboto/Roboto-Regular.ttf';\nimport RobotoBold from 'url:../assets/fonts/Roboto/Roboto-Bold.ttf';\nimport RobotoCondensedRegular from 'url:../assets/fonts/RobotoCondensed/RobotoCondensed-Regular.ttf';\nimport RobotoCondensedBold from 'url:../assets/fonts/RobotoCondensed/RobotoCondensed-Bold.ttf';\nimport CourierPrimeRegular from 'url:../assets/fonts/CourierPrime/CourierPrime-Regular.ttf';\nimport CourierPrimeBold from 'url:../assets/fonts/CourierPrime/CourierPrime-Bold.ttf';\nimport OpenSansRegular from 'url:../assets/fonts/OpenSans/OpenSans-Regular.ttf';\nimport OpenSansBold from 'url:../assets/fonts/OpenSans/OpenSans-Bold.ttf';\n\nexport const customFonts = [\n { name: 'Pressuru', label: 'Pressuru', path: Pressuru, style: 'normal', weight: '400' },\n { name: 'Oswald-Regular', label: 'Oswald', path: OswaldRegular, style: 'normal', weight: '400' },\n { name: 'Oswald-Bold', label: 'Oswald Bold', path: OswaldBold, style: 'normal', weight: '700' },\n { name: 'Roboto-Regular', label: 'Roboto', path: RobotoRegular, style: 'normal', weight: '400' },\n { name: 'Roboto-Bold', label: 'Roboto Bold', path: RobotoBold, style: 'normal', weight: '700' },\n { name: 'RobotoCondensed-Regular', label: 'Roboto Condensed', path: RobotoCondensedRegular, style: 'normal', weight: '400' },\n { name: 'RobotoCondensed-Bold', label: 'Roboto Condensed Bold', path: RobotoCondensedBold, style: 'normal', weight: '700' },\n { name: 'CourierPrime-Regular', label: 'Courier Prime', path: CourierPrimeRegular, style: 'normal', weight: '400' },\n { name: 'CourierPrime-Bold', label: 'Courier Prime Bold', path: CourierPrimeBold, style: 'normal', weight: '700' },\n { name: 'OpenSans-Regular', label: 'Open Sans', path: OpenSansRegular, style: 'normal', weight: '400' },\n { name: 'OpenSans-Bold', label: 'Open Sans Bold', path: OpenSansBold, style: 'normal', weight: '400' }\n];\n\nexport const loadCustomFont = async (name, path, options = {}) => {\n try {\n const font = new FontFace(name, `url(${path})`, { ...options });\n await font.load();\n document.fonts.add(font);\n } catch (err) {\n console.error(err);\n }\n};\n","module.exports = new __parcel__URL__(\"Pressuru.684952ea.ttf\").toString();","module.exports = new __parcel__URL__(\"Oswald-Regular.89ec7d89.ttf\").toString();","module.exports = new __parcel__URL__(\"Oswald-Bold.0f6a7ca6.ttf\").toString();","module.exports = new __parcel__URL__(\"Roboto-Regular.ca197847.ttf\").toString();","module.exports = new __parcel__URL__(\"Roboto-Bold.fdb9b54a.ttf\").toString();","module.exports = new __parcel__URL__(\"RobotoCondensed-Regular.d585f5c7.ttf\").toString();","module.exports = new __parcel__URL__(\"RobotoCondensed-Bold.e1f96d4b.ttf\").toString();","module.exports = new __parcel__URL__(\"CourierPrime-Regular.3a25a501.ttf\").toString();","module.exports = new __parcel__URL__(\"CourierPrime-Bold.3d6bf689.ttf\").toString();","module.exports = new __parcel__URL__(\"OpenSans-Regular.edf9e01b.ttf\").toString();","module.exports = new __parcel__URL__(\"OpenSans-Bold.8fceb72b.ttf\").toString();","import { ACCEPTED_MIME_TYPES } from './constants.js';\n\nexport const fileFromUrl = async (options = {}) => {\n const res = await fetch(options.url);\n const blob = await res.blob();\n const mimeType = options.mimeType || blob.type || '';\n\n if (!ACCEPTED_MIME_TYPES.includes(mimeType)) {\n throw new Error(`This is not an accepted image format. Accepted MIME types are: ${ACCEPTED_MIME_TYPES.join(', ')}`);\n }\n\n return new File([blob], options.filename || '', blob);\n};\n","const errorsContainer = document.getElementById('errorsContainer');\n\nconst hideError = evt => {\n const target = evt.currentTarget;\n target.removeEventListener('click', hideError);\n errorsContainer.removeChild(target.parentNode);\n};\n\nexport const toastAlert = (message = '', type = 'info') => {\n const types = ['info', 'warning', 'danger'];\n\n if (!types.includes(type)) {\n type = 'info';\n }\n\n const template = /* html */`\n ${message}\n \n `;\n\n const div = document.createElement('div');\n div.className = `alert alert-${type} alert-dismissible text-break mb-2 fade`;\n div.innerHTML = template;\n div.querySelector('button').addEventListener('click', hideError);\n errorsContainer.appendChild(div);\n setTimeout(() => div.classList.add('show'), 100);\n};\n","import { customFonts } from './custom-fonts.js';\n\nexport const createTextBox = (index, data = {}) => {\n const inputTemplate = /* html */`\n
\n \n\n \n\n
\n \n \n \n
\n
\n\n
\n
\n
\n \n\n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n
\n `;\n\n const fragment = document.createDocumentFragment();\n const div = document.createElement('div');\n\n div.className = 'bg-light border shadow-sm mb-3 rounded';\n div.setAttribute('data-section', 'textBox');\n div.setAttribute('data-index', index);\n div.innerHTML = inputTemplate;\n div.querySelector('[data-input=\"font\"]').value = data.font;\n div.querySelector('[data-input=\"textAlign\"]').value = data.textAlign;\n div.querySelector('[data-input=\"allCaps\"]').checked = data.allCaps;\n\n return fragment.appendChild(div);\n};\n","export const drawCanvas = (image, canvas, ctx, textOptions = []) => {\n if (image == null) {\n return;\n }\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (typeof image === 'string') { // Assume it's a color\n ctx.fillStyle = image;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else {\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n }\n\n textOptions.forEach(function (item, index) {\n ctx.save();\n\n ctx.font = `${item.fontWeight} ${item.fontSize}px ${item.font}`;\n ctx.fillStyle = item.fillColor;\n ctx.textAlign = item.textAlign;\n ctx.strokeStyle = item.shadowColor;\n\n const multiplier = index + 1;\n const lineHeight = ctx.measureText('M').width + item.fontSize / 2;\n const xPos = canvas.width / 2;\n const shadowBlur = item.shadowBlur;\n const text = item.allCaps === true ? item.text.toUpperCase() : item.text;\n const textLines = text.split('\\n');\n\n if (shadowBlur !== 0) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = item.shadowColor;\n }\n\n ctx.translate(xPos + item.offsetX, lineHeight * multiplier + item.offsetY);\n ctx.rotate(item.rotate * Math.PI / 180);\n // first draw each line with shadow\n textLines.forEach((text, index) => ctx.fillText(text, 0, index * lineHeight));\n // since shadows of multiline text may be drawn over letters of neighbour lines\n // (when shadow blur is big enough), re-draw text without shadows.\n ctx.shadowBlur = 0;\n textLines.forEach((text, index) => ctx.fillText(text, 0, index * lineHeight));\n if (item.borderWidth > 0) {\n ctx.lineWidth = item.borderWidth;\n textLines.forEach((text, index) => ctx.strokeText(text, 0, index * lineHeight));\n }\n\n ctx.restore();\n });\n};\n"],"names":["$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","$7a2aca835bb05064$export$c37129e465f64ef0","navigator","canShare","id","exports","init","module","call","err","Error","code","register","parcelRegister","Object","defineProperty","get","$ef7689007096c8a0$export$6503ec6e8aabbaf","set","v","enumerable","configurable","$ef7689007096c8a0$var$mapping","Map","baseUrl","manifest","i","length","path","URL","url","toString","JSON","parse","$cd62c5572235e737$export$30b344bef3e55b67","$cd62c5572235e737$var$t","$cd62c5572235e737$var$e","document","createElement","innerHTML","HTMLElement","t","e","s","constructor","shadowRoot","attachShadow","mode","delegatesFocus","appendChild","content","cloneNode","querySelector","observedAttributes","attributeChangedCallback","toggleAttribute","disabled","setAttribute","part","contains","toggle","connectedCallback","r","addEventListener","n","disconnectedCallback","removeEventListener","hasAttribute","shareUrl","getAttribute","shareTitle","shareText","shareFiles","Array","isArray","share","title","text","files","dispatchEvent","CustomEvent","bubbles","composed","detail","shareData","name","error","preventDefault","target","nodeName","assignedElements","flatten","find","prototype","hasOwnProperty","defineCustomElement","customElements","define","$dced0d224c6d876e$export$cc30a98fe3890794","$dced0d224c6d876e$var$t","Number","isNaN","Math","min","max","$dced0d224c6d876e$var$e","$dced0d224c6d876e$var$i","$dced0d224c6d876e$var$o","o","l","getSupportedConstraints","isConnected","getTrackCapabilities","getTrackSettings","u","includes","facingMode","stopVideoStream","startVideoStream","cameraResolution","trim","split","map","width","height","pan","h","tilt","zoom","d","getElementById","c","m","p","g","b","f","isSupported","message","autoPlay","noImage","loading","calculateFileSize","capture","play","then","video","catch","finally","removeAttribute","from","childNodes","forEach","remove","getVideoTracks","applyConstraints","advanced","ideal","audio","mediaDevices","getUserMedia","srcObject","hidden","stop","getContext","videoWidth","videoHeight","drawImage","toDataURL","Image","src","dataURI","fetch","blob","size","getCapabilities","getSettings","$d9c5053bade2d3f8$export$32589115725b904b","$d9c5053bade2d3f8$var$e","open","showModal","body","style","overflowY","element","close","noHeader","classList","noAnimations","noCloseButton","clearTimeout","staticBackdrop","fullscreen","add","setTimeout","defaultPrevented","currentTarget","assignedNodes","cancelable","reason","show","hide","$9351176e8d763a78$export$6ccd1735166caad9","$9351176e8d763a78$var$e","$9351176e8d763a78$var$t","$9351176e8d763a78$var$o","lastIndexOf","type","pop","toLowerCase","value","writable","$9351176e8d763a78$var$i","webkitRelativePath","$9351176e8d763a78$var$r","Promise","readEntries","$9351176e8d763a78$var$a","push","$9351176e8d763a78$var$n","file","fullPath","$9351176e8d763a78$var$s","kind","getAsEntry","webkitGetAsEntry","shift","isFile","indexOf","isDirectory","createReader","$9351176e8d763a78$var$d","$9351176e8d763a78$var$l","dataTransfer","items","$9351176e8d763a78$var$p","$9351176e8d763a78$var$c","$9351176e8d763a78$var$h","$9351176e8d763a78$var$u","accept","multiple","noKeyboard","autoFocus","focus","maxFiles","floor","abs","maxSize","minSize","noClick","noDrag","noStyle","Event","dropEffect","click","key","errors","Set","filter","Boolean","replace","charAt","test","acceptedFiles","rejectedFiles","defaultValue","openFileDialog","$4af3d380d1884504$export$30a014203d0d7e4f","array","indexes","TypeError","_","$17004b28c97c1306$export$e2a22331486dcca0","prefix","suffix","randomString","random","substring","$65136e012e05e2d7$export$63e7bed68b07a85c","$5c8573fd76c057a5$exports","$2db6b38fbc5d48da$exports","$a0b1873abc1b077b$exports","$df7c7f72fd04e02a$exports","$e4c2039736f96f5d$exports","$fbff28e47a938944$exports","$d8f4a375a42d32f4$exports","$7cfbda315cbb4209$exports","$6379185b16d8409f$exports","$454f2b111c8d0078$exports","$c05fcaeb63dbd733$exports","$56b863c8b6be7003$export$6874249d87f2602a","label","weight","$56b863c8b6be7003$export$59eceaef0c7797b2","options","font","FontFace","load","fonts","console","$0374350c629f125f$export$6539e087749cf9d3","res","mimeType","join","File","filename","$3969451ff60cb8d5$var$errorsContainer","$3969451ff60cb8d5$var$hideError","evt","removeChild","parentNode","$3969451ff60cb8d5$export$af04143326425dbd","types","template","div","className","$224fa2388dce65c4$export$293a4b86a6fe2398","index","data","inputTemplate","fillColor","shadowColor","_isSettingsOpen","fontSize","shadowBlur","borderWidth","offsetY","offsetX","rotate","fragment","createDocumentFragment","textAlign","checked","allCaps","$64ef5d4149d7e6a5$export$e653a2de0f3a8b89","image","canvas","ctx","textOptions","clearRect","fillStyle","fillRect","item","save","fontWeight","strokeStyle","lineHeight","measureText","xPos","textLines","toUpperCase","shadowOffsetX","shadowOffsetY","translate","PI","fillText","lineWidth","strokeText","restore","$85a5f86b715fe7db$var$videoModal","$85a5f86b715fe7db$var$downloadModal","$85a5f86b715fe7db$var$canvas","$85a5f86b715fe7db$var$dropzoneEl","$85a5f86b715fe7db$var$instructionsEl","$85a5f86b715fe7db$var$ctx","$85a5f86b715fe7db$var$imageUploadMethodSelect","$85a5f86b715fe7db$var$fileSelectBtn","$85a5f86b715fe7db$var$imageUrlForm","$85a5f86b715fe7db$var$addTextboxBtn","$85a5f86b715fe7db$var$inputsContainer","$85a5f86b715fe7db$var$generateMemeBtn","$85a5f86b715fe7db$var$openVideoModalBtn","$85a5f86b715fe7db$var$downloadMemeBtn","$85a5f86b715fe7db$var$downloadMemePreview","$85a5f86b715fe7db$var$webShareComponent","$85a5f86b715fe7db$var$galleryEl","$85a5f86b715fe7db$var$gallerySearchEl","$85a5f86b715fe7db$var$galleryNoResultsEl","$85a5f86b715fe7db$var$solidColorForm","$85a5f86b715fe7db$var$uploadMethodEls","querySelectorAll","$85a5f86b715fe7db$var$selectedImage","$85a5f86b715fe7db$var$reqAnimFrame","$85a5f86b715fe7db$var$defaultTextOptions","$85a5f86b715fe7db$var$textOptions","$85a5f86b715fe7db$var$generateMeme","dataUrl","downloadLink","download","href","requestAnimationFrame","$85a5f86b715fe7db$var$onImageLoaded","MAX_WIDTH","MAX_HEIGHT","$85a5f86b715fe7db$var$handleFileSelect","reader","FileReader","result","readAsDataURL","$85a5f86b715fe7db$var$handleTextPropChange","prop","$85a5f86b715fe7db$var$handleImageUploadFromURL","form","submitButton","imageUrl","$85a5f86b715fe7db$var$moveText","offsetDir","sign","textBoxSection","offsetYInput","offsetXInput","$85a5f86b715fe7db$var$handleGalleryClick","button","closest","img","alt","newTextBox","matches","textBoxIndex","textBoxEls","el","settingsEl","confirm","isOffsetYButton","isOffsetXButton","cancelAnimationFrame","query","galleryItems","capturePhotoComponent","$442be162a818aed4$export$c37129e465f64ef0","isWebShareSupported","$e179325634270afd$export$30b344bef3e55b67","$e179325634270afd$var$styles","$e179325634270afd$var$template","buttonSlot","buttonEl","getButton","oldValue","newValue","upgradeProperty","handleSlotChange","handleClick","instance","elementName","WebShare","$c290816263f90981$export$cc30a98fe3890794","$02ad8beec419df62$export$7d15b64cf5a3a4c4","lower","upper","$c290816263f90981$var$COMPONENT_NAME","$c290816263f90981$var$styles","$c290816263f90981$var$template","supportedConstraints","stream","canvasElement","outputElement","videoElement","captureButtonSlot","captureButton","facingModeButtonSlot","facingModeButton","trackCapabilities","trackSettings","emptyOutputElement","isValidFacingMode","x","widthInAllowedRange","heightInAllowedRange","panInAllowedRange","applyPTZ","tiltInAllowedRange","zoomInAllowedRange","getCaptureButton","getFacingModeButton","onVideoLoadedMetaData","onCaptureButtonSlotChange","onCapturePhotoButtonClick","onFacingModeButtonSlotChange","onFacingModeButtonClick","node","constraintName","constraintValue","track","constraints","eventDetail","CapturePhoto","$180b6dcf923bafc7$export$32589115725b904b","$180b6dcf923bafc7$var$template","dialogEl","footerSlotEl","pulseAnimationTimeout","headerEl","closeBtnEl","handleDialogClick","handleDialogClose","handleDialogCancel","handleCloseButtonClick","handleFooterSlotChange","applyPulseEffectOnDialog","requestCloseEvent","createRequestCloseEvent","footerEl","footerSlotNodes","hasFooterSlotNodes","ModalElement","$862aa3736b0514bc$export$6ccd1735166caad9","$f31161edf38949e9$var$COMMON_MIME_TYPES","$f31161edf38949e9$var$FILES_TO_IGNORE","$f31161edf38949e9$var$toFileWithMimeType","hasExtension","extension","$f31161edf38949e9$var$toFileWithPath","fileWithMimeType","$f31161edf38949e9$var$readEntriesPromise","directoryReader","resolve","reject","$f31161edf38949e9$var$readAllDirectoryEntries","entries","$f31161edf38949e9$var$getFileFromFileEntry","fileEntry","$f31161edf38949e9$var$getFilesFromDataTransferItemList","dataTransferItemList","queue","entry","$f31161edf38949e9$var$getFilesFromFileList","fileList","$f31161edf38949e9$export$6d52664cd15c442","$862aa3736b0514bc$var$COMPONENT_NAME","$862aa3736b0514bc$var$TOO_MANY_FILES","$862aa3736b0514bc$var$template","$862aa3736b0514bc$var$styles","fileInput","dropzoneEl","handleFileInputChange","handleDragEnter","handleDragOver","handleDragLeave","handleDrop","handleKeyUp","num","Infinity","handleFilesSelect","filesLength","fileHasValidType","acceptedTypeSpecifiers","acceptedMimeTypesList","fileMimeType","baseMimeType","validType","fileExceedsMaxSize","fileIsSmallerThanMinSize","FilesDropzone"],"version":3,"file":"index.671cb7f2.js.map"} \ No newline at end of file +{"mappings":"A,S,E,C,E,O,G,E,U,C,E,O,C,C,C,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,C,E,E,C,E,E,E,iB,CMQA,SAAS,EAAoB,CAAO,EAAA,OAClB,OAAZ,GAAoB,UAAA,OAAO,EACtB,UAAW,WAAa,aAAc,WAAa,UAAU,QAAA,CAAS,GAGxE,UAAW,SACpB,C,M,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,A,C,E,E,Q,A,E,Q,S,C,C,C,E,O,c,C,E,O,C,W,C,I,W,O,C,E,I,S,C,E,O,E,C,E,W,C,E,a,C,C,GLZA,IAgBA,EAhBI,EAAU,IAAI,IAgBlB,EAfA,SAAkB,CAAO,CAAE,CAAQ,EACjC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,MAAM,CAAG,EAAG,GAAK,EAC5C,EAAQ,GAAG,CAAC,CAAQ,CAAC,EAAE,CAAE,CACvB,QAAS,EACT,KAAM,CAAQ,CAAC,EAAI,EAAE,AACvB,EAEJ,C,GCVA,AAAA,EAAA,SAAA,QAAA,CAA8C,IAAA,IAAoB,GAAA,YAAA,GAAA,EAAI,QAAQ,GAAG,KAAK,KAAK,CAAC,2sB,O,c,C,C,E,W,C,I,W,O,C,E,I,K,E,W,C,E,a,C,C,GOmB5F,IAAM,EAAkB,CAAC;;;;AAIzB,CAAC,CAEK,EAAW,SAAS,aAAA,CAAc,WAExC,CAAA,EAAS,SAAA,CAAuB,CAAC;SACxB,EAAE,EAAO;;AAElB,CAgCA,AAAA,OAAM,UAAiB,YAErB,CAAC,CAAW,AAGZ,AAAA,EAAC,CAAQ,AAGT,AAAA,EAAC,CAAK,CAAG,EAAE,AAEX,AAAA,cAAc,CACZ,KAAK,GAEA,IAAI,CAAC,UAAA,EACW,IAAI,CAAC,YAAA,CAAa,CAAE,KAAM,OAAQ,eAAgB,CAAA,CAAK,GAC/D,WAAA,CAAY,EAAS,OAAA,CAAQ,SAAA,CAAU,CAAA,IAGpD,IAAI,CAAC,CAAC,CA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","sources":["","node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js","node_modules/@parcel/runtime-js/lib/runtime-0a14329291626361.js","src/js/index.js","node_modules/@georapbox/web-share-element/dist/is-web-share-supported.js","node_modules/@georapbox/web-share-element/dist/","node_modules/@georapbox/web-share-element/dist/src/is-web-share-supported.js","node_modules/@georapbox/web-share-element/dist/web-share-defined.js","node_modules/@georapbox/web-share-element/dist/src/web-share-defined.js","node_modules/@georapbox/web-share-element/dist/src/web-share.js","node_modules/@georapbox/capture-photo-element/dist/capture-photo-defined.js","node_modules/@georapbox/capture-photo-element/dist/","node_modules/@georapbox/capture-photo-element/dist/src/capture-photo-defined.js","node_modules/@georapbox/capture-photo-element/dist/src/capture-photo.js","node_modules/@georapbox/capture-photo-element/dist/src/utils/clamp.js","node_modules/@georapbox/modal-element/dist/modal-element-defined.js","node_modules/@georapbox/modal-element/dist/","node_modules/@georapbox/modal-element/dist/src/modal-element-defined.js","node_modules/@georapbox/modal-element/dist/src/modal-element.js","node_modules/@georapbox/files-dropzone-element/dist/files-dropzone-defined.js","node_modules/@georapbox/files-dropzone-element/dist/","node_modules/@georapbox/files-dropzone-element/dist/src/files-dropzone-defined.js","node_modules/@georapbox/files-dropzone-element/dist/src/files-dropzone.js","node_modules/@georapbox/files-dropzone-element/dist/src/utils/is-valid-file.js","node_modules/@georapbox/files-dropzone-element/dist/src/utils/files-selector.js","src/js/utils/array-remove.js","src/js/utils/uid.js","src/js/constants.js","src/js/custom-fonts.js","node_modules/@parcel/runtime-js/lib/runtime-c787b7da4d39e11a.js","node_modules/@parcel/runtime-js/lib/runtime-73291864e538b74b.js","node_modules/@parcel/runtime-js/lib/runtime-a2fc0bec9703ab72.js","node_modules/@parcel/runtime-js/lib/runtime-b59fd44dfd81b5fd.js","node_modules/@parcel/runtime-js/lib/runtime-bf36396318022d20.js","node_modules/@parcel/runtime-js/lib/runtime-418166379205b8eb.js","node_modules/@parcel/runtime-js/lib/runtime-105db2d9f9edf7cf.js","node_modules/@parcel/runtime-js/lib/runtime-9f8b0d4110a0174a.js","node_modules/@parcel/runtime-js/lib/runtime-94ba5916670c0a2b.js","node_modules/@parcel/runtime-js/lib/runtime-dec7b2cfeb98de11.js","node_modules/@parcel/runtime-js/lib/runtime-1800a52d85f464ab.js","src/js/file-from-url.js","src/js/toast-alert.js","src/js/create-text-box.js","src/js/draw-canvas.js"],"sourcesContent":["\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequire5078\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequire5078\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"kyEFX\", function(module, exports) {\n\n$parcel$export(module.exports, \"register\", function () { return $ef7689007096c8a0$export$6503ec6e8aabbaf; }, function (v) { return $ef7689007096c8a0$export$6503ec6e8aabbaf = v; });\nvar $ef7689007096c8a0$export$6503ec6e8aabbaf;\nvar $ef7689007096c8a0$export$f7ad0328861e2f03;\n\"use strict\";\nvar $ef7689007096c8a0$var$mapping = new Map();\nfunction $ef7689007096c8a0$var$register(baseUrl, manifest) {\n for(var i = 0; i < manifest.length - 1; i += 2)$ef7689007096c8a0$var$mapping.set(manifest[i], {\n baseUrl: baseUrl,\n path: manifest[i + 1]\n });\n}\nfunction $ef7689007096c8a0$var$resolve(id) {\n var resolved = $ef7689007096c8a0$var$mapping.get(id);\n if (resolved == null) throw new Error(\"Could not resolve bundle with id \" + id);\n return new URL(resolved.path, resolved.baseUrl).toString();\n}\n$ef7689007096c8a0$export$6503ec6e8aabbaf = $ef7689007096c8a0$var$register;\n$ef7689007096c8a0$export$f7ad0328861e2f03 = $ef7689007096c8a0$var$resolve;\n\n});\n\nvar $cc3005d9efa5491c$exports = {};\n\n(parcelRequire(\"kyEFX\")).register(new URL(\"\", import.meta.url).toString(), JSON.parse('[\"eq2Ey\",\"index.a2b8f4c4.js\",\"9PqYx\",\"Pressuru.684952ea.ttf\",\"hr5Pp\",\"Oswald-Regular.89ec7d89.ttf\",\"5TebC\",\"Oswald-Bold.0f6a7ca6.ttf\",\"3ENF9\",\"Roboto-Regular.ca197847.ttf\",\"5yAXK\",\"Roboto-Bold.fdb9b54a.ttf\",\"k2KZ9\",\"RobotoCondensed-Regular.d585f5c7.ttf\",\"4h4UX\",\"RobotoCondensed-Bold.e1f96d4b.ttf\",\"8pomG\",\"CourierPrime-Regular.3a25a501.ttf\",\"l2v76\",\"CourierPrime-Bold.3d6bf689.ttf\",\"eKMWr\",\"OpenSans-Regular.edf9e01b.ttf\",\"dXO1Z\",\"OpenSans-Bold.8fceb72b.ttf\",\"9FH7D\",\"index.47ef8ac4.css\"]'));\n\nfunction $7a2aca835bb05064$export$c37129e465f64ef0(a) {\n return null !== a && \"object\" == typeof a ? \"share\" in navigator && \"canShare\" in navigator && navigator.canShare(a) : \"share\" in navigator;\n}\n\n\nObject.defineProperty({}, \"WebShare\", {\n get: function() {\n return $cd62c5572235e737$export$30b344bef3e55b67;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $cd62c5572235e737$var$t = `\n :host {\n display: inline-block;\n }\n`, $cd62c5572235e737$var$e = document.createElement(\"template\");\n$cd62c5572235e737$var$e.innerHTML = `\n \n \n`;\nclass $cd62c5572235e737$export$30b344bef3e55b67 extends HTMLElement {\n #t;\n #e;\n #s = [];\n constructor(){\n super(), this.shadowRoot || this.attachShadow({\n mode: \"open\",\n delegatesFocus: !0\n }).appendChild($cd62c5572235e737$var$e.content.cloneNode(!0)), this.#t = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null, this.#e = this.#i();\n }\n static get observedAttributes() {\n return [\n \"disabled\"\n ];\n }\n attributeChangedCallback(t, e, s) {\n \"disabled\" === t && e !== s && this.#e && (this.#e.toggleAttribute(\"disabled\", this.disabled), this.#e.setAttribute(\"aria-disabled\", this.disabled.toString()), this.#e.part && this.#e.part.contains(\"button\") && this.#e.part.toggle(\"button--disabled\", this.disabled));\n }\n connectedCallback() {\n this.#r(\"shareUrl\"), this.#r(\"shareTitle\"), this.#r(\"shareText\"), this.#r(\"shareFiles\"), this.#r(\"disabled\"), this.#t?.addEventListener(\"slotchange\", this.#a), this.#e?.addEventListener(\"click\", this.#n);\n }\n disconnectedCallback() {\n this.#t?.removeEventListener(\"slotchange\", this.#a), this.#e?.removeEventListener(\"click\", this.#n);\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(t) {\n this.toggleAttribute(\"disabled\", !!t);\n }\n get shareUrl() {\n return this.getAttribute(\"share-url\") || \"\";\n }\n set shareUrl(t) {\n this.setAttribute(\"share-url\", t);\n }\n get shareTitle() {\n return this.getAttribute(\"share-title\") || \"\";\n }\n set shareTitle(t) {\n this.setAttribute(\"share-title\", t);\n }\n get shareText() {\n return this.getAttribute(\"share-text\") || \"\";\n }\n set shareText(t) {\n this.setAttribute(\"share-text\", t);\n }\n get shareFiles() {\n return this.#s;\n }\n set shareFiles(t) {\n Array.isArray(t) && t.length > 0 && (this.#s = t);\n }\n async share() {\n if (!this.disabled) try {\n let t = {};\n this.shareUrl && (t.url = this.shareUrl), this.shareTitle && (t.title = this.shareTitle), this.shareText && (t.text = this.shareText), Array.isArray(this.shareFiles) && this.shareFiles.length > 0 && navigator.canShare && navigator.canShare({\n files: this.shareFiles\n }) && (t.files = this.shareFiles), await navigator.share(t), this.dispatchEvent(new CustomEvent(\"web-share:success\", {\n bubbles: !0,\n composed: !0,\n detail: {\n shareData: t\n }\n }));\n } catch (t) {\n if (t instanceof Error && \"AbortError\" === t.name) {\n this.dispatchEvent(new CustomEvent(\"web-share:abort\", {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n return;\n }\n this.dispatchEvent(new CustomEvent(\"web-share:error\", {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }\n }\n #n = (t)=>{\n t.preventDefault(), this.disabled || this.share();\n };\n #a = (t)=>{\n t.target && \"button\" === t.target.name && (this.#e?.removeEventListener(\"click\", this.#n), this.#e = this.#i(), this.#e && (this.#e.addEventListener(\"click\", this.#n), \"BUTTON\" === this.#e.nodeName || this.#e.hasAttribute(\"role\") || this.#e.setAttribute(\"role\", \"button\")));\n };\n #i() {\n return this.#t && this.#t.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"button\" === t.getAttribute(\"slot\")) || null;\n }\n #r(t) {\n if (Object.prototype.hasOwnProperty.call(this, t)) {\n let e = this[t];\n delete this[t], this[t] = e;\n }\n }\n static defineCustomElement(t = \"web-share\") {\n \"undefined\" == typeof window || window.customElements.get(t) || window.customElements.define(t, $cd62c5572235e737$export$30b344bef3e55b67);\n }\n}\n$cd62c5572235e737$export$30b344bef3e55b67.defineCustomElement();\n\n\nObject.defineProperty({}, \"CapturePhoto\", {\n get: function() {\n return $dced0d224c6d876e$export$cc30a98fe3890794;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $dced0d224c6d876e$var$t = (t, e, i)=>(Number.isNaN(e) && (e = 0), Number.isNaN(i) && (i = 0), Math.min(Math.max(t, Math.min(e, i)), Math.max(e, i))), $dced0d224c6d876e$var$e = \"capture-photo\", $dced0d224c6d876e$var$i = `\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`, $dced0d224c6d876e$var$o = document.createElement(\"template\");\n$dced0d224c6d876e$var$o.innerHTML = `\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\nclass $dced0d224c6d876e$export$cc30a98fe3890794 extends HTMLElement {\n #t = {};\n #e = null;\n #i = null;\n #o = null;\n #n = null;\n #a = null;\n #s = null;\n #r = null;\n #l = null;\n constructor(){\n super(), this.#t = this.getSupportedConstraints(), this.shadowRoot || this.attachShadow({\n mode: \"open\"\n }).appendChild($dced0d224c6d876e$var$o.content.cloneNode(!0));\n }\n static get observedAttributes() {\n return [\n \"no-image\",\n \"facing-mode\",\n \"camera-resolution\",\n \"pan\",\n \"tilt\",\n \"zoom\"\n ];\n }\n attributeChangedCallback(t, e, i) {\n if (!this.isConnected) return;\n let o = this.getTrackCapabilities(), n = this.getTrackSettings();\n if (\"no-image\" === t && e !== i && this.#u(), \"facing-mode\" === t && e !== i && \"facingMode\" in this.#t) {\n let t = [\n \"user\",\n \"environment\"\n ].includes(this.facingMode || \"\");\n \"facingMode\" in n && t && (this.stopVideoStream(), this.startVideoStream());\n }\n if (\"camera-resolution\" === t && e !== i && \"string\" == typeof this.cameraResolution && this.cameraResolution.trim().length > 0) {\n let [t = 0, e = 0] = this.cameraResolution.split(\"x\").map((t)=>Number(t));\n if (t > 0 && e > 0 && \"width\" in o && \"height\" in o) {\n let i = !!(o.width?.min && o.width?.max) && t >= o?.width?.min && t <= o?.width?.max, a = !!(o.height?.min && o.height?.max) && e >= o?.height?.min && e <= o?.height?.max;\n \"width\" in n && \"height\" in n && i && a && (this.stopVideoStream(), this.startVideoStream());\n }\n }\n if (\"pan\" === t && e !== i && \"pan\" in this.#t) {\n let t = !!(\"pan\" in o && o.pan?.min && o.pan?.max) && this.pan >= o.pan.min && this.pan <= o.pan.max;\n \"pan\" in n && \"number\" == typeof this.pan && t && this.#h(\"pan\", this.pan);\n }\n if (\"tilt\" === t && e !== i && \"tilt\" in this.#t) {\n let t = !!(\"tilt\" in o && o.tilt?.min && o.tilt?.max) && this.tilt >= o.tilt.min && this.tilt <= o.tilt.max;\n \"tilt\" in n && \"number\" == typeof this.tilt && t && this.#h(\"tilt\", this.tilt);\n }\n if (\"zoom\" === t && e !== i && \"zoom\" in this.#t) {\n let t = !!(\"zoom\" in o && o.zoom?.min && o.zoom?.max) && this.zoom >= o.zoom.min && this.zoom <= o.zoom.max;\n \"zoom\" in n && \"number\" == typeof this.zoom && t && this.#h(\"zoom\", this.zoom);\n }\n }\n connectedCallback() {\n if (this.#d(\"autpoPlay\"), this.#d(\"noImage\"), this.#d(\"facingMode\"), this.#d(\"cameraResolution\"), this.#d(\"pan\"), this.#d(\"tilt\"), this.#d(\"zoom\"), this.#d(\"calculateFileSize\"), this.#i = this.shadowRoot?.querySelector(\"canvas\") || null, this.#o = this.shadowRoot?.getElementById(\"output\") || null, this.#n = this.shadowRoot?.querySelector(\"video\") || null, this.#a = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null, this.#s = this.#c(), this.#r = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null, this.#l = this.#m(), this.#n?.addEventListener(\"loadedmetadata\", this.#p), this.#a?.addEventListener(\"slotchange\", this.#g), this.#s?.addEventListener(\"click\", this.#b), this.#r?.addEventListener(\"slotchange\", this.#f), this.#l?.addEventListener(\"click\", this.#v), !$dced0d224c6d876e$export$cc30a98fe3890794.isSupported()) return this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: {\n name: \"NotSupportedError\",\n message: \"Not supported\"\n }\n }\n }));\n this.autoPlay && this.startVideoStream();\n }\n disconnectedCallback() {\n this.stopVideoStream(), this.#l?.removeEventListener(\"click\", this.#v), this.#s?.removeEventListener(\"click\", this.#b), this.#n?.removeEventListener(\"canplay\", this.#p), this.#a?.removeEventListener(\"slotchange\", this.#g), this.#r?.removeEventListener(\"slotchange\", this.#f);\n }\n get autoPlay() {\n return this.hasAttribute(\"auto-play\");\n }\n set autoPlay(t) {\n this.toggleAttribute(\"auto-play\", !!t);\n }\n get noImage() {\n return this.hasAttribute(\"no-image\");\n }\n set noImage(t) {\n this.toggleAttribute(\"no-image\", !!t);\n }\n get facingMode() {\n return this.getAttribute(\"facing-mode\") || \"user\";\n }\n set facingMode(t) {\n this.setAttribute(\"facing-mode\", t);\n }\n get cameraResolution() {\n return this.getAttribute(\"camera-resolution\") || \"\";\n }\n set cameraResolution(t) {\n this.setAttribute(\"camera-resolution\", t);\n }\n get pan() {\n return Number(this.getAttribute(\"pan\")) || 0;\n }\n set pan(t) {\n this.setAttribute(\"pan\", null != t ? t.toString() : t);\n }\n get tilt() {\n return Number(this.getAttribute(\"tilt\")) || 0;\n }\n set tilt(t) {\n this.setAttribute(\"tilt\", null != t ? t.toString() : t);\n }\n get zoom() {\n return Number(this.getAttribute(\"zoom\")) || 1;\n }\n set zoom(t) {\n this.setAttribute(\"zoom\", null != t ? t.toString() : t);\n }\n get loading() {\n return this.hasAttribute(\"loading\");\n }\n get calculateFileSize() {\n return this.hasAttribute(\"calculate-file-size\");\n }\n set calculateFileSize(t) {\n this.toggleAttribute(\"calculate-file-size\", !!t);\n }\n #v = (t)=>{\n t.preventDefault(), this.loading || (this.facingMode = \"user\" !== this.facingMode && this.facingMode ? \"user\" : \"environment\");\n };\n #b = (t)=>{\n t.preventDefault(), this.capture();\n };\n #p = (t)=>{\n let i = t.target;\n i.play().then(()=>{\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:video-play`, {\n bubbles: !0,\n composed: !0,\n detail: {\n video: i\n }\n }));\n }).catch((t)=>{\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }).finally(()=>{\n this.removeAttribute(\"loading\");\n });\n };\n #u() {\n this.#o && Array.from(this.#o.childNodes).forEach((t)=>t.remove());\n }\n #h(e, i) {\n if (!this.#e || !e || !i) return;\n let [o] = this.#e.getVideoTracks(), n = this.getTrackCapabilities();\n e in this.getTrackSettings() && o.applyConstraints({\n advanced: [\n {\n [e]: $dced0d224c6d876e$var$t(Number(i), n[e]?.min || 1, n[e]?.max || 1)\n }\n ]\n });\n }\n #g = (t)=>{\n t.target?.name === \"capture-button\" && (this.#s?.removeEventListener(\"click\", this.#b), this.#s = this.#c(), this.#s && (this.#s.addEventListener(\"click\", this.#b), \"BUTTON\" === this.#s.nodeName || this.#s.hasAttribute(\"role\") || this.#s.setAttribute(\"role\", \"button\")));\n };\n #f = (t)=>{\n t.target?.name === \"facing-mode-button\" && (this.#l?.removeEventListener(\"click\", this.#v), this.#l = this.#m(), this.#l && (this.#l.addEventListener(\"click\", this.#v), \"BUTTON\" === this.#l.nodeName || this.#l.hasAttribute(\"role\") || this.#l.setAttribute(\"role\", \"button\")));\n };\n #m() {\n return this.#r && this.#r.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"facing-mode-button\" === t.getAttribute(\"slot\")) || null;\n }\n #c() {\n return this.#a && this.#a.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"capture-button\" === t.getAttribute(\"slot\")) || null;\n }\n #d(t) {\n if (Object.prototype.hasOwnProperty.call(this, t)) {\n let e = this[t];\n delete this[t], this[t] = e;\n }\n }\n async startVideoStream() {\n if (!$dced0d224c6d876e$export$cc30a98fe3890794.isSupported() || this.#e) return;\n this.setAttribute(\"loading\", \"\");\n let t = {\n video: {\n facingMode: {\n ideal: this.facingMode || \"user\"\n },\n pan: !0,\n tilt: !0,\n zoom: !0\n },\n audio: !1\n };\n if (\"string\" == typeof this.cameraResolution && this.cameraResolution.trim().length > 0) {\n let [e = 0, i = 0] = this.cameraResolution.split(\"x\").map((t)=>Number(t));\n e > 0 && i > 0 && (t.video.width = e, t.video.height = i);\n }\n try {\n this.#e = await navigator.mediaDevices.getUserMedia(t), this.#n && (this.#n.srcObject = this.#e), this.#h(\"pan\", this.pan), this.#h(\"tilt\", this.tilt), this.#h(\"zoom\", this.zoom);\n let e = this.getTrackSettings();\n \"facingMode\" in e && this.#r && (this.#r.hidden = !1);\n } catch (t) {\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n } finally{\n this.removeAttribute(\"loading\");\n }\n }\n stopVideoStream() {\n if (!this.#n || !this.#e) return;\n let [t] = this.#e.getVideoTracks();\n t?.stop(), this.#n.srcObject = null, this.#e = null;\n }\n async capture() {\n if (!this.loading && this.#i && this.#n) try {\n let t = this.#i.getContext(\"2d\"), i = this.#n.videoWidth, o = this.#n.videoHeight;\n this.#i.width = i, this.#i.height = o, t?.drawImage(this.#n, 0, 0, i, o);\n let n = this.#i.toDataURL(\"image/png\");\n if (\"string\" == typeof n && n.includes(\"data:image\")) {\n if (!this.noImage) {\n let t = new Image;\n t.src = n, t.width = i, t.height = o, t.setAttribute(\"part\", \"output-image\"), this.#u(), this.#o?.appendChild(t);\n }\n let t = {\n dataURI: n,\n width: i,\n height: o\n };\n if (this.calculateFileSize) try {\n let e = await fetch(n), i = (await e.blob()).size;\n i && (t.size = i);\n } catch (t) {}\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:success`, {\n bubbles: !0,\n composed: !0,\n detail: t\n }));\n }\n } catch (t) {\n this.dispatchEvent(new CustomEvent(`${$dced0d224c6d876e$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }\n }\n getSupportedConstraints() {\n return $dced0d224c6d876e$export$cc30a98fe3890794.isSupported() && navigator.mediaDevices.getSupportedConstraints() || {};\n }\n getTrackCapabilities() {\n if (!this.#e) return {};\n let [t] = this.#e.getVideoTracks();\n return t && \"function\" == typeof t.getCapabilities && t.getCapabilities() || {};\n }\n getTrackSettings() {\n if (!this.#e) return {};\n let [t] = this.#e.getVideoTracks();\n return t && \"function\" == typeof t.getSettings && t.getSettings() || {};\n }\n static isSupported() {\n return !!navigator.mediaDevices?.getUserMedia;\n }\n static defineCustomElement(t = $dced0d224c6d876e$var$e) {\n \"undefined\" == typeof window || window.customElements.get(t) || window.customElements.define(t, $dced0d224c6d876e$export$cc30a98fe3890794);\n }\n}\n$dced0d224c6d876e$export$cc30a98fe3890794.defineCustomElement();\n\n\nObject.defineProperty({}, \"ModalElement\", {\n get: function() {\n return $d9c5053bade2d3f8$export$32589115725b904b;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $d9c5053bade2d3f8$var$e = document.createElement(\"template\");\n$d9c5053bade2d3f8$var$e.innerHTML = /* html */ `\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`; /**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */ \nclass $d9c5053bade2d3f8$export$32589115725b904b extends HTMLElement {\n #e = null;\n #t = null;\n #o = void 0;\n constructor(){\n if (super(), !this.shadowRoot) {\n let t = this.attachShadow({\n mode: \"open\"\n });\n t.appendChild($d9c5053bade2d3f8$var$e.content.cloneNode(!0));\n }\n this.shadowRoot && (this.#e = this.shadowRoot.querySelector(\"dialog\"), this.#t = this.shadowRoot.querySelector('slot[name=\"footer\"]'));\n }\n static get observedAttributes() {\n return [\n \"open\",\n \"no-header\",\n \"no-animations\",\n \"no-close-button\"\n ];\n }\n attributeChangedCallback(e, t, o) {\n if (null !== this.#e) {\n if (\"open\" === e && t !== o && (this.open ? (this.#e.showModal(), document.body && (document.body.style.overflowY = \"hidden\"), this.dispatchEvent(new CustomEvent(\"me-open\", {\n bubbles: !0,\n composed: !0,\n detail: {\n element: this\n }\n }))) : this.#e.close()), \"no-header\" === e && t !== o) {\n let e = this.#e.querySelector(\".dialog__header\");\n null !== e && (e.hidden = this.noHeader);\n }\n if (\"no-animations\" === e && t !== o && this.#e.classList.toggle(\"dialog--no-animations\", this.noAnimations), \"no-close-button\" === e && t !== o) {\n let e = this.#e.querySelector(\".dialog__close\");\n null !== e && (e.hidden = this.noCloseButton);\n }\n }\n }\n connectedCallback() {\n this.#i(\"open\"), this.#i(\"staticBackdrop\"), this.#i(\"noHeader\"), this.#i(\"noAnimations\"), this.#i(\"noCloseButton\"), this.#i(\"fullscreen\"), this.#e?.addEventListener(\"click\", this.#a), this.#e?.addEventListener(\"close\", this.#l), this.#e?.addEventListener(\"cancel\", this.#s), this.#e?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\", this.#n), this.#t?.addEventListener(\"slotchange\", this.#r);\n }\n disconnectedCallback() {\n this.#o && clearTimeout(this.#o), this.#e?.addEventListener(\"click\", this.#a), this.#e?.removeEventListener(\"close\", this.#l), this.#e?.removeEventListener(\"cancel\", this.#s), this.#e?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\", this.#n), this.#t?.removeEventListener(\"slotchange\", this.#r);\n }\n get open() {\n return this.hasAttribute(\"open\");\n }\n set open(e) {\n e ? this.setAttribute(\"open\", \"\") : this.removeAttribute(\"open\");\n }\n get staticBackdrop() {\n return this.hasAttribute(\"static-backdrop\");\n }\n set staticBackdrop(e) {\n e ? this.setAttribute(\"static-backdrop\", \"\") : this.removeAttribute(\"static-backdrop\");\n }\n get noHeader() {\n return this.hasAttribute(\"no-header\");\n }\n set noHeader(e) {\n e ? this.setAttribute(\"no-header\", \"\") : this.removeAttribute(\"no-header\");\n }\n get noAnimations() {\n return this.hasAttribute(\"no-animations\");\n }\n set noAnimations(e) {\n e ? this.setAttribute(\"no-animations\", \"\") : this.removeAttribute(\"no-animations\");\n }\n get noCloseButton() {\n return this.hasAttribute(\"no-close-button\");\n }\n set noCloseButton(e) {\n e ? this.setAttribute(\"no-close-button\", \"\") : this.removeAttribute(\"no-close-button\");\n }\n get fullscreen() {\n return this.hasAttribute(\"fullscreen\");\n }\n set fullscreen(e) {\n e ? this.setAttribute(\"fullscreen\", \"\") : this.removeAttribute(\"fullscreen\");\n }\n #d() {\n this.#o || (this.#e?.classList.add(\"dialog--pulse\"), this.#o = setTimeout(()=>{\n this.#e?.classList.remove(\"dialog--pulse\"), clearTimeout(this.#o), this.#o = void 0;\n }, 300));\n }\n #l = ()=>{\n // the open property when the dialog is closed by the user.\n this.open = !1, document.body && (document.body.style.overflowY = \"\"), this.dispatchEvent(new CustomEvent(\"me-close\", {\n bubbles: !0,\n composed: !0,\n detail: {\n element: this\n }\n }));\n };\n #s = (e)=>{\n let t = this.#c(\"escape-key\");\n this.dispatchEvent(t), t.defaultPrevented && (e.preventDefault(), this.noAnimations || this.#d());\n };\n #n = (e)=>{\n let t = this.#c(\"close-button\");\n this.dispatchEvent(t), t.defaultPrevented && (e.preventDefault(), this.noAnimations || this.#d());\n };\n #a = (e)=>{\n if (e.target !== e.currentTarget) return;\n let t = this.#c(\"backdrop-click\");\n if (this.dispatchEvent(t), t.defaultPrevented || this.staticBackdrop) {\n this.noAnimations || this.#d();\n return;\n }\n this.#e?.close();\n };\n #r = ()=>{\n if (null === this.#e) return; /** @type {Nullable} */ \n let e = this.#e.querySelector(\".dialog__footer\");\n if (null === e) return;\n let t = this.#t?.assignedNodes(), o = !!t && t.length > 0;\n e.hidden = !o;\n };\n #c(e) {\n return new CustomEvent(\"me-request-close\", {\n bubbles: !0,\n composed: !0,\n cancelable: !0,\n detail: {\n reason: e,\n element: this\n }\n });\n }\n #i(e) {\n if (Object.prototype.hasOwnProperty.call(this, e)) {\n let t = this[e];\n delete this[e], this[e] = t;\n }\n }\n show() {\n this.open || (this.open = !0);\n }\n hide() {\n this.open && (this.open = !1);\n }\n static defineCustomElement(e = \"modal-element\") {\n \"undefined\" == typeof window || window.customElements.get(e) || window.customElements.define(e, $d9c5053bade2d3f8$export$32589115725b904b);\n }\n}\n$d9c5053bade2d3f8$export$32589115725b904b.defineCustomElement();\n //# sourceMappingURL=modal-element-defined.js.map\n\n\nObject.defineProperty({}, \"FilesDropzone\", {\n get: function() {\n return $9351176e8d763a78$export$6ccd1735166caad9;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $9351176e8d763a78$var$e = new Map([\n [\n \"aac\",\n \"audio/aac\"\n ],\n [\n \"abw\",\n \"application/x-abiword\"\n ],\n [\n \"arc\",\n \"application/x-freearc\"\n ],\n [\n \"avif\",\n \"image/avif\"\n ],\n [\n \"avi\",\n \"video/x-msvideo\"\n ],\n [\n \"azw\",\n \"application/vnd.amazon.ebook\"\n ],\n [\n \"bin\",\n \"application/octet-stream\"\n ],\n [\n \"bmp\",\n \"image/bmp\"\n ],\n [\n \"bz\",\n \"application/x-bzip\"\n ],\n [\n \"bz2\",\n \"application/x-bzip2\"\n ],\n [\n \"cda\",\n \"application/x-cdf\"\n ],\n [\n \"csh\",\n \"application/x-csh\"\n ],\n [\n \"css\",\n \"text/css\"\n ],\n [\n \"csv\",\n \"text/csv\"\n ],\n [\n \"doc\",\n \"application/msword\"\n ],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ],\n [\n \"eot\",\n \"application/vnd.ms-fontobject\"\n ],\n [\n \"epub\",\n \"application/epub+zip\"\n ],\n [\n \"gz\",\n \"application/gzip\"\n ],\n [\n \"gif\",\n \"image/gif\"\n ],\n [\n \"heic\",\n \"image/heic\"\n ],\n [\n \"heif\",\n \"image/heif\"\n ],\n [\n \"htm\",\n \"text/html\"\n ],\n [\n \"html\",\n \"text/html\"\n ],\n [\n \"ico\",\n \"image/vnd.microsoft.icon\"\n ],\n [\n \"ics\",\n \"text/calendar\"\n ],\n [\n \"jar\",\n \"application/java-archive\"\n ],\n [\n \"jpeg\",\n \"image/jpeg\"\n ],\n [\n \"jpg\",\n \"image/jpeg\"\n ],\n [\n \"jxl\",\n \"image/jxl\"\n ],\n [\n \"js\",\n \"text/javascript\"\n ],\n [\n \"json\",\n \"application/json\"\n ],\n [\n \"jsonld\",\n \"application/ld+json\"\n ],\n [\n \"markdown\",\n \"text/markdown\"\n ],\n [\n \"md\",\n \"text/markdown\"\n ],\n [\n \"mid\",\n \"audio/midi\"\n ],\n [\n \"midi\",\n \"audio/midi\"\n ],\n [\n \"mjs\",\n \"text/javascript\"\n ],\n [\n \"mp3\",\n \"audio/mpeg\"\n ],\n [\n \"mp4\",\n \"video/mp4\"\n ],\n [\n \"mpeg\",\n \"video/mpeg\"\n ],\n [\n \"mpkg\",\n \"application/vnd.apple.installer+xml\"\n ],\n [\n \"odp\",\n \"application/vnd.oasis.opendocument.presentation\"\n ],\n [\n \"ods\",\n \"application/vnd.oasis.opendocument.spreadsheet\"\n ],\n [\n \"odt\",\n \"application/vnd.oasis.opendocument.text\"\n ],\n [\n \"oga\",\n \"audio/ogg\"\n ],\n [\n \"ogv\",\n \"video/ogg\"\n ],\n [\n \"ogx\",\n \"application/ogg\"\n ],\n [\n \"opus\",\n \"audio/opus\"\n ],\n [\n \"otf\",\n \"font/otf\"\n ],\n [\n \"png\",\n \"image/png\"\n ],\n [\n \"pdf\",\n \"application/pdf\"\n ],\n [\n \"php\",\n \"application/x-httpd-php\"\n ],\n [\n \"ppt\",\n \"application/vnd.ms-powerpoint\"\n ],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n ],\n [\n \"rar\",\n \"application/vnd.rar\"\n ],\n [\n \"rtf\",\n \"application/rtf\"\n ],\n [\n \"sh\",\n \"application/x-sh\"\n ],\n [\n \"svg\",\n \"image/svg+xml\"\n ],\n [\n \"swf\",\n \"application/x-shockwave-flash\"\n ],\n [\n \"tar\",\n \"application/x-tar\"\n ],\n [\n \"tif\",\n \"image/tiff\"\n ],\n [\n \"tiff\",\n \"image/tiff\"\n ],\n [\n \"ts\",\n \"video/mp2t\"\n ],\n [\n \"ttf\",\n \"font/ttf\"\n ],\n [\n \"txt\",\n \"text/plain\"\n ],\n [\n \"vsd\",\n \"application/vnd.visio\"\n ],\n [\n \"wav\",\n \"audio/wav\"\n ],\n [\n \"weba\",\n \"audio/webm\"\n ],\n [\n \"webm\",\n \"video/webm\"\n ],\n [\n \"webp\",\n \"image/webp\"\n ],\n [\n \"woff\",\n \"font/woff\"\n ],\n [\n \"woff2\",\n \"font/woff2\"\n ],\n [\n \"xhtml\",\n \"application/xhtml+xml\"\n ],\n [\n \"xls\",\n \"application/vnd.ms-excel\"\n ],\n [\n \"xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ],\n [\n \"xml\",\n \"application/xml\"\n ],\n [\n \"xul\",\n \"application/vnd.mozilla.xul+xml\"\n ],\n [\n \"zip\",\n \"application/zip\"\n ],\n [\n \"7z\",\n \"application/x-7z-compressed\"\n ],\n [\n \"mkv\",\n \"video/x-matroska\"\n ],\n [\n \"mov\",\n \"video/quicktime\"\n ],\n [\n \"msg\",\n \"application/vnd.ms-outlook\"\n ]\n]), $9351176e8d763a78$var$t = [\n \".DS_Store\",\n \"Thumbs.db\"\n], $9351176e8d763a78$var$o = (t)=>{\n let { name: o } = t;\n if (o && -1 !== o.lastIndexOf(\".\") && !t.type) {\n let i = (o.split(\".\").pop() || \"\").toLowerCase(), r = $9351176e8d763a78$var$e.get(i);\n r && Object.defineProperty(t, \"type\", {\n value: r,\n writable: !1,\n configurable: !1,\n enumerable: !0\n });\n }\n return t;\n}, $9351176e8d763a78$var$i = (e, t)=>{\n let i = $9351176e8d763a78$var$o(e);\n if (\"string\" != typeof i.path) {\n let { webkitRelativePath: o } = e;\n Object.defineProperty(i, \"path\", {\n value: \"string\" == typeof t ? t : o || e.name,\n writable: !1,\n configurable: !1,\n enumerable: !0\n });\n }\n return i;\n}, $9351176e8d763a78$var$r = async (e)=>await new Promise((t, o)=>{\n e.readEntries(t, o);\n }), $9351176e8d763a78$var$a = async (e)=>{\n let t = [], o = await $9351176e8d763a78$var$r(e);\n for(; o.length > 0;)t.push(...o), o = await $9351176e8d763a78$var$r(e);\n return t;\n}, $9351176e8d763a78$var$n = (e)=>new Promise((t, o)=>{\n e.file((o)=>t($9351176e8d763a78$var$i(o, e.fullPath)), o);\n }), $9351176e8d763a78$var$s = async (e)=>{\n let o = [], i = [];\n for (let t of e){\n if (\"file\" !== t.kind) continue;\n let e = t.getAsEntry ? t.getAsEntry() : t.webkitGetAsEntry();\n i.push(e);\n }\n for(; i.length > 0;){\n let e = i.shift();\n if (e) {\n if (e.isFile) {\n let i = await $9351176e8d763a78$var$n(e);\n -1 === $9351176e8d763a78$var$t.indexOf(i.name) && o.push(i);\n } else e.isDirectory && i.push(...await $9351176e8d763a78$var$a(e.createReader()));\n }\n }\n return o;\n}, $9351176e8d763a78$var$d = async (e)=>{\n let o = [];\n for (let r of e)-1 === $9351176e8d763a78$var$t.indexOf(r.name) && o.push($9351176e8d763a78$var$i(r));\n return o;\n}, $9351176e8d763a78$var$l = async (e)=>e.dataTransfer ? e.dataTransfer.items ? await $9351176e8d763a78$var$s(e.dataTransfer.items) : await $9351176e8d763a78$var$d(e.dataTransfer.files) : await $9351176e8d763a78$var$d(e.target.files), $9351176e8d763a78$var$p = \"files-dropzone\", $9351176e8d763a78$var$c = \"TOO_MANY_FILES\", $9351176e8d763a78$var$h = document.createElement(\"template\"), $9351176e8d763a78$var$u = `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n$9351176e8d763a78$var$h.innerHTML = `\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\nclass $9351176e8d763a78$export$6ccd1735166caad9 extends HTMLElement {\n #e = null;\n #t = null;\n constructor(){\n super(), this.shadowRoot || this.attachShadow({\n mode: \"open\"\n }).appendChild($9351176e8d763a78$var$h.content.cloneNode(!0)), this.shadowRoot && (this.#e = this.shadowRoot.getElementById(\"fileInput\"), this.#t = this.shadowRoot.getElementById(\"dropzoneEl\"));\n }\n static get observedAttributes() {\n return [\n \"accept\",\n \"disabled\",\n \"multiple\",\n \"no-keyboard\"\n ];\n }\n attributeChangedCallback(e, t, o) {\n \"accept\" === e && t !== o && this.#e && (this.#e.accept = this.accept), \"disabled\" === e && t !== o && this.#e && (this.#e.disabled = this.disabled, this.disabled ? this.#t?.removeAttribute(\"tabindex\") : this.#t?.setAttribute(\"tabindex\", \"0\")), \"multiple\" === e && t !== o && this.#e && (this.#e.multiple = this.multiple), \"no-keyboard\" === e && t !== o && this.#t && (this.noKeyboard ? this.#t.removeAttribute(\"tabindex\") : this.#t.setAttribute(\"tabindex\", \"0\"));\n }\n connectedCallback() {\n this.#o(\"accept\"), this.#o(\"disabled\"), this.#o(\"maxFiles\"), this.#o(\"maxSize\"), this.#o(\"minSize\"), this.#o(\"multiple\"), this.#o(\"noClick\"), this.#o(\"noDrag\"), this.#o(\"noKeyboard\"), this.#o(\"autoFocus\"), this.#o(\"noStyle\"), this.#e?.addEventListener(\"change\", this.#i), this.#t?.addEventListener(\"dragenter\", this.#r), this.#t?.addEventListener(\"dragover\", this.#a), this.#t?.addEventListener(\"dragleave\", this.#n), this.#t?.addEventListener(\"drop\", this.#s), this.#t?.addEventListener(\"click\", this.#d), this.#t?.addEventListener(\"keyup\", this.#l), this.autoFocus && this.#t?.focus();\n }\n disconnectedCallback() {\n this.#e?.removeEventListener(\"change\", this.#i), this.#t?.removeEventListener(\"dragenter\", this.#r), this.#t?.removeEventListener(\"dragover\", this.#a), this.#t?.removeEventListener(\"dragleave\", this.#n), this.#t?.removeEventListener(\"drop\", this.#s), this.#t?.removeEventListener(\"click\", this.#d), this.#t?.removeEventListener(\"keyup\", this.#l);\n }\n get accept() {\n return this.getAttribute(\"accept\") || \"\";\n }\n set accept(e) {\n this.setAttribute(\"accept\", null != e ? e.toString() : e);\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(e) {\n this.toggleAttribute(\"disabled\", !!e);\n }\n get maxFiles() {\n let e = Number(this.getAttribute(\"max-files\")) || 0;\n return e <= 0 ? 1 / 0 : Math.floor(Math.abs(e));\n }\n set maxFiles(e) {\n this.setAttribute(\"max-files\", null != e ? e.toString() : e);\n }\n get maxSize() {\n let e = this.getAttribute(\"max-size\");\n if (null === e) return 1 / 0;\n let t = Number(e);\n return Number.isNaN(t) ? 1 / 0 : t;\n }\n set maxSize(e) {\n this.setAttribute(\"max-size\", null != e ? e.toString() : e);\n }\n get minSize() {\n let e = this.getAttribute(\"min-size\");\n if (null === e) return 0;\n let t = Number(e);\n return Number.isNaN(t) ? 0 : t;\n }\n set minSize(e) {\n this.setAttribute(\"min-size\", null != e ? e.toString() : e);\n }\n get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(e) {\n this.toggleAttribute(\"multiple\", !!e);\n }\n get noClick() {\n return this.hasAttribute(\"no-click\");\n }\n set noClick(e) {\n this.toggleAttribute(\"no-click\", !!e);\n }\n get noDrag() {\n return this.hasAttribute(\"no-drag\");\n }\n set noDrag(e) {\n this.toggleAttribute(\"no-drag\", !!e);\n }\n get noKeyboard() {\n return this.hasAttribute(\"no-keyboard\");\n }\n set noKeyboard(e) {\n this.toggleAttribute(\"no-keyboard\", !!e);\n }\n get autoFocus() {\n return this.hasAttribute(\"auto-focus\");\n }\n set autoFocus(e) {\n this.toggleAttribute(\"auto-focus\", !!e);\n }\n get noStyle() {\n return this.hasAttribute(\"no-style\");\n }\n set noStyle(e) {\n this.toggleAttribute(\"no-style\", !!e);\n }\n #i = async (e)=>{\n try {\n this.#p(await $9351176e8d763a78$var$l(e));\n } catch (e) {\n this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: e\n }\n }));\n }\n };\n #r = ()=>{\n this.disabled || this.noDrag || this.dispatchEvent(new Event(`${$9351176e8d763a78$var$p}-dragenter`, {\n bubbles: !0,\n composed: !0\n }));\n };\n #a = (e)=>{\n if (e.preventDefault(), this.disabled || this.noDrag) {\n e.dataTransfer.dropEffect = \"none\";\n return;\n }\n e.dataTransfer.dropEffect = \"copy\", this.#t && (this.#t.classList.add(\"dropzone--dragover\"), this.#t.part.add(\"dropzone--dragover\")), this.dispatchEvent(new Event(`${$9351176e8d763a78$var$p}-dragover`, {\n bubbles: !0,\n composed: !0\n }));\n };\n #n = ()=>{\n this.disabled || this.noDrag || (this.#t && (this.#t.classList.remove(\"dropzone--dragover\"), this.#t.part.remove(\"dropzone--dragover\")), this.dispatchEvent(new Event(`${$9351176e8d763a78$var$p}-dragleave`, {\n bubbles: !0,\n composed: !0\n })));\n };\n #s = async (e)=>{\n if (!this.disabled && !this.noDrag) {\n e.preventDefault(), this.#t && (this.#t.classList.remove(\"dropzone--dragover\"), this.#t.part.remove(\"dropzone--dragover\"));\n try {\n this.#p(await $9351176e8d763a78$var$l(e));\n } catch (e) {\n this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: e\n }\n }));\n }\n }\n };\n #d = ()=>{\n this.disabled || this.noClick || this.#e?.click();\n };\n #l = (e)=>{\n this.disabled || this.noKeyboard || \" \" !== e.key && \"Enter\" !== e.key || this.#e?.click();\n };\n #p(e) {\n if (!Array.isArray(e) || !e.length) return;\n let t = [], o = [], i = e.length;\n if (!this.multiple && i > 1) for (let t of e)o.push({\n file: t,\n errors: [\n {\n code: $9351176e8d763a78$var$c,\n message: \"Too many files selected. Only 1 file is allowed.\"\n }\n ]\n });\n else if (this.multiple && i > this.maxFiles) for (let t of e)o.push({\n file: t,\n errors: [\n {\n code: $9351176e8d763a78$var$c,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? \"files are\" : \"file is\"} allowed.`\n }\n ]\n });\n else for (let i of e){\n let e = function(e, t = \"\") {\n if (!t) return !0;\n let o = [\n ...new Set(t.split(\",\").map((e)=>e.trim()).filter(Boolean))\n ], i = e.type, r = i.replace(/\\/.*$/, \"\");\n for (let t of o)if (\".\" === t.charAt(0)) {\n if (-1 !== e.name.toLowerCase().indexOf(t.toLowerCase(), e.name.length - t.length)) return !0;\n } else if (/\\/\\*$/.test(t)) {\n if (r === t.replace(/\\/.*$/, \"\")) return !0;\n } else if (i === t) return !0;\n return !1;\n }(i, this.accept), r = i.size > this.maxSize, a = i.size < this.minSize;\n if (!e || r || a) {\n let t = [];\n e || t.push({\n code: \"INVALID_MIME_TYPE\",\n message: `File type \"${i.type}\" is not accepted.`\n }), r && t.push({\n code: \"FILE_TOO_LARGE\",\n message: `File size ${i.size} exceeds the maximum size of ${this.maxSize}.`\n }), a && t.push({\n code: \"FILE_TOO_SMALL\",\n message: `File size ${i.size} is smaller than the minimum size of ${this.minSize}.`\n }), o.push({\n file: i,\n errors: t\n });\n } else t.push(i);\n }\n this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-drop`, {\n bubbles: !0,\n composed: !0,\n detail: {\n acceptedFiles: t,\n rejectedFiles: o\n }\n })), t.length > 0 && this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-drop-accepted`, {\n bubbles: !0,\n composed: !0,\n detail: {\n acceptedFiles: t\n }\n })), o.length > 0 && this.dispatchEvent(new CustomEvent(`${$9351176e8d763a78$var$p}-drop-rejected`, {\n bubbles: !0,\n composed: !0,\n detail: {\n rejectedFiles: o\n }\n })), this.#e && (this.#e.value = this.#e.defaultValue);\n }\n openFileDialog() {\n this.disabled || this.#e?.click();\n }\n #o(e) {\n if (Object.prototype.hasOwnProperty.call(this, e)) {\n let t = this[e];\n delete this[e], this[e] = t;\n }\n }\n static defineCustomElement(e = $9351176e8d763a78$var$p) {\n \"undefined\" == typeof window || window.customElements.get(e) || window.customElements.define(e, $9351176e8d763a78$export$6ccd1735166caad9);\n }\n}\n$9351176e8d763a78$export$6ccd1735166caad9.defineCustomElement();\n\n\n\n\n/**\n * Removes one or more elements from an array at the specified index(es).\n *\n * @param {Array} array The initial array to remove elements from.\n * @param {Number} ...indexes The index(es) of the elements to be removed. Non numbers are ignored.\n * @throws {TypeError} If `array` is not array.\n * @returns {Array} The result array with the elements specified removed.\n * @example\n *\n * const arr = [1, 2, 3, 4, 5];\n *\n * remove(arr, 0);\n * // => [2, 3, 4, 5]\n *\n * remove(arr, 0, 1);\n * // => [3, 4, 5]\n *\n * remove(arr, 0, 4);\n * // => [2, 3, 4]\n *\n * remove(arr);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length - 1);\n * // => [1, 2, 3, 4]\n *\n * remove(arr, NaN);\n * // => [1, 2, 3, 4, 5]\n */ const $4af3d380d1884504$export$30a014203d0d7e4f = (array, ...indexes)=>{\n if (!Array.isArray(array)) throw new TypeError(\"Expected an array for first argument\");\n return array.filter((_, i)=>indexes.indexOf(i) === -1);\n};\n\n\n/**\n * Generates a unique id of the form `${prefix}-${randomString}-${suffix}`.\n *\n * @param {string} [prefix=''] - The prefix to use for the id.\n * @param {string} [suffix=''] - The suffix to use for the id.\n * @returns {string} - The unique id.\n */ const $17004b28c97c1306$export$e2a22331486dcca0 = (prefix = \"\", suffix = \"\")=>{\n const prefixString = typeof prefix === \"string\" && prefix !== \"\" ? prefix + \"-\" : \"\";\n const suffixString = typeof suffix === \"string\" && suffix !== \"\" ? \"-\" + suffix : \"\";\n const randomString = Math.random().toString(36).substring(2, 8); // Pseudo-random string of six alphanumeric characters.\n return `${prefixString}${randomString}${suffixString}`;\n};\n\n\nconst $65136e012e05e2d7$export$63e7bed68b07a85c = [\n \"image/jpg\",\n \"image/jpeg\",\n \"image/png\",\n \"image/apng\",\n \"image/gif\",\n \"image/webp\",\n \"image/avif\"\n];\n\n\nvar $5c8573fd76c057a5$exports = {};\n$5c8573fd76c057a5$exports = new URL(\"Pressuru.684952ea.ttf\", import.meta.url).toString();\n\n\nvar $2db6b38fbc5d48da$exports = {};\n$2db6b38fbc5d48da$exports = new URL(\"Oswald-Regular.89ec7d89.ttf\", import.meta.url).toString();\n\n\nvar $a0b1873abc1b077b$exports = {};\n$a0b1873abc1b077b$exports = new URL(\"Oswald-Bold.0f6a7ca6.ttf\", import.meta.url).toString();\n\n\nvar $df7c7f72fd04e02a$exports = {};\n$df7c7f72fd04e02a$exports = new URL(\"Roboto-Regular.ca197847.ttf\", import.meta.url).toString();\n\n\nvar $e4c2039736f96f5d$exports = {};\n$e4c2039736f96f5d$exports = new URL(\"Roboto-Bold.fdb9b54a.ttf\", import.meta.url).toString();\n\n\nvar $fbff28e47a938944$exports = {};\n$fbff28e47a938944$exports = new URL(\"RobotoCondensed-Regular.d585f5c7.ttf\", import.meta.url).toString();\n\n\nvar $d8f4a375a42d32f4$exports = {};\n$d8f4a375a42d32f4$exports = new URL(\"RobotoCondensed-Bold.e1f96d4b.ttf\", import.meta.url).toString();\n\n\nvar $7cfbda315cbb4209$exports = {};\n$7cfbda315cbb4209$exports = new URL(\"CourierPrime-Regular.3a25a501.ttf\", import.meta.url).toString();\n\n\nvar $6379185b16d8409f$exports = {};\n$6379185b16d8409f$exports = new URL(\"CourierPrime-Bold.3d6bf689.ttf\", import.meta.url).toString();\n\n\nvar $454f2b111c8d0078$exports = {};\n$454f2b111c8d0078$exports = new URL(\"OpenSans-Regular.edf9e01b.ttf\", import.meta.url).toString();\n\n\nvar $c05fcaeb63dbd733$exports = {};\n$c05fcaeb63dbd733$exports = new URL(\"OpenSans-Bold.8fceb72b.ttf\", import.meta.url).toString();\n\n\nconst $56b863c8b6be7003$export$6874249d87f2602a = [\n {\n name: \"Pressuru\",\n label: \"Pressuru\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($5c8573fd76c057a5$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Oswald-Regular\",\n label: \"Oswald\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($2db6b38fbc5d48da$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Oswald-Bold\",\n label: \"Oswald Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($a0b1873abc1b077b$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"Roboto-Regular\",\n label: \"Roboto\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($df7c7f72fd04e02a$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Roboto-Bold\",\n label: \"Roboto Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($e4c2039736f96f5d$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"RobotoCondensed-Regular\",\n label: \"Roboto Condensed\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($fbff28e47a938944$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"RobotoCondensed-Bold\",\n label: \"Roboto Condensed Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($d8f4a375a42d32f4$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"CourierPrime-Regular\",\n label: \"Courier Prime\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($7cfbda315cbb4209$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"CourierPrime-Bold\",\n label: \"Courier Prime Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($6379185b16d8409f$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"OpenSans-Regular\",\n label: \"Open Sans\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($454f2b111c8d0078$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"OpenSans-Bold\",\n label: \"Open Sans Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($c05fcaeb63dbd733$exports))),\n style: \"normal\",\n weight: \"400\"\n }\n];\nconst $56b863c8b6be7003$export$59eceaef0c7797b2 = async (name, path, options = {})=>{\n try {\n const font = new FontFace(name, `url(${path})`, {\n ...options\n });\n await font.load();\n document.fonts.add(font);\n } catch (err) {\n console.error(err);\n }\n};\n\n\n\nconst $0374350c629f125f$export$6539e087749cf9d3 = async (options = {})=>{\n const res = await fetch(options.url);\n const blob = await res.blob();\n const mimeType = options.mimeType || blob.type || \"\";\n if (!(0, $65136e012e05e2d7$export$63e7bed68b07a85c).includes(mimeType)) throw new Error(`This is not an accepted image format. Accepted MIME types are: ${(0, $65136e012e05e2d7$export$63e7bed68b07a85c).join(\", \")}`);\n return new File([\n blob\n ], options.filename || \"\", blob);\n};\n\n\nconst $3969451ff60cb8d5$var$errorsContainer = document.getElementById(\"errorsContainer\");\nconst $3969451ff60cb8d5$var$hideError = (evt)=>{\n const target = evt.currentTarget;\n target.removeEventListener(\"click\", $3969451ff60cb8d5$var$hideError);\n $3969451ff60cb8d5$var$errorsContainer.removeChild(target.parentNode);\n};\nconst $3969451ff60cb8d5$export$af04143326425dbd = (message = \"\", type = \"info\")=>{\n const types = [\n \"info\",\n \"warning\",\n \"danger\"\n ];\n if (!types.includes(type)) type = \"info\";\n const template = /* html */ `\n ${message}\n \n `;\n const div = document.createElement(\"div\");\n div.className = `alert alert-${type} alert-dismissible text-break mb-2 fade`;\n div.innerHTML = template;\n div.querySelector(\"button\").addEventListener(\"click\", $3969451ff60cb8d5$var$hideError);\n $3969451ff60cb8d5$var$errorsContainer.appendChild(div);\n setTimeout(()=>div.classList.add(\"show\"), 100);\n};\n\n\n\nconst $224fa2388dce65c4$export$293a4b86a6fe2398 = (index, data = {})=>{\n const inputTemplate = /* html */ `\n
\n \n\n \n\n
\n \n \n \n
\n
\n\n
\n
\n
\n \n\n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n
\n `;\n const fragment = document.createDocumentFragment();\n const div = document.createElement(\"div\");\n div.className = \"bg-light border shadow-sm mb-3 rounded\";\n div.setAttribute(\"data-section\", \"textBox\");\n div.setAttribute(\"data-index\", index);\n div.innerHTML = inputTemplate;\n div.querySelector('[data-input=\"font\"]').value = data.font;\n div.querySelector('[data-input=\"textAlign\"]').value = data.textAlign;\n div.querySelector('[data-input=\"allCaps\"]').checked = data.allCaps;\n return fragment.appendChild(div);\n};\n\n\nconst $64ef5d4149d7e6a5$export$e653a2de0f3a8b89 = (image, canvas, ctx, textOptions = [])=>{\n if (image == null) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n if (typeof image === \"string\") {\n ctx.fillStyle = image;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n textOptions.forEach(function(item, index) {\n ctx.save();\n ctx.font = `${item.fontWeight} ${item.fontSize}px ${item.font}`;\n ctx.fillStyle = item.fillColor;\n ctx.textAlign = item.textAlign;\n ctx.strokeStyle = item.shadowColor;\n const multiplier = index + 1;\n const lineHeight = ctx.measureText(\"M\").width + item.fontSize / 2;\n const xPos = canvas.width / 2;\n const shadowBlur = item.shadowBlur;\n const text = item.allCaps === true ? item.text.toUpperCase() : item.text;\n const textLines = text.split(\"\\n\");\n if (shadowBlur !== 0) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = item.shadowColor;\n }\n ctx.translate(xPos + item.offsetX, lineHeight * multiplier + item.offsetY);\n ctx.rotate(item.rotate * Math.PI / 180);\n // first draw each line with shadow\n textLines.forEach((text, index)=>ctx.fillText(text, 0, index * lineHeight));\n // since shadows of multiline text may be drawn over letters of neighbour lines\n // (when shadow blur is big enough), re-draw text without shadows.\n ctx.shadowBlur = 0;\n textLines.forEach((text, index)=>ctx.fillText(text, 0, index * lineHeight));\n if (item.borderWidth > 0) {\n ctx.lineWidth = item.borderWidth;\n textLines.forEach((text, index)=>ctx.strokeText(text, 0, index * lineHeight));\n }\n ctx.restore();\n });\n};\n\n\nconst $85a5f86b715fe7db$var$videoModal = document.getElementById(\"videoModal\");\nconst $85a5f86b715fe7db$var$downloadModal = document.getElementById(\"downloadModal\");\nconst $85a5f86b715fe7db$var$canvas = document.getElementById(\"canvas\");\nconst $85a5f86b715fe7db$var$dropzoneEl = document.querySelector(\"files-dropzone\");\nconst $85a5f86b715fe7db$var$instructionsEl = document.getElementById(\"instructions\");\nconst $85a5f86b715fe7db$var$ctx = $85a5f86b715fe7db$var$canvas.getContext(\"2d\");\nconst $85a5f86b715fe7db$var$imageUploadMethodSelect = document.getElementById(\"imageUploadMethodSelect\");\nconst $85a5f86b715fe7db$var$fileSelectBtn = document.getElementById(\"fileSelectBtn\");\nconst $85a5f86b715fe7db$var$imageUrlForm = document.getElementById(\"imageUrlForm\");\nconst $85a5f86b715fe7db$var$addTextboxBtn = document.getElementById(\"addTextboxBtn\");\nconst $85a5f86b715fe7db$var$inputsContainer = document.getElementById(\"inputsContainer\");\nconst $85a5f86b715fe7db$var$generateMemeBtn = document.getElementById(\"generateMemeBtn\");\nconst $85a5f86b715fe7db$var$openVideoModalBtn = document.getElementById(\"openVideoModalBtn\");\nconst $85a5f86b715fe7db$var$downloadMemeBtn = document.getElementById(\"downloadMemeBtn\");\nconst $85a5f86b715fe7db$var$downloadMemePreview = document.getElementById(\"downloadMemePreview\");\nconst $85a5f86b715fe7db$var$webShareComponent = document.querySelector(\"web-share\");\nconst $85a5f86b715fe7db$var$galleryEl = document.getElementById(\"gallery\");\nconst $85a5f86b715fe7db$var$gallerySearchEl = document.getElementById(\"gallerySearch\");\nconst $85a5f86b715fe7db$var$galleryNoResultsEl = $85a5f86b715fe7db$var$galleryEl.querySelector(\".gallery__no-results\");\nconst $85a5f86b715fe7db$var$solidColorForm = document.getElementById(\"solidColorForm\");\nconst $85a5f86b715fe7db$var$uploadMethodEls = document.querySelectorAll(\".upload-method\");\nlet $85a5f86b715fe7db$var$selectedImage = null;\nlet $85a5f86b715fe7db$var$reqAnimFrame = null;\nconst $85a5f86b715fe7db$var$defaultTextOptions = {\n _isSettingsOpen: false,\n text: \"\",\n fillColor: \"#ffffff\",\n shadowColor: \"#000000\",\n font: \"Pressuru\",\n fontSize: 40,\n fontWeight: \"normal\",\n textAlign: \"center\",\n shadowBlur: 3,\n borderWidth: 1,\n offsetY: 0,\n offsetX: 0,\n rotate: 0,\n allCaps: true\n};\nlet $85a5f86b715fe7db$var$textOptions = [\n {\n ...$85a5f86b715fe7db$var$defaultTextOptions\n }\n];\nconst $85a5f86b715fe7db$var$generateMeme = async ()=>{\n const dataUrl = $85a5f86b715fe7db$var$canvas.toDataURL(\"image/png\");\n // Prepare download link\n const downloadLink = dataUrl.replace(\"image/png\", \"image/octet-stream\");\n $85a5f86b715fe7db$var$downloadMemeBtn.download = `${(0, $17004b28c97c1306$export$e2a22331486dcca0)(\"meme\")}.png`;\n $85a5f86b715fe7db$var$downloadMemeBtn.href = downloadLink;\n $85a5f86b715fe7db$var$downloadMemePreview.width = $85a5f86b715fe7db$var$canvas.width;\n $85a5f86b715fe7db$var$downloadMemePreview.height = $85a5f86b715fe7db$var$canvas.height;\n $85a5f86b715fe7db$var$downloadMemePreview.src = downloadLink;\n // Prepare for sharing file\n if ((0, $7a2aca835bb05064$export$c37129e465f64ef0)()) try {\n const file = await (0, $0374350c629f125f$export$6539e087749cf9d3)({\n url: dataUrl,\n filename: `${(0, $17004b28c97c1306$export$e2a22331486dcca0)(\"meme\")}.png`,\n mimeType: \"image/png\"\n }).catch((err)=>(0, $3969451ff60cb8d5$export$af04143326425dbd)(err.message, \"danger\"));\n if (file && (0, $7a2aca835bb05064$export$c37129e465f64ef0)({\n files: [\n file\n ]\n })) {\n $85a5f86b715fe7db$var$webShareComponent.shareFiles = [\n file\n ];\n $85a5f86b715fe7db$var$webShareComponent.hidden = false;\n }\n } catch (error) {\n console.error(error);\n }\n window.requestAnimationFrame(()=>{\n $85a5f86b715fe7db$var$downloadModal.open = true;\n });\n};\nconst $85a5f86b715fe7db$var$onImageLoaded = (evt)=>{\n const MAX_WIDTH = 4000;\n const MAX_HEIGHT = 3000;\n let width = evt.target.width;\n let height = evt.target.height;\n if (width > height) {\n if (width > MAX_WIDTH) {\n height *= MAX_WIDTH / width;\n width = MAX_WIDTH;\n }\n } else if (height > MAX_HEIGHT) {\n width *= MAX_HEIGHT / height;\n height = MAX_HEIGHT;\n }\n $85a5f86b715fe7db$var$canvas.width = width;\n $85a5f86b715fe7db$var$canvas.height = height;\n $85a5f86b715fe7db$var$selectedImage = evt.target;\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n $85a5f86b715fe7db$var$generateMemeBtn.disabled = false;\n $85a5f86b715fe7db$var$canvas.hidden = false;\n $85a5f86b715fe7db$var$instructionsEl.hidden = true;\n};\nconst $85a5f86b715fe7db$var$handleSolidColorFormInput = (evt)=>{\n const DEFAULT_WIDTH = 600;\n const DEFAULT_HEIGHT = 400;\n if (evt.target === $85a5f86b715fe7db$var$solidColorForm[\"canvasColor\"]) $85a5f86b715fe7db$var$selectedImage = evt.target.value;\n if (typeof $85a5f86b715fe7db$var$selectedImage === \"string\") {\n $85a5f86b715fe7db$var$canvas.width = Number($85a5f86b715fe7db$var$solidColorForm[\"canvasWidth\"].value) || DEFAULT_WIDTH;\n $85a5f86b715fe7db$var$canvas.height = Number($85a5f86b715fe7db$var$solidColorForm[\"canvasHeight\"].value) || DEFAULT_HEIGHT;\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n $85a5f86b715fe7db$var$generateMemeBtn.disabled = false;\n $85a5f86b715fe7db$var$canvas.hidden = false;\n $85a5f86b715fe7db$var$instructionsEl.hidden = true;\n }\n};\nconst $85a5f86b715fe7db$var$handleFileSelect = (file)=>{\n if (!file) return;\n const image = new Image();\n const reader = new FileReader();\n reader.addEventListener(\"load\", function(evt) {\n const data = evt.target.result;\n image.addEventListener(\"load\", $85a5f86b715fe7db$var$onImageLoaded);\n image.src = data;\n });\n reader.readAsDataURL(file);\n};\nconst $85a5f86b715fe7db$var$handleOpenVideoModalButtonClick = ()=>{\n $85a5f86b715fe7db$var$videoModal.open = true;\n};\nconst $85a5f86b715fe7db$var$handleTextPropChange = (element, index, prop)=>{\n if (element.type === \"checkbox\") $85a5f86b715fe7db$var$textOptions[index][prop] = element.checked;\n else if (element.type === \"number\") $85a5f86b715fe7db$var$textOptions[index][prop] = Number(element.value);\n else $85a5f86b715fe7db$var$textOptions[index][prop] = element.value;\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n};\nconst $85a5f86b715fe7db$var$handleAddTextboxBtnClick = ()=>{\n const textOptionsLength = $85a5f86b715fe7db$var$textOptions.length;\n const newTextBox = (0, $224fa2388dce65c4$export$293a4b86a6fe2398)(textOptionsLength, $85a5f86b715fe7db$var$defaultTextOptions);\n $85a5f86b715fe7db$var$textOptions.push({\n ...$85a5f86b715fe7db$var$defaultTextOptions\n });\n $85a5f86b715fe7db$var$inputsContainer.appendChild(newTextBox);\n newTextBox.querySelector('[data-input=\"text\"]').focus();\n};\nconst $85a5f86b715fe7db$var$handleImageUploadFromURL = async (evt)=>{\n evt.preventDefault();\n const form = evt.target;\n const submitButton = form.querySelector('button[type=\"submit\"]');\n const imageUrl = form[\"imageUrl\"].value;\n if (!imageUrl.trim()) return;\n submitButton.disabled = true;\n submitButton.querySelector(\".spinner\").hidden = false;\n submitButton.querySelector(\".label\").hidden = true;\n try {\n const file = await (0, $0374350c629f125f$export$6539e087749cf9d3)({\n url: imageUrl\n }).catch((err)=>(0, $3969451ff60cb8d5$export$af04143326425dbd)(err.message, \"danger\"));\n if (file) $85a5f86b715fe7db$var$handleFileSelect(file);\n } catch (err) {\n (0, $3969451ff60cb8d5$export$af04143326425dbd)(`Failed to load image from \"${imageUrl}\".`, \"danger\");\n } finally{\n submitButton.disabled = false;\n submitButton.querySelector(\".spinner\").hidden = true;\n submitButton.querySelector(\".label\").hidden = false;\n }\n};\nconst $85a5f86b715fe7db$var$moveText = (offsetDir, sign, index)=>()=>{\n const textBoxSection = document.querySelectorAll('[data-section=\"textBox\"]')[index];\n const offsetYInput = textBoxSection.querySelector('[data-input=\"offsetY\"]');\n const offsetXInput = textBoxSection.querySelector('[data-input=\"offsetX\"]');\n if (offsetDir === \"offsetY\") {\n if (sign === \"-\") $85a5f86b715fe7db$var$textOptions[index].offsetY -= 1;\n if (sign === \"+\") $85a5f86b715fe7db$var$textOptions[index].offsetY += 1;\n offsetYInput.value = $85a5f86b715fe7db$var$textOptions[index].offsetY;\n }\n if (offsetDir === \"offsetX\") {\n if (sign === \"-\") $85a5f86b715fe7db$var$textOptions[index].offsetX -= 1;\n if (sign === \"+\") $85a5f86b715fe7db$var$textOptions[index].offsetX += 1;\n offsetXInput.value = $85a5f86b715fe7db$var$textOptions[index].offsetX;\n }\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n $85a5f86b715fe7db$var$reqAnimFrame = requestAnimationFrame($85a5f86b715fe7db$var$moveText(offsetDir, sign, index));\n };\nconst $85a5f86b715fe7db$var$handleUploadMethodChange = (evt)=>{\n $85a5f86b715fe7db$var$uploadMethodEls.forEach((el)=>el.hidden = el.id !== evt.target.value);\n};\nconst $85a5f86b715fe7db$var$handleFileSelectClick = ()=>{\n if (typeof $85a5f86b715fe7db$var$dropzoneEl.openFileDialog === \"function\") $85a5f86b715fe7db$var$dropzoneEl.openFileDialog();\n};\nconst $85a5f86b715fe7db$var$handleDropFilesAccepted = (evt)=>{\n const [file] = evt.detail.acceptedFiles;\n if (file) $85a5f86b715fe7db$var$handleFileSelect(file);\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerInput = (evt)=>{\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let prop;\n if (element.matches('[data-input=\"text\"]')) prop = \"text\";\n else if (element.matches('[data-input=\"fillColor\"]')) prop = \"fillColor\";\n else if (element.matches('[data-input=\"shadowColor\"]')) prop = \"shadowColor\";\n else if (element.matches('[data-input=\"font\"]')) prop = \"font\";\n else if (element.matches('[data-input=\"fontSize\"]')) prop = \"fontSize\";\n else if (element.matches('[data-input=\"fontWeight\"]')) prop = \"fontWeight\";\n else if (element.matches('[data-input=\"textAlign\"]')) prop = \"textAlign\";\n else if (element.matches('[data-input=\"shadowBlur\"]')) prop = \"shadowBlur\";\n else if (element.matches('[data-input=\"offsetY\"]')) prop = \"offsetY\";\n else if (element.matches('[data-input=\"offsetX\"]')) prop = \"offsetX\";\n else if (element.matches('[data-input=\"rotate\"]')) prop = \"rotate\";\n else if (element.matches('[data-input=\"borderWidth\"]')) prop = \"borderWidth\";\n if (prop) $85a5f86b715fe7db$var$handleTextPropChange(element, index, prop);\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerChange = (evt)=>{\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let prop;\n if (element.matches('[data-input=\"allCaps\"]')) prop = \"allCaps\";\n if (prop) $85a5f86b715fe7db$var$handleTextPropChange(element, index, prop);\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerClick = (evt)=>{\n const element = evt.target;\n if (element.matches('[data-button=\"settings\"]')) {\n const textBoxIndex = element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\");\n const textBoxEls = document.querySelectorAll('[data-section=\"textBox\"]');\n textBoxEls.forEach((el, index)=>{\n const settingsEl = el.querySelector('[data-section=\"settings\"]');\n if (el.getAttribute(\"data-index\") === textBoxIndex) {\n settingsEl.hidden = !settingsEl.hidden;\n $85a5f86b715fe7db$var$textOptions[index]._isSettingsOpen = !$85a5f86b715fe7db$var$textOptions[index]._isSettingsOpen;\n } else {\n settingsEl.hidden = true;\n $85a5f86b715fe7db$var$textOptions[index]._isSettingsOpen = false;\n }\n });\n }\n if (element.matches('[data-button=\"delete-text-box\"]')) {\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let confirm = true;\n if ($85a5f86b715fe7db$var$textOptions[index].text.trim()) confirm = window.confirm(\"Are you sure you want to remove this text box?\");\n if (confirm) {\n $85a5f86b715fe7db$var$textOptions = (0, $4af3d380d1884504$export$30a014203d0d7e4f)($85a5f86b715fe7db$var$textOptions, index);\n $85a5f86b715fe7db$var$inputsContainer.querySelectorAll('[data-section=\"textBox\"]').forEach((el)=>el.remove());\n $85a5f86b715fe7db$var$textOptions.forEach((item, index)=>$85a5f86b715fe7db$var$inputsContainer.appendChild((0, $224fa2388dce65c4$export$293a4b86a6fe2398)(index, item)));\n (0, $64ef5d4149d7e6a5$export$e653a2de0f3a8b89)($85a5f86b715fe7db$var$selectedImage, $85a5f86b715fe7db$var$canvas, $85a5f86b715fe7db$var$ctx, $85a5f86b715fe7db$var$textOptions);\n }\n }\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerPointerdown = (evt)=>{\n const element = evt.target;\n const textBoxEl = element.closest('[data-section=\"textBox\"]');\n if (!textBoxEl) return;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton) return;\n const offsetDir = element.getAttribute(\"data-move\");\n const sign = element.getAttribute(\"data-sign\");\n $85a5f86b715fe7db$var$reqAnimFrame = requestAnimationFrame($85a5f86b715fe7db$var$moveText(offsetDir, sign, index));\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerPointerup = (evt)=>{\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton) return;\n cancelAnimationFrame($85a5f86b715fe7db$var$reqAnimFrame);\n $85a5f86b715fe7db$var$reqAnimFrame = null;\n};\nconst $85a5f86b715fe7db$var$handleInputsContainerPointerout = (evt)=>{\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton || !$85a5f86b715fe7db$var$reqAnimFrame) return;\n cancelAnimationFrame($85a5f86b715fe7db$var$reqAnimFrame);\n $85a5f86b715fe7db$var$reqAnimFrame = null;\n};\nconst $85a5f86b715fe7db$var$handleGalleryClick = async (evt)=>{\n const button = evt.target.closest(\"button\");\n if (!button) return;\n const img = button.querySelector(\"img\");\n try {\n const file = await (0, $0374350c629f125f$export$6539e087749cf9d3)({\n url: img.src\n }).catch((err)=>(0, $3969451ff60cb8d5$export$af04143326425dbd)(err.message, \"danger\"));\n if (file) $85a5f86b715fe7db$var$handleFileSelect(file);\n } catch (err) {\n (0, $3969451ff60cb8d5$export$af04143326425dbd)(`Failed to load image: \"${img.alt}\".`, \"danger\");\n }\n};\nconst $85a5f86b715fe7db$var$handleGallerySearchInput = (evt)=>{\n const query = evt.target.value.toLowerCase().trim();\n const galleryItems = $85a5f86b715fe7db$var$galleryEl.querySelectorAll(\"button\");\n galleryItems.forEach((item)=>{\n const alt = (item.querySelector(\"img\").getAttribute(\"alt\") || \"\").toLowerCase();\n item.hidden = !alt.includes(query);\n });\n $85a5f86b715fe7db$var$galleryNoResultsEl.hidden = !!$85a5f86b715fe7db$var$galleryEl.querySelector(\"button:not([hidden])\");\n};\nconst $85a5f86b715fe7db$var$handleWebShareError = ()=>{\n $85a5f86b715fe7db$var$downloadModal.open = false;\n (0, $3969451ff60cb8d5$export$af04143326425dbd)(\"There was an error while trying to share your meme.\", \"danger\");\n};\nconst $85a5f86b715fe7db$var$handleCapturePhotoError = (evt)=>{\n console.error(evt.detail.error);\n (0, $3969451ff60cb8d5$export$af04143326425dbd)(evt.detail.error.message, \"danger\");\n};\nconst $85a5f86b715fe7db$var$handleCapturePhotoSuccess = (evt)=>{\n $85a5f86b715fe7db$var$videoModal.open = false;\n const image = new Image();\n image.addEventListener(\"load\", $85a5f86b715fe7db$var$onImageLoaded);\n image.src = evt.detail.dataURI;\n};\nconst $85a5f86b715fe7db$var$handleModalOpen = (evt)=>{\n if (evt.target.id === \"videoModal\") {\n const capturePhotoComponent = $85a5f86b715fe7db$var$videoModal.querySelector(\"capture-photo\");\n if (capturePhotoComponent && typeof capturePhotoComponent.startVideoStream === \"function\") capturePhotoComponent.startVideoStream();\n }\n};\nconst $85a5f86b715fe7db$var$handleModalClose = (evt)=>{\n if (evt.target.id === \"videoModal\") {\n const capturePhotoComponent = $85a5f86b715fe7db$var$videoModal.querySelector(\"capture-photo\");\n if (capturePhotoComponent && typeof capturePhotoComponent.stopVideoStream === \"function\") capturePhotoComponent.stopVideoStream();\n }\n};\n$85a5f86b715fe7db$var$fileSelectBtn.addEventListener(\"click\", $85a5f86b715fe7db$var$handleFileSelectClick);\n$85a5f86b715fe7db$var$openVideoModalBtn.addEventListener(\"click\", $85a5f86b715fe7db$var$handleOpenVideoModalButtonClick);\n$85a5f86b715fe7db$var$addTextboxBtn.addEventListener(\"click\", $85a5f86b715fe7db$var$handleAddTextboxBtnClick);\n$85a5f86b715fe7db$var$generateMemeBtn.addEventListener(\"click\", $85a5f86b715fe7db$var$generateMeme);\n$85a5f86b715fe7db$var$downloadMemeBtn.addEventListener(\"click\", ()=>$85a5f86b715fe7db$var$downloadModal.open = false);\n$85a5f86b715fe7db$var$imageUrlForm.addEventListener(\"submit\", $85a5f86b715fe7db$var$handleImageUploadFromURL);\n$85a5f86b715fe7db$var$dropzoneEl.addEventListener(\"files-dropzone-drop-accepted\", $85a5f86b715fe7db$var$handleDropFilesAccepted);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"input\", $85a5f86b715fe7db$var$handleInputsContainerInput);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"change\", $85a5f86b715fe7db$var$handleInputsContainerChange);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"click\", $85a5f86b715fe7db$var$handleInputsContainerClick);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"pointerdown\", $85a5f86b715fe7db$var$handleInputsContainerPointerdown);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"pointerup\", $85a5f86b715fe7db$var$handleInputsContainerPointerup);\n$85a5f86b715fe7db$var$inputsContainer.addEventListener(\"pointerout\", $85a5f86b715fe7db$var$handleInputsContainerPointerout);\n$85a5f86b715fe7db$var$imageUploadMethodSelect.addEventListener(\"change\", $85a5f86b715fe7db$var$handleUploadMethodChange);\n$85a5f86b715fe7db$var$galleryEl.addEventListener(\"click\", $85a5f86b715fe7db$var$handleGalleryClick);\n$85a5f86b715fe7db$var$gallerySearchEl.addEventListener(\"input\", $85a5f86b715fe7db$var$handleGallerySearchInput);\n$85a5f86b715fe7db$var$solidColorForm.addEventListener(\"input\", $85a5f86b715fe7db$var$handleSolidColorFormInput);\ndocument.addEventListener(\"web-share:error\", $85a5f86b715fe7db$var$handleWebShareError);\ndocument.addEventListener(\"capture-photo:error\", $85a5f86b715fe7db$var$handleCapturePhotoError);\ndocument.addEventListener(\"capture-photo:success\", $85a5f86b715fe7db$var$handleCapturePhotoSuccess);\ndocument.addEventListener(\"me-open\", $85a5f86b715fe7db$var$handleModalOpen);\ndocument.addEventListener(\"me-close\", $85a5f86b715fe7db$var$handleModalClose);\n$85a5f86b715fe7db$var$galleryEl.querySelectorAll(\"button > img\")?.forEach((image)=>{\n image.setAttribute(\"title\", image.getAttribute(\"alt\"));\n});\n$85a5f86b715fe7db$var$textOptions.forEach((item, index)=>{\n $85a5f86b715fe7db$var$inputsContainer.appendChild((0, $224fa2388dce65c4$export$293a4b86a6fe2398)(index, item));\n});\n$85a5f86b715fe7db$var$dropzoneEl.accept = (0, $65136e012e05e2d7$export$63e7bed68b07a85c);\n(0, $56b863c8b6be7003$export$6874249d87f2602a).forEach(({ name: name, path: path, style: style, weight: weight })=>{\n (0, $56b863c8b6be7003$export$59eceaef0c7797b2)(name, path, {\n style: style,\n weight: weight\n });\n});\n\n\n//# sourceMappingURL=index.a2b8f4c4.js.map\n","\"use strict\";\n\nvar mapping = new Map();\nfunction register(baseUrl, manifest) {\n for (var i = 0; i < manifest.length - 1; i += 2) {\n mapping.set(manifest[i], {\n baseUrl: baseUrl,\n path: manifest[i + 1]\n });\n }\n}\nfunction resolve(id) {\n var resolved = mapping.get(id);\n if (resolved == null) {\n throw new Error('Could not resolve bundle with id ' + id);\n }\n return new URL(resolved.path, resolved.baseUrl).toString();\n}\nmodule.exports.register = register;\nmodule.exports.resolve = resolve;","require('./helpers/bundle-manifest').register(new __parcel__URL__(\"\").toString(),JSON.parse(\"[\\\"eq2Ey\\\",\\\"index.a2b8f4c4.js\\\",\\\"9PqYx\\\",\\\"Pressuru.684952ea.ttf\\\",\\\"hr5Pp\\\",\\\"Oswald-Regular.89ec7d89.ttf\\\",\\\"5TebC\\\",\\\"Oswald-Bold.0f6a7ca6.ttf\\\",\\\"3ENF9\\\",\\\"Roboto-Regular.ca197847.ttf\\\",\\\"5yAXK\\\",\\\"Roboto-Bold.fdb9b54a.ttf\\\",\\\"k2KZ9\\\",\\\"RobotoCondensed-Regular.d585f5c7.ttf\\\",\\\"4h4UX\\\",\\\"RobotoCondensed-Bold.e1f96d4b.ttf\\\",\\\"8pomG\\\",\\\"CourierPrime-Regular.3a25a501.ttf\\\",\\\"l2v76\\\",\\\"CourierPrime-Bold.3d6bf689.ttf\\\",\\\"eKMWr\\\",\\\"OpenSans-Regular.edf9e01b.ttf\\\",\\\"dXO1Z\\\",\\\"OpenSans-Bold.8fceb72b.ttf\\\",\\\"9FH7D\\\",\\\"index.47ef8ac4.css\\\"]\"));","import { isWebShareSupported } from '@georapbox/web-share-element/dist/is-web-share-supported.js';\nimport '@georapbox/web-share-element/dist/web-share-defined.js';\nimport '@georapbox/capture-photo-element/dist/capture-photo-defined.js';\nimport '@georapbox/modal-element/dist/modal-element-defined.js';\nimport '@georapbox/files-dropzone-element/dist/files-dropzone-defined.js';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport '../css/main.css';\nimport { arrayRemove } from './utils/array-remove.js';\nimport { uid } from './utils/uid.js';\nimport { ACCEPTED_MIME_TYPES } from './constants.js';\nimport { customFonts, loadCustomFont } from './custom-fonts.js';\nimport { fileFromUrl } from './file-from-url.js';\nimport { toastAlert } from './toast-alert.js';\nimport { createTextBox } from './create-text-box.js';\nimport { drawCanvas } from './draw-canvas.js';\n\nconst videoModal = document.getElementById('videoModal');\nconst downloadModal = document.getElementById('downloadModal');\nconst canvas = document.getElementById('canvas');\nconst dropzoneEl = document.querySelector('files-dropzone');\nconst instructionsEl = document.getElementById('instructions');\nconst ctx = canvas.getContext('2d');\nconst imageUploadMethodSelect = document.getElementById('imageUploadMethodSelect');\nconst fileSelectBtn = document.getElementById('fileSelectBtn');\nconst imageUrlForm = document.getElementById('imageUrlForm');\nconst addTextboxBtn = document.getElementById('addTextboxBtn');\nconst inputsContainer = document.getElementById('inputsContainer');\nconst generateMemeBtn = document.getElementById('generateMemeBtn');\nconst openVideoModalBtn = document.getElementById('openVideoModalBtn');\nconst downloadMemeBtn = document.getElementById('downloadMemeBtn');\nconst downloadMemePreview = document.getElementById('downloadMemePreview');\nconst webShareComponent = document.querySelector('web-share');\nconst galleryEl = document.getElementById('gallery');\nconst gallerySearchEl = document.getElementById('gallerySearch');\nconst galleryNoResultsEl = galleryEl.querySelector('.gallery__no-results');\nconst solidColorForm = document.getElementById('solidColorForm');\nconst uploadMethodEls = document.querySelectorAll('.upload-method');\nlet selectedImage = null;\nlet reqAnimFrame = null;\n\nconst defaultTextOptions = {\n _isSettingsOpen: false,\n text: '',\n fillColor: '#ffffff',\n shadowColor: '#000000',\n font: 'Pressuru',\n fontSize: 40,\n fontWeight: 'normal',\n textAlign: 'center',\n shadowBlur: 3,\n borderWidth: 1,\n offsetY: 0,\n offsetX: 0,\n rotate: 0,\n allCaps: true\n};\n\nlet textOptions = [\n { ...defaultTextOptions }\n];\n\nconst generateMeme = async () => {\n const dataUrl = canvas.toDataURL('image/png');\n\n // Prepare download link\n const downloadLink = dataUrl.replace('image/png', 'image/octet-stream');\n downloadMemeBtn.download = `${uid('meme')}.png`;\n downloadMemeBtn.href = downloadLink;\n downloadMemePreview.width = canvas.width;\n downloadMemePreview.height = canvas.height;\n downloadMemePreview.src = downloadLink;\n\n // Prepare for sharing file\n if (isWebShareSupported()) {\n try {\n const file = await fileFromUrl({\n url: dataUrl,\n filename: `${uid('meme')}.png`,\n mimeType: 'image/png'\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file && isWebShareSupported({ files: [file] })) {\n webShareComponent.shareFiles = [file];\n webShareComponent.hidden = false;\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n window.requestAnimationFrame(() => {\n downloadModal.open = true;\n });\n};\n\nconst onImageLoaded = evt => {\n const MAX_WIDTH = 4000;\n const MAX_HEIGHT = 3000;\n let width = evt.target.width;\n let height = evt.target.height;\n\n if (width > height) {\n if (width > MAX_WIDTH) {\n height *= MAX_WIDTH / width;\n width = MAX_WIDTH;\n }\n } else {\n if (height > MAX_HEIGHT) {\n width *= MAX_HEIGHT / height;\n height = MAX_HEIGHT;\n }\n }\n canvas.width = width;\n canvas.height = height;\n\n selectedImage = evt.target;\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n generateMemeBtn.disabled = false;\n canvas.hidden = false;\n instructionsEl.hidden = true;\n};\n\nconst handleSolidColorFormInput = evt => {\n const DEFAULT_WIDTH = 600;\n const DEFAULT_HEIGHT = 400;\n\n if (evt.target === solidColorForm['canvasColor']) {\n selectedImage = evt.target.value;\n }\n\n if (typeof selectedImage === 'string') {\n canvas.width = Number(solidColorForm['canvasWidth'].value) || DEFAULT_WIDTH;\n canvas.height = Number(solidColorForm['canvasHeight'].value) || DEFAULT_HEIGHT;\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n generateMemeBtn.disabled = false;\n canvas.hidden = false;\n instructionsEl.hidden = true;\n }\n};\n\nconst handleFileSelect = file => {\n if (!file) {\n return;\n }\n\n const image = new Image();\n const reader = new FileReader();\n\n reader.addEventListener('load', function (evt) {\n const data = evt.target.result;\n image.addEventListener('load', onImageLoaded);\n image.src = data;\n });\n\n reader.readAsDataURL(file);\n};\n\nconst handleOpenVideoModalButtonClick = () => {\n videoModal.open = true;\n};\n\nconst handleTextPropChange = (element, index, prop) => {\n if (element.type === 'checkbox') {\n textOptions[index][prop] = element.checked;\n } else if (element.type === 'number') {\n textOptions[index][prop] = Number(element.value);\n } else {\n textOptions[index][prop] = element.value;\n }\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n};\n\nconst handleAddTextboxBtnClick = () => {\n const textOptionsLength = textOptions.length;\n const newTextBox = createTextBox(textOptionsLength, defaultTextOptions);\n\n textOptions.push({ ...defaultTextOptions });\n inputsContainer.appendChild(newTextBox);\n newTextBox.querySelector('[data-input=\"text\"]').focus();\n};\n\nconst handleImageUploadFromURL = async evt => {\n evt.preventDefault();\n\n const form = evt.target;\n const submitButton = form.querySelector('button[type=\"submit\"]');\n const imageUrl = form['imageUrl'].value;\n\n if (!imageUrl.trim()) {\n return;\n }\n\n submitButton.disabled = true;\n submitButton.querySelector('.spinner').hidden = false;\n submitButton.querySelector('.label').hidden = true;\n\n try {\n const file = await fileFromUrl({\n url: imageUrl\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file) {\n handleFileSelect(file);\n }\n } catch (err) {\n toastAlert(`Failed to load image from \"${imageUrl}\".`, 'danger');\n } finally {\n submitButton.disabled = false;\n submitButton.querySelector('.spinner').hidden = true;\n submitButton.querySelector('.label').hidden = false;\n }\n};\n\nconst moveText = (offsetDir, sign, index) => () => {\n const textBoxSection = document.querySelectorAll('[data-section=\"textBox\"]')[index];\n const offsetYInput = textBoxSection.querySelector('[data-input=\"offsetY\"]');\n const offsetXInput = textBoxSection.querySelector('[data-input=\"offsetX\"]');\n\n if (offsetDir === 'offsetY') {\n if (sign === '-') {\n textOptions[index].offsetY -= 1;\n }\n\n if (sign === '+') {\n textOptions[index].offsetY += 1;\n }\n\n offsetYInput.value = textOptions[index].offsetY;\n }\n\n if (offsetDir === 'offsetX') {\n if (sign === '-') {\n textOptions[index].offsetX -= 1;\n }\n\n if (sign === '+') {\n textOptions[index].offsetX += 1;\n }\n\n offsetXInput.value = textOptions[index].offsetX;\n }\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n reqAnimFrame = requestAnimationFrame(moveText(offsetDir, sign, index));\n};\n\nconst handleUploadMethodChange = evt => {\n uploadMethodEls.forEach(el => el.hidden = el.id !== evt.target.value);\n};\n\nconst handleFileSelectClick = () => {\n if (typeof dropzoneEl.openFileDialog === 'function') {\n dropzoneEl.openFileDialog();\n }\n};\n\nconst handleDropFilesAccepted = evt => {\n const [file] = evt.detail.acceptedFiles;\n\n if (file) {\n handleFileSelect(file);\n }\n};\n\nconst handleInputsContainerInput = evt => {\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let prop;\n\n if (element.matches('[data-input=\"text\"]')) {\n prop = 'text';\n } else if (element.matches('[data-input=\"fillColor\"]')) {\n prop = 'fillColor';\n } else if (element.matches('[data-input=\"shadowColor\"]')) {\n prop = 'shadowColor';\n } else if (element.matches('[data-input=\"font\"]')) {\n prop = 'font';\n } else if (element.matches('[data-input=\"fontSize\"]')) {\n prop = 'fontSize';\n } else if (element.matches('[data-input=\"fontWeight\"]')) {\n prop = 'fontWeight';\n } else if (element.matches('[data-input=\"textAlign\"]')) {\n prop = 'textAlign';\n } else if (element.matches('[data-input=\"shadowBlur\"]')) {\n prop = 'shadowBlur';\n } else if (element.matches('[data-input=\"offsetY\"]')) {\n prop = 'offsetY';\n } else if (element.matches('[data-input=\"offsetX\"]')) {\n prop = 'offsetX';\n } else if (element.matches('[data-input=\"rotate\"]')) {\n prop = 'rotate';\n } else if (element.matches('[data-input=\"borderWidth\"]')) {\n prop = 'borderWidth';\n }\n\n if (prop) {\n handleTextPropChange(element, index, prop);\n }\n};\n\nconst handleInputsContainerChange = evt => {\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let prop;\n\n if (element.matches('[data-input=\"allCaps\"]')) {\n prop = 'allCaps';\n }\n\n if (prop) {\n handleTextPropChange(element, index, prop);\n }\n};\n\nconst handleInputsContainerClick = evt => {\n const element = evt.target;\n\n if (element.matches('[data-button=\"settings\"]')) {\n const textBoxIndex = element.closest('[data-section=\"textBox\"]').getAttribute('data-index');\n const textBoxEls = document.querySelectorAll('[data-section=\"textBox\"]');\n\n textBoxEls.forEach((el, index) => {\n const settingsEl = el.querySelector('[data-section=\"settings\"]');\n\n if (el.getAttribute('data-index') === textBoxIndex) {\n settingsEl.hidden = !settingsEl.hidden;\n textOptions[index]._isSettingsOpen = !textOptions[index]._isSettingsOpen;\n } else {\n settingsEl.hidden = true;\n textOptions[index]._isSettingsOpen = false;\n }\n });\n }\n\n if (element.matches('[data-button=\"delete-text-box\"]')) {\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let confirm = true;\n\n if (textOptions[index].text.trim()) {\n confirm = window.confirm('Are you sure you want to remove this text box?');\n }\n\n if (confirm) {\n textOptions = arrayRemove(textOptions, index);\n inputsContainer.querySelectorAll('[data-section=\"textBox\"]').forEach(el => el.remove());\n textOptions.forEach((item, index) => inputsContainer.appendChild(createTextBox(index, item)));\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n }\n }\n};\n\nconst handleInputsContainerPointerdown = evt => {\n const element = evt.target;\n const textBoxEl = element.closest('[data-section=\"textBox\"]');\n\n if (!textBoxEl) {\n return;\n }\n\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton) {\n return;\n }\n\n const offsetDir = element.getAttribute('data-move');\n const sign = element.getAttribute('data-sign');\n\n reqAnimFrame = requestAnimationFrame(moveText(offsetDir, sign, index));\n};\n\nconst handleInputsContainerPointerup = evt => {\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton) {\n return;\n }\n\n cancelAnimationFrame(reqAnimFrame);\n reqAnimFrame = null;\n};\n\nconst handleInputsContainerPointerout = evt => {\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton || !reqAnimFrame) {\n return;\n }\n\n cancelAnimationFrame(reqAnimFrame);\n reqAnimFrame = null;\n};\n\nconst handleGalleryClick = async evt => {\n const button = evt.target.closest('button');\n\n if (!button) {\n return;\n }\n\n const img = button.querySelector('img');\n\n try {\n const file = await fileFromUrl({\n url: img.src\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file) {\n handleFileSelect(file);\n }\n } catch (err) {\n toastAlert(`Failed to load image: \"${img.alt}\".`, 'danger');\n }\n};\n\nconst handleGallerySearchInput = evt => {\n const query = evt.target.value.toLowerCase().trim();\n const galleryItems = galleryEl.querySelectorAll('button');\n\n galleryItems.forEach(item => {\n const alt = (item.querySelector('img').getAttribute('alt') || '').toLowerCase();\n item.hidden = !alt.includes(query);\n });\n\n galleryNoResultsEl.hidden = !!galleryEl.querySelector('button:not([hidden])');\n};\n\nconst handleWebShareError = () => {\n downloadModal.open = false;\n toastAlert('There was an error while trying to share your meme.', 'danger');\n};\n\nconst handleCapturePhotoError = evt => {\n console.error(evt.detail.error);\n toastAlert(evt.detail.error.message, 'danger');\n};\n\nconst handleCapturePhotoSuccess = evt => {\n videoModal.open = false;\n const image = new Image();\n image.addEventListener('load', onImageLoaded);\n image.src = evt.detail.dataURI;\n};\n\nconst handleModalOpen = evt => {\n if (evt.target.id === 'videoModal') {\n const capturePhotoComponent = videoModal.querySelector('capture-photo');\n\n if (capturePhotoComponent && typeof capturePhotoComponent.startVideoStream === 'function') {\n capturePhotoComponent.startVideoStream();\n }\n }\n};\n\nconst handleModalClose = evt => {\n if (evt.target.id === 'videoModal') {\n const capturePhotoComponent = videoModal.querySelector('capture-photo');\n\n if (capturePhotoComponent && typeof capturePhotoComponent.stopVideoStream === 'function') {\n capturePhotoComponent.stopVideoStream();\n }\n }\n};\n\nfileSelectBtn.addEventListener('click', handleFileSelectClick);\nopenVideoModalBtn.addEventListener('click', handleOpenVideoModalButtonClick);\naddTextboxBtn.addEventListener('click', handleAddTextboxBtnClick);\ngenerateMemeBtn.addEventListener('click', generateMeme);\ndownloadMemeBtn.addEventListener('click', () => downloadModal.open = false);\nimageUrlForm.addEventListener('submit', handleImageUploadFromURL);\ndropzoneEl.addEventListener('files-dropzone-drop-accepted', handleDropFilesAccepted);\ninputsContainer.addEventListener('input', handleInputsContainerInput);\ninputsContainer.addEventListener('change', handleInputsContainerChange);\ninputsContainer.addEventListener('click', handleInputsContainerClick);\ninputsContainer.addEventListener('pointerdown', handleInputsContainerPointerdown);\ninputsContainer.addEventListener('pointerup', handleInputsContainerPointerup);\ninputsContainer.addEventListener('pointerout', handleInputsContainerPointerout);\nimageUploadMethodSelect.addEventListener('change', handleUploadMethodChange);\ngalleryEl.addEventListener('click', handleGalleryClick);\ngallerySearchEl.addEventListener('input', handleGallerySearchInput);\nsolidColorForm.addEventListener('input', handleSolidColorFormInput);\ndocument.addEventListener('web-share:error', handleWebShareError);\ndocument.addEventListener('capture-photo:error', handleCapturePhotoError);\ndocument.addEventListener('capture-photo:success', handleCapturePhotoSuccess);\ndocument.addEventListener('me-open', handleModalOpen);\ndocument.addEventListener('me-close', handleModalClose);\n\ngalleryEl.querySelectorAll('button > img')?.forEach(image => {\n image.setAttribute('title', image.getAttribute('alt'));\n});\n\ntextOptions.forEach((item, index) => {\n inputsContainer.appendChild(createTextBox(index, item));\n});\n\ndropzoneEl.accept = ACCEPTED_MIME_TYPES;\n\ncustomFonts.forEach(({ name, path, style, weight }) => {\n loadCustomFont(name, path, { style, weight });\n});\n","function a(a){return null!==a&&\"object\"==typeof a?\"share\"in navigator&&\"canShare\"in navigator&&navigator.canShare(a):\"share\"in navigator}export{a as isWebShareSupported};\n//# sourceMappingURL=is-web-share-supported.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $e179325634270afd$exports = {};\n\n$parcel$export($e179325634270afd$exports, \"WebShare\", function () { return $e179325634270afd$export$30b344bef3e55b67; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ /**\n * Represents the data to share.\n *\n * @typedef {Object} ShareData\n * @property {string} [url] - The URL to share.\n * @property {string} [title] - The title to share.\n * @property {string} [text] - The text to share.\n * @property {File[]} [files] - The files to share.\n */ const $e179325634270afd$var$styles = /* css */ `\n :host {\n display: inline-block;\n }\n`;\nconst $e179325634270afd$var$template = document.createElement(\"template\");\n$e179325634270afd$var$template.innerHTML = /* html */ `\n \n \n`;\n/**\n * @summary A custom element that provides a button to share content.\n * @documentation https://github.com/georapbox/web-share-element\n *\n * @tagname web-share - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {boolean} disabled - Indicates whether the button is disabled.\n * @property {string} shareUrl - The URL to share.\n * @property {string} shareTitle - The title to share.\n * @property {string} shareText - The text to share.\n * @property {File[]} shareFiles - The files to share.\n *\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {string} share-url - Reflects the shareUrl property.\n * @attribute {string} share-title - Reflects the shareTitle property.\n * @attribute {string} share-text - Reflects the shareText property.\n *\n * @slot button - The button to share content.\n * @slot button-content - The content of the button to share content.\n *\n * @csspart button - The button to share content.\n * @csspart button--disabled - The button to share content when disabled.\n *\n * @event web-share:success - Fired when the share operation is successful.\n * @event web-share:abort - Fired when the share operation is aborted.\n * @event web-share:error - Fired when the share operation fails.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method share - Instance method. Shares the shareable data taken from the element's properties.\n */ class $e179325634270afd$export$30b344bef3e55b67 extends HTMLElement {\n /** @type {Nullable} */ #buttonSlot;\n /** @type {Nullable} */ #buttonEl;\n /** @type {File[]} */ #files = [];\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\",\n delegatesFocus: true\n });\n shadowRoot.appendChild($e179325634270afd$var$template.content.cloneNode(true));\n }\n this.#buttonSlot = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null;\n this.#buttonEl = this.#getButton();\n }\n static get observedAttributes() {\n return [\n \"disabled\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"disabled\" && oldValue !== newValue && this.#buttonEl) {\n this.#buttonEl.toggleAttribute(\"disabled\", this.disabled);\n this.#buttonEl.setAttribute(\"aria-disabled\", this.disabled.toString());\n if (this.#buttonEl.part && this.#buttonEl.part.contains(\"button\")) this.#buttonEl.part.toggle(\"button--disabled\", this.disabled);\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"shareUrl\");\n this.#upgradeProperty(\"shareTitle\");\n this.#upgradeProperty(\"shareText\");\n this.#upgradeProperty(\"shareFiles\");\n this.#upgradeProperty(\"disabled\");\n this.#buttonSlot?.addEventListener(\"slotchange\", this.#handleSlotChange);\n this.#buttonEl?.addEventListener(\"click\", this.#handleClick);\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#buttonSlot?.removeEventListener(\"slotchange\", this.#handleSlotChange);\n this.#buttonEl?.removeEventListener(\"click\", this.#handleClick);\n }\n /**\n * @type {boolean} - Indicates whether the button is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */ get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n this.toggleAttribute(\"disabled\", !!value);\n }\n /**\n * @type {string} - The URL to share.\n * @attribute share-url - Reflects the shareUrl property.\n */ get shareUrl() {\n return this.getAttribute(\"share-url\") || \"\";\n }\n set shareUrl(value) {\n this.setAttribute(\"share-url\", value);\n }\n /**\n * @type {string} - The title to share.\n * @attribute share-title - Reflects the shareTitle property.\n */ get shareTitle() {\n return this.getAttribute(\"share-title\") || \"\";\n }\n set shareTitle(value) {\n this.setAttribute(\"share-title\", value);\n }\n /**\n * @type {string} - The text to share.\n * @attribute share-text - Reflects the shareText property.\n */ get shareText() {\n return this.getAttribute(\"share-text\") || \"\";\n }\n set shareText(value) {\n this.setAttribute(\"share-text\", value);\n }\n /**\n * @type {File[]} - The files to share.\n */ get shareFiles() {\n return this.#files;\n }\n set shareFiles(value) {\n if (Array.isArray(value) && value.length > 0) this.#files = value;\n }\n /**\n * Shares the shareable data taken from the element's properties.\n *\n * @returns {Promise} - A promise that resolves when the share operation is complete.\n */ async share() {\n if (this.disabled) return;\n try {\n /** @type {ShareData} */ const shareData = {};\n if (this.shareUrl) shareData.url = this.shareUrl;\n if (this.shareTitle) shareData.title = this.shareTitle;\n if (this.shareText) shareData.text = this.shareText;\n if (Array.isArray(this.shareFiles) && this.shareFiles.length > 0 && navigator.canShare && navigator.canShare({\n files: this.shareFiles\n })) shareData.files = this.shareFiles;\n await navigator.share(shareData);\n this.dispatchEvent(new CustomEvent(\"web-share:success\", {\n bubbles: true,\n composed: true,\n detail: {\n shareData: shareData\n }\n }));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n this.dispatchEvent(new CustomEvent(\"web-share:abort\", {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n return;\n }\n this.dispatchEvent(new CustomEvent(\"web-share:error\", {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n }\n /**\n * Handles the click event on the button.\n *\n * @param {any} evt - The event object.\n */ #handleClick = (evt)=>{\n evt.preventDefault();\n if (this.disabled) return;\n this.share();\n };\n /**\n * Handles the slotchange event on the button slot.\n *\n * @param {any} evt - The event object.\n */ #handleSlotChange = (evt)=>{\n if (evt.target && evt.target.name === \"button\") {\n this.#buttonEl?.removeEventListener(\"click\", this.#handleClick);\n this.#buttonEl = this.#getButton();\n if (this.#buttonEl) {\n this.#buttonEl.addEventListener(\"click\", this.#handleClick);\n if (this.#buttonEl.nodeName !== \"BUTTON\" && !this.#buttonEl.hasAttribute(\"role\")) this.#buttonEl.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Returns the button element from the button slot.\n *\n * @returns {Nullable} - The button element.\n */ #getButton() {\n if (!this.#buttonSlot) return null;\n return this.#buttonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"button\";\n }) || null;\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'shareUrl' | 'shareTitle' | 'shareText' | 'shareFiles' | 'disabled'} prop - The property name to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n static defineCustomElement(elementName = \"web-share\") {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $e179325634270afd$export$30b344bef3e55b67);\n }\n}\n\n\n(0, $e179325634270afd$export$30b344bef3e55b67).defineCustomElement();\n\n\nexport {$e179325634270afd$export$30b344bef3e55b67 as WebShare};\n//# sourceMappingURL=web-share-defined.js.map\n","// @ts-check\n\n/**\n * Check if Web Share API is supported by the platform.\n *\n * @param {import('./web-share').ShareData} [options]\n * @returns {boolean} Returns `true` if Web Share API is supported; otherwise `false`.\n */\nfunction isWebShareSupported(options) {\n if (options !== null && typeof options === 'object') {\n return 'share' in navigator && 'canShare' in navigator && navigator.canShare(options);\n }\n\n return 'share' in navigator;\n}\n\nexport { isWebShareSupported };\n","Object.defineProperty({},\"WebShare\",{get:function(){return s},set:void 0,enumerable:!0,configurable:!0});let t=`\n :host {\n display: inline-block;\n }\n`,e=document.createElement(\"template\");e.innerHTML=`\n \n \n`;class s extends HTMLElement{#t;#e;#s=[];constructor(){super(),this.shadowRoot||this.attachShadow({mode:\"open\",delegatesFocus:!0}).appendChild(e.content.cloneNode(!0)),this.#t=this.shadowRoot?.querySelector('slot[name=\"button\"]')||null,this.#e=this.#i()}static get observedAttributes(){return[\"disabled\"]}attributeChangedCallback(t,e,s){\"disabled\"===t&&e!==s&&this.#e&&(this.#e.toggleAttribute(\"disabled\",this.disabled),this.#e.setAttribute(\"aria-disabled\",this.disabled.toString()),this.#e.part&&this.#e.part.contains(\"button\")&&this.#e.part.toggle(\"button--disabled\",this.disabled))}connectedCallback(){this.#r(\"shareUrl\"),this.#r(\"shareTitle\"),this.#r(\"shareText\"),this.#r(\"shareFiles\"),this.#r(\"disabled\"),this.#t?.addEventListener(\"slotchange\",this.#a),this.#e?.addEventListener(\"click\",this.#n)}disconnectedCallback(){this.#t?.removeEventListener(\"slotchange\",this.#a),this.#e?.removeEventListener(\"click\",this.#n)}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(t){this.toggleAttribute(\"disabled\",!!t)}get shareUrl(){return this.getAttribute(\"share-url\")||\"\"}set shareUrl(t){this.setAttribute(\"share-url\",t)}get shareTitle(){return this.getAttribute(\"share-title\")||\"\"}set shareTitle(t){this.setAttribute(\"share-title\",t)}get shareText(){return this.getAttribute(\"share-text\")||\"\"}set shareText(t){this.setAttribute(\"share-text\",t)}get shareFiles(){return this.#s}set shareFiles(t){Array.isArray(t)&&t.length>0&&(this.#s=t)}async share(){if(!this.disabled)try{let t={};this.shareUrl&&(t.url=this.shareUrl),this.shareTitle&&(t.title=this.shareTitle),this.shareText&&(t.text=this.shareText),Array.isArray(this.shareFiles)&&this.shareFiles.length>0&&navigator.canShare&&navigator.canShare({files:this.shareFiles})&&(t.files=this.shareFiles),await navigator.share(t),this.dispatchEvent(new CustomEvent(\"web-share:success\",{bubbles:!0,composed:!0,detail:{shareData:t}}))}catch(t){if(t instanceof Error&&\"AbortError\"===t.name){this.dispatchEvent(new CustomEvent(\"web-share:abort\",{bubbles:!0,composed:!0,detail:{error:t}}));return}this.dispatchEvent(new CustomEvent(\"web-share:error\",{bubbles:!0,composed:!0,detail:{error:t}}))}}#n=t=>{t.preventDefault(),this.disabled||this.share()};#a=t=>{t.target&&\"button\"===t.target.name&&(this.#e?.removeEventListener(\"click\",this.#n),this.#e=this.#i(),this.#e&&(this.#e.addEventListener(\"click\",this.#n),\"BUTTON\"===this.#e.nodeName||this.#e.hasAttribute(\"role\")||this.#e.setAttribute(\"role\",\"button\")))};#i(){return this.#t&&this.#t.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"button\"===t.getAttribute(\"slot\"))||null}#r(t){if(Object.prototype.hasOwnProperty.call(this,t)){let e=this[t];delete this[t],this[t]=e}}static defineCustomElement(t=\"web-share\"){\"undefined\"==typeof window||window.customElements.get(t)||window.customElements.define(t,s)}}s.defineCustomElement();export{s as WebShare};\n//# sourceMappingURL=web-share-defined.js.map\n","import { WebShare } from './web-share.js';\n\nWebShare.defineCustomElement();\n\nexport { WebShare };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\n/**\n * Represents the data to share.\n *\n * @typedef {Object} ShareData\n * @property {string} [url] - The URL to share.\n * @property {string} [title] - The title to share.\n * @property {string} [text] - The text to share.\n * @property {File[]} [files] - The files to share.\n */\n\nconst styles = /* css */`\n :host {\n display: inline-block;\n }\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */ `\n \n \n`;\n\n/**\n * @summary A custom element that provides a button to share content.\n * @documentation https://github.com/georapbox/web-share-element\n *\n * @tagname web-share - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {boolean} disabled - Indicates whether the button is disabled.\n * @property {string} shareUrl - The URL to share.\n * @property {string} shareTitle - The title to share.\n * @property {string} shareText - The text to share.\n * @property {File[]} shareFiles - The files to share.\n *\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {string} share-url - Reflects the shareUrl property.\n * @attribute {string} share-title - Reflects the shareTitle property.\n * @attribute {string} share-text - Reflects the shareText property.\n *\n * @slot button - The button to share content.\n * @slot button-content - The content of the button to share content.\n *\n * @csspart button - The button to share content.\n * @csspart button--disabled - The button to share content when disabled.\n *\n * @event web-share:success - Fired when the share operation is successful.\n * @event web-share:abort - Fired when the share operation is aborted.\n * @event web-share:error - Fired when the share operation fails.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method share - Instance method. Shares the shareable data taken from the element's properties.\n */\nclass WebShare extends HTMLElement {\n /** @type {Nullable} */\n #buttonSlot;\n\n /** @type {Nullable} */\n #buttonEl;\n\n /** @type {File[]} */\n #files = [];\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open', delegatesFocus: true });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n this.#buttonSlot = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null;\n this.#buttonEl = this.#getButton();\n }\n\n static get observedAttributes() {\n return ['disabled'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'disabled' && oldValue !== newValue && this.#buttonEl) {\n this.#buttonEl.toggleAttribute('disabled', this.disabled);\n this.#buttonEl.setAttribute('aria-disabled', this.disabled.toString());\n\n if (this.#buttonEl.part && this.#buttonEl.part.contains('button')) {\n this.#buttonEl.part.toggle('button--disabled', this.disabled);\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('shareUrl');\n this.#upgradeProperty('shareTitle');\n this.#upgradeProperty('shareText');\n this.#upgradeProperty('shareFiles');\n this.#upgradeProperty('disabled');\n\n this.#buttonSlot?.addEventListener('slotchange', this.#handleSlotChange);\n this.#buttonEl?.addEventListener('click', this.#handleClick);\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#buttonSlot?.removeEventListener('slotchange', this.#handleSlotChange);\n this.#buttonEl?.removeEventListener('click', this.#handleClick);\n }\n\n /**\n * @type {boolean} - Indicates whether the button is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n set disabled(value) {\n this.toggleAttribute('disabled', !!value);\n }\n\n /**\n * @type {string} - The URL to share.\n * @attribute share-url - Reflects the shareUrl property.\n */\n get shareUrl() {\n return this.getAttribute('share-url') || '';\n }\n\n set shareUrl(value) {\n this.setAttribute('share-url', value);\n }\n\n /**\n * @type {string} - The title to share.\n * @attribute share-title - Reflects the shareTitle property.\n */\n get shareTitle() {\n return this.getAttribute('share-title') || '';\n }\n\n set shareTitle(value) {\n this.setAttribute('share-title', value);\n }\n\n /**\n * @type {string} - The text to share.\n * @attribute share-text - Reflects the shareText property.\n */\n get shareText() {\n return this.getAttribute('share-text') || '';\n }\n\n set shareText(value) {\n this.setAttribute('share-text', value);\n }\n\n /**\n * @type {File[]} - The files to share.\n */\n get shareFiles() {\n return this.#files;\n }\n\n set shareFiles(value) {\n if (Array.isArray(value) && value.length > 0) {\n this.#files = value;\n }\n }\n\n /**\n * Shares the shareable data taken from the element's properties.\n *\n * @returns {Promise} - A promise that resolves when the share operation is complete.\n */\n async share() {\n if (this.disabled) {\n return;\n }\n\n try {\n /** @type {ShareData} */\n const shareData = {};\n\n if (this.shareUrl) {\n shareData.url = this.shareUrl;\n }\n\n if (this.shareTitle) {\n shareData.title = this.shareTitle;\n }\n\n if (this.shareText) {\n shareData.text = this.shareText;\n }\n\n if (\n Array.isArray(this.shareFiles)\n && this.shareFiles.length > 0\n && navigator.canShare\n && navigator.canShare({ files: this.shareFiles })\n ) {\n shareData.files = this.shareFiles;\n }\n\n await navigator.share(shareData);\n\n this.dispatchEvent(new CustomEvent('web-share:success', {\n bubbles: true,\n composed: true,\n detail: { shareData }\n }));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.dispatchEvent(new CustomEvent('web-share:abort', {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n\n return;\n }\n\n this.dispatchEvent(new CustomEvent('web-share:error', {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n }\n\n /**\n * Handles the click event on the button.\n *\n * @param {any} evt - The event object.\n */\n #handleClick = evt => {\n evt.preventDefault();\n\n if (this.disabled) {\n return;\n }\n\n this.share();\n };\n\n /**\n * Handles the slotchange event on the button slot.\n *\n * @param {any} evt - The event object.\n */\n #handleSlotChange = evt => {\n if (evt.target && evt.target.name === 'button') {\n this.#buttonEl?.removeEventListener('click', this.#handleClick);\n this.#buttonEl = this.#getButton();\n\n if (this.#buttonEl) {\n this.#buttonEl.addEventListener('click', this.#handleClick);\n\n if (this.#buttonEl.nodeName !== 'BUTTON' && !this.#buttonEl.hasAttribute('role')) {\n this.#buttonEl.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Returns the button element from the button slot.\n *\n * @returns {Nullable} - The button element.\n */\n #getButton() {\n if (!this.#buttonSlot) {\n return null;\n }\n\n return this.#buttonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'button';\n }) || null;\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'shareUrl' | 'shareTitle' | 'shareText' | 'shareFiles' | 'disabled'} prop - The property name to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n static defineCustomElement(elementName = 'web-share') {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, WebShare);\n }\n }\n}\n\nexport { WebShare };\n","Object.defineProperty({},\"CapturePhoto\",{get:function(){return n},set:void 0,enumerable:!0,configurable:!0});let t=(t,e,i)=>(Number.isNaN(e)&&(e=0),Number.isNaN(i)&&(i=0),Math.min(Math.max(t,Math.min(e,i)),Math.max(e,i))),e=\"capture-photo\",i=`\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`,o=document.createElement(\"template\");o.innerHTML=`\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;class n extends HTMLElement{#t={};#e=null;#i=null;#o=null;#n=null;#a=null;#s=null;#r=null;#l=null;constructor(){super(),this.#t=this.getSupportedConstraints(),this.shadowRoot||this.attachShadow({mode:\"open\"}).appendChild(o.content.cloneNode(!0))}static get observedAttributes(){return[\"no-image\",\"facing-mode\",\"camera-resolution\",\"pan\",\"tilt\",\"zoom\"]}attributeChangedCallback(t,e,i){if(!this.isConnected)return;let o=this.getTrackCapabilities(),n=this.getTrackSettings();if(\"no-image\"===t&&e!==i&&this.#u(),\"facing-mode\"===t&&e!==i&&\"facingMode\"in this.#t){let t=[\"user\",\"environment\"].includes(this.facingMode||\"\");\"facingMode\"in n&&t&&(this.stopVideoStream(),this.startVideoStream())}if(\"camera-resolution\"===t&&e!==i&&\"string\"==typeof this.cameraResolution&&this.cameraResolution.trim().length>0){let[t=0,e=0]=this.cameraResolution.split(\"x\").map(t=>Number(t));if(t>0&&e>0&&\"width\"in o&&\"height\"in o){let i=!!(o.width?.min&&o.width?.max)&&t>=o?.width?.min&&t<=o?.width?.max,a=!!(o.height?.min&&o.height?.max)&&e>=o?.height?.min&&e<=o?.height?.max;\"width\"in n&&\"height\"in n&&i&&a&&(this.stopVideoStream(),this.startVideoStream())}}if(\"pan\"===t&&e!==i&&\"pan\"in this.#t){let t=!!(\"pan\"in o&&o.pan?.min&&o.pan?.max)&&this.pan>=o.pan.min&&this.pan<=o.pan.max;\"pan\"in n&&\"number\"==typeof this.pan&&t&&this.#h(\"pan\",this.pan)}if(\"tilt\"===t&&e!==i&&\"tilt\"in this.#t){let t=!!(\"tilt\"in o&&o.tilt?.min&&o.tilt?.max)&&this.tilt>=o.tilt.min&&this.tilt<=o.tilt.max;\"tilt\"in n&&\"number\"==typeof this.tilt&&t&&this.#h(\"tilt\",this.tilt)}if(\"zoom\"===t&&e!==i&&\"zoom\"in this.#t){let t=!!(\"zoom\"in o&&o.zoom?.min&&o.zoom?.max)&&this.zoom>=o.zoom.min&&this.zoom<=o.zoom.max;\"zoom\"in n&&\"number\"==typeof this.zoom&&t&&this.#h(\"zoom\",this.zoom)}}connectedCallback(){if(this.#d(\"autpoPlay\"),this.#d(\"noImage\"),this.#d(\"facingMode\"),this.#d(\"cameraResolution\"),this.#d(\"pan\"),this.#d(\"tilt\"),this.#d(\"zoom\"),this.#d(\"calculateFileSize\"),this.#i=this.shadowRoot?.querySelector(\"canvas\")||null,this.#o=this.shadowRoot?.getElementById(\"output\")||null,this.#n=this.shadowRoot?.querySelector(\"video\")||null,this.#a=this.shadowRoot?.querySelector('slot[name=\"capture-button\"]')||null,this.#s=this.#c(),this.#r=this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]')||null,this.#l=this.#m(),this.#n?.addEventListener(\"loadedmetadata\",this.#p),this.#a?.addEventListener(\"slotchange\",this.#g),this.#s?.addEventListener(\"click\",this.#b),this.#r?.addEventListener(\"slotchange\",this.#f),this.#l?.addEventListener(\"click\",this.#v),!n.isSupported())return this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:{name:\"NotSupportedError\",message:\"Not supported\"}}}));this.autoPlay&&this.startVideoStream()}disconnectedCallback(){this.stopVideoStream(),this.#l?.removeEventListener(\"click\",this.#v),this.#s?.removeEventListener(\"click\",this.#b),this.#n?.removeEventListener(\"canplay\",this.#p),this.#a?.removeEventListener(\"slotchange\",this.#g),this.#r?.removeEventListener(\"slotchange\",this.#f)}get autoPlay(){return this.hasAttribute(\"auto-play\")}set autoPlay(t){this.toggleAttribute(\"auto-play\",!!t)}get noImage(){return this.hasAttribute(\"no-image\")}set noImage(t){this.toggleAttribute(\"no-image\",!!t)}get facingMode(){return this.getAttribute(\"facing-mode\")||\"user\"}set facingMode(t){this.setAttribute(\"facing-mode\",t)}get cameraResolution(){return this.getAttribute(\"camera-resolution\")||\"\"}set cameraResolution(t){this.setAttribute(\"camera-resolution\",t)}get pan(){return Number(this.getAttribute(\"pan\"))||0}set pan(t){this.setAttribute(\"pan\",null!=t?t.toString():t)}get tilt(){return Number(this.getAttribute(\"tilt\"))||0}set tilt(t){this.setAttribute(\"tilt\",null!=t?t.toString():t)}get zoom(){return Number(this.getAttribute(\"zoom\"))||1}set zoom(t){this.setAttribute(\"zoom\",null!=t?t.toString():t)}get loading(){return this.hasAttribute(\"loading\")}get calculateFileSize(){return this.hasAttribute(\"calculate-file-size\")}set calculateFileSize(t){this.toggleAttribute(\"calculate-file-size\",!!t)}#v=t=>{t.preventDefault(),this.loading||(this.facingMode=\"user\"!==this.facingMode&&this.facingMode?\"user\":\"environment\")};#b=t=>{t.preventDefault(),this.capture()};#p=t=>{let i=t.target;i.play().then(()=>{this.dispatchEvent(new CustomEvent(`${e}:video-play`,{bubbles:!0,composed:!0,detail:{video:i}}))}).catch(t=>{this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}).finally(()=>{this.removeAttribute(\"loading\")})};#u(){this.#o&&Array.from(this.#o.childNodes).forEach(t=>t.remove())}#h(e,i){if(!this.#e||!e||!i)return;let[o]=this.#e.getVideoTracks(),n=this.getTrackCapabilities();e in this.getTrackSettings()&&o.applyConstraints({advanced:[{[e]:t(Number(i),n[e]?.min||1,n[e]?.max||1)}]})}#g=t=>{t.target?.name===\"capture-button\"&&(this.#s?.removeEventListener(\"click\",this.#b),this.#s=this.#c(),this.#s&&(this.#s.addEventListener(\"click\",this.#b),\"BUTTON\"===this.#s.nodeName||this.#s.hasAttribute(\"role\")||this.#s.setAttribute(\"role\",\"button\")))};#f=t=>{t.target?.name===\"facing-mode-button\"&&(this.#l?.removeEventListener(\"click\",this.#v),this.#l=this.#m(),this.#l&&(this.#l.addEventListener(\"click\",this.#v),\"BUTTON\"===this.#l.nodeName||this.#l.hasAttribute(\"role\")||this.#l.setAttribute(\"role\",\"button\")))};#m(){return this.#r&&this.#r.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"facing-mode-button\"===t.getAttribute(\"slot\"))||null}#c(){return this.#a&&this.#a.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"capture-button\"===t.getAttribute(\"slot\"))||null}#d(t){if(Object.prototype.hasOwnProperty.call(this,t)){let e=this[t];delete this[t],this[t]=e}}async startVideoStream(){if(!n.isSupported()||this.#e)return;this.setAttribute(\"loading\",\"\");let t={video:{facingMode:{ideal:this.facingMode||\"user\"},pan:!0,tilt:!0,zoom:!0},audio:!1};if(\"string\"==typeof this.cameraResolution&&this.cameraResolution.trim().length>0){let[e=0,i=0]=this.cameraResolution.split(\"x\").map(t=>Number(t));e>0&&i>0&&(t.video.width=e,t.video.height=i)}try{this.#e=await navigator.mediaDevices.getUserMedia(t),this.#n&&(this.#n.srcObject=this.#e),this.#h(\"pan\",this.pan),this.#h(\"tilt\",this.tilt),this.#h(\"zoom\",this.zoom);let e=this.getTrackSettings();\"facingMode\"in e&&this.#r&&(this.#r.hidden=!1)}catch(t){this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}finally{this.removeAttribute(\"loading\")}}stopVideoStream(){if(!this.#n||!this.#e)return;let[t]=this.#e.getVideoTracks();t?.stop(),this.#n.srcObject=null,this.#e=null}async capture(){if(!this.loading&&this.#i&&this.#n)try{let t=this.#i.getContext(\"2d\"),i=this.#n.videoWidth,o=this.#n.videoHeight;this.#i.width=i,this.#i.height=o,t?.drawImage(this.#n,0,0,i,o);let n=this.#i.toDataURL(\"image/png\");if(\"string\"==typeof n&&n.includes(\"data:image\")){if(!this.noImage){let t=new Image;t.src=n,t.width=i,t.height=o,t.setAttribute(\"part\",\"output-image\"),this.#u(),this.#o?.appendChild(t)}let t={dataURI:n,width:i,height:o};if(this.calculateFileSize)try{let e=await fetch(n),i=(await e.blob()).size;i&&(t.size=i)}catch(t){}this.dispatchEvent(new CustomEvent(`${e}:success`,{bubbles:!0,composed:!0,detail:t}))}}catch(t){this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}}getSupportedConstraints(){return n.isSupported()&&navigator.mediaDevices.getSupportedConstraints()||{}}getTrackCapabilities(){if(!this.#e)return{};let[t]=this.#e.getVideoTracks();return t&&\"function\"==typeof t.getCapabilities&&t.getCapabilities()||{}}getTrackSettings(){if(!this.#e)return{};let[t]=this.#e.getVideoTracks();return t&&\"function\"==typeof t.getSettings&&t.getSettings()||{}}static isSupported(){return!!navigator.mediaDevices?.getUserMedia}static defineCustomElement(t=e){\"undefined\"==typeof window||window.customElements.get(t)||window.customElements.define(t,n)}}n.defineCustomElement();export{n as CapturePhoto};\n//# sourceMappingURL=capture-photo-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $c290816263f90981$exports = {};\n\n$parcel$export($c290816263f90981$exports, \"CapturePhoto\", function () { return $c290816263f90981$export$cc30a98fe3890794; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ /**\n * @typedef {Object} ExtendedMediaTrackCapabilities\n * @property {ULongRange} [width] - The width of the video track.\n * @property {ULongRange} [height] - The height of the video track.\n * @property {ULongRange} [pan] - The pan level of the camera.\n * @property {ULongRange} [tilt] - The tilt level of the camera.\n * @property {ULongRange} [zoom] - The zoom level of the camera.\n * @property {MediaTrackCapabilities} [nativeMediaTrackCapabilities] - The native track capabilities.\n */ /**\n * @typedef {Object} ExtendedMediaTrackConstraints\n * @property {MediaTrackConstraints & {pan: boolean, tilt: boolean, zoom: boolean}} video - The video constraints.\n * @property {MediaTrackConstraints | boolean} audio - The audio constraints.\n */ // @ts-check\n/**\n * Clamps number within the inclusive `min` and `max` bounds,\n * making sure it does not go beyond them on either side.\n * If `min` is greater than `max` the parameters are swapped to support inverted ranges.\n *\n * @param {number} value - The number to clamp.\n * @param {number} lower - The lower bound.\n * @param {number} upper - The upper bound.\n * @throws {TypeError} - If one or more of the arguments passed is not a number.\n * @returns {number} - The clamped number.\n * @example\n *\n * clamp(10, -5, 5);\n * // => 5\n *\n * clamp(-10, -5, 5);\n * // => -5\n *\n * clamp(-15, 0, 100);\n * // => 0\n *\n * clamp(120, 0, 100);\n * // => 100\n *\n * clamp(-5, NaN, 5); // If any of lower or upper bound are `NaN`, they will be converted to `0`.\n * // => 0\n *\n * clamp(120, 100, 0); // The order of lower and upper bounds is reversed (100 > 0)\n * // => 100\n */ const $02ad8beec419df62$export$7d15b64cf5a3a4c4 = (value, lower, upper)=>{\n if (Number.isNaN(lower)) lower = 0;\n if (Number.isNaN(upper)) upper = 0;\n return Math.min(Math.max(value, Math.min(lower, upper)), Math.max(lower, upper));\n};\n\n\nconst $c290816263f90981$var$COMPONENT_NAME = \"capture-photo\";\nconst $c290816263f90981$var$styles = /* css */ `\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`;\nconst $c290816263f90981$var$template = document.createElement(\"template\");\n$c290816263f90981$var$template.innerHTML = /* html */ `\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\n/**\n * @summary A custom element that implements the MediaDevices.getUserMedia() method of the MediaDevices interface to capture a photo in the browser.\n * @documentation https://github.com/georapbox/capture-photo-element\n *\n * @tagname capture-photo This is the default tag name, unless overridden by the `defineCustomElement` method.\n * @extends HTMLElement\n *\n * @property {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @property {boolean} noImage - Whether or not to show the captured image.\n * @property {string} facingMode - The facing mode of the camera.\n * @property {string} cameraResolution - The resolution of the camera.\n * @property {number} pan - The pan value of the camera.\n * @property {number} tilt - The tilt value of the camera.\n * @property {number} zoom - The zoom value of the camera.\n * @property {boolean} loading - Whether or not the video stream is loading.\n * @property {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n *\n * @atttribute {boolean} auto-play - Reflects the autoPlay property.\n * @atttribute {boolean} no-image - Reflects the noImage property.\n * @atttribute {string} facing-mode - Reflects the facingMode property.\n * @atttribute {string} camera-resolution - Reflects the cameraResolution property.\n * @atttribute {number} pan - Reflects the pan property.\n * @atttribute {number} tilt - Reflects the tilt property.\n * @atttribute {number} zoom - Reflects the zoom property.\n * @atttribute {boolean} loading - Reflects the loading property.\n * @atttribute {boolean} calculate-file-size - Reflects the calculateFileSize property.\n *\n * @slot capture-button - The capture button.\n * @slot capture-button-content - The capture button content.\n * @slot facing-mode-button - The facing mode button.\n * @slot facing-mode-button-content - The facing mode button content.\n * @slot actions - The actions container.\n * @slot - A default un-named slot to add content inside the component.\n *\n * @csspart video - The video element.\n * @csspart actions-container - The actions container.\n * @csspart capture-button - The capture button.\n * @csspart facing-mode-button - The facing mode button.\n * @csspart output-container - The output container.\n * @csspart output-image - The output image.\n *\n * @event capture-photo:video-play - Fires when the video stream is successfully playing.\n * @event capture-photo:success - Fires when the photo is successfully captured.\n * @event capture-photo:error - Fires when an error occurs.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method isSupported - Static method. Checks if the MediaDevices.getUserMedia() method is supported.\n * @method startVideoStream - Instance method. Starts the video stream.\n * @method stopVideoStream - Instance method. Stops the video stream.\n * @method capture - Instance method. Captures a photo.\n * @method getSupportedConstraints - Instance method. Gets the supported constraints.\n * @method getTrackCapabilities - Instance method. Gets the track capabilities.\n * @method getTrackSettings - Instance method. Gets the track settings.\n */ class $c290816263f90981$export$cc30a98fe3890794 extends HTMLElement {\n /** @type {MediaTrackSupportedConstraints | {}}*/ #supportedConstraints = {};\n /** @type {Nullable} */ #stream = null;\n /** @type {Nullable} */ #canvasElement = null;\n /** @type {Nullable} */ #outputElement = null;\n /** @type {Nullable} */ #videoElement = null;\n /** @type {Nullable} */ #captureButtonSlot = null;\n /** @type {Nullable} */ #captureButton = null;\n /** @type {Nullable} */ #facingModeButtonSlot = null;\n /** @type {Nullable} */ #facingModeButton = null;\n constructor(){\n super();\n this.#supportedConstraints = this.getSupportedConstraints();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($c290816263f90981$var$template.content.cloneNode(true));\n }\n }\n static get observedAttributes() {\n return [\n \"no-image\",\n \"facing-mode\",\n \"camera-resolution\",\n \"pan\",\n \"tilt\",\n \"zoom\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (!this.isConnected) return;\n /** @type {ExtendedMediaTrackCapabilities} */ const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n if (name === \"no-image\" && oldValue !== newValue) this.#emptyOutputElement();\n if (name === \"facing-mode\" && oldValue !== newValue && \"facingMode\" in this.#supportedConstraints) {\n const isValidFacingMode = [\n \"user\",\n \"environment\"\n ].includes(this.facingMode || \"\");\n if (\"facingMode\" in trackSettings && isValidFacingMode) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n if (name === \"camera-resolution\" && oldValue !== newValue) {\n if (typeof this.cameraResolution === \"string\" && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split(\"x\").map((x)=>Number(x));\n if (width > 0 && height > 0 && \"width\" in trackCapabilities && \"height\" in trackCapabilities) {\n const widthInAllowedRange = trackCapabilities.width?.min && trackCapabilities.width?.max ? width >= trackCapabilities?.width?.min && width <= trackCapabilities?.width?.max : false;\n const heightInAllowedRange = trackCapabilities.height?.min && trackCapabilities.height?.max ? height >= trackCapabilities?.height?.min && height <= trackCapabilities?.height?.max : false;\n if (\"width\" in trackSettings && \"height\" in trackSettings && widthInAllowedRange && heightInAllowedRange) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n }\n }\n if (name === \"pan\" && oldValue !== newValue && \"pan\" in this.#supportedConstraints) {\n const panInAllowedRange = \"pan\" in trackCapabilities && trackCapabilities.pan?.min && trackCapabilities.pan?.max ? this.pan >= trackCapabilities.pan.min && this.pan <= trackCapabilities.pan.max : false;\n if (\"pan\" in trackSettings && typeof this.pan === \"number\" && panInAllowedRange) this.#applyPTZ(\"pan\", this.pan);\n }\n if (name === \"tilt\" && oldValue !== newValue && \"tilt\" in this.#supportedConstraints) {\n const tiltInAllowedRange = \"tilt\" in trackCapabilities && trackCapabilities.tilt?.min && trackCapabilities.tilt?.max ? this.tilt >= trackCapabilities.tilt.min && this.tilt <= trackCapabilities.tilt.max : false;\n if (\"tilt\" in trackSettings && typeof this.tilt === \"number\" && tiltInAllowedRange) this.#applyPTZ(\"tilt\", this.tilt);\n }\n if (name === \"zoom\" && oldValue !== newValue && \"zoom\" in this.#supportedConstraints) {\n const zoomInAllowedRange = \"zoom\" in trackCapabilities && trackCapabilities.zoom?.min && trackCapabilities.zoom?.max ? this.zoom >= trackCapabilities.zoom.min && this.zoom <= trackCapabilities.zoom.max : false;\n if (\"zoom\" in trackSettings && typeof this.zoom === \"number\" && zoomInAllowedRange) this.#applyPTZ(\"zoom\", this.zoom);\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"autpoPlay\");\n this.#upgradeProperty(\"noImage\");\n this.#upgradeProperty(\"facingMode\");\n this.#upgradeProperty(\"cameraResolution\");\n this.#upgradeProperty(\"pan\");\n this.#upgradeProperty(\"tilt\");\n this.#upgradeProperty(\"zoom\");\n this.#upgradeProperty(\"calculateFileSize\");\n this.#canvasElement = this.shadowRoot?.querySelector(\"canvas\") || null;\n this.#outputElement = this.shadowRoot?.getElementById(\"output\") || null;\n this.#videoElement = this.shadowRoot?.querySelector(\"video\") || null;\n this.#captureButtonSlot = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null;\n this.#captureButton = this.#getCaptureButton();\n this.#facingModeButtonSlot = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null;\n this.#facingModeButton = this.#getFacingModeButton();\n this.#videoElement?.addEventListener(\"loadedmetadata\", this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.addEventListener(\"slotchange\", this.#onCaptureButtonSlotChange);\n this.#captureButton?.addEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#facingModeButtonSlot?.addEventListener(\"slotchange\", this.#onFacingModeButtonSlotChange);\n this.#facingModeButton?.addEventListener(\"click\", this.#onFacingModeButtonClick);\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported()) return this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: {\n name: \"NotSupportedError\",\n message: \"Not supported\"\n }\n }\n }));\n if (this.autoPlay) this.startVideoStream();\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.stopVideoStream();\n this.#facingModeButton?.removeEventListener(\"click\", this.#onFacingModeButtonClick);\n this.#captureButton?.removeEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#videoElement?.removeEventListener(\"canplay\", this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.removeEventListener(\"slotchange\", this.#onCaptureButtonSlotChange);\n this.#facingModeButtonSlot?.removeEventListener(\"slotchange\", this.#onFacingModeButtonSlotChange);\n }\n /**\n * @type {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @attribute auto-play - Reflects the autoPlay attribute.\n */ get autoPlay() {\n return this.hasAttribute(\"auto-play\");\n }\n set autoPlay(value) {\n this.toggleAttribute(\"auto-play\", !!value);\n }\n /**\n * @type {boolean} noImage - Whether or not to show the captured image.\n * @attribute no-image - Reflects the noImage attribute.\n */ get noImage() {\n return this.hasAttribute(\"no-image\");\n }\n set noImage(value) {\n this.toggleAttribute(\"no-image\", !!value);\n }\n /**\n * @type {string} facingMode - The facing mode of the camera.\n * @attribute facing-mode - Reflects the facingMode attribute.\n */ get facingMode() {\n return this.getAttribute(\"facing-mode\") || \"user\";\n }\n set facingMode(value) {\n this.setAttribute(\"facing-mode\", value);\n }\n /**\n * @type {string} cameraResolution - The resolution of the camera.\n * @attribute camera-resolution - Reflects the cameraResolution attribute.\n */ get cameraResolution() {\n return this.getAttribute(\"camera-resolution\") || \"\";\n }\n set cameraResolution(value) {\n this.setAttribute(\"camera-resolution\", value);\n }\n /**\n * @type {number} pan - The pan value of the camera.\n * @attribute pan - Reflects the pan attribute.\n */ get pan() {\n return Number(this.getAttribute(\"pan\")) || 0;\n }\n set pan(value) {\n this.setAttribute(\"pan\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} tilt - The tilt value of the camera.\n * @attribute tilt - Reflects the tilt attribute.\n */ get tilt() {\n return Number(this.getAttribute(\"tilt\")) || 0;\n }\n set tilt(value) {\n this.setAttribute(\"tilt\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} zoom - The zoom value of the camera.\n * @attribute zoom - Reflects the zoom attribute.\n */ get zoom() {\n return Number(this.getAttribute(\"zoom\")) || 1;\n }\n set zoom(value) {\n this.setAttribute(\"zoom\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} loading - Whether or not the video stream is loading.\n * @attribute loading - Reflects the loading attribute.\n */ get loading() {\n return this.hasAttribute(\"loading\");\n }\n /**\n * @type {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n * @attribute calculate-file-size - Reflects the calculateFileSize attribute.\n */ get calculateFileSize() {\n return this.hasAttribute(\"calculate-file-size\");\n }\n set calculateFileSize(value) {\n this.toggleAttribute(\"calculate-file-size\", !!value);\n }\n /**\n * Handles the click event of the facing mode button.\n *\n * @param {*} evt - The click event.\n */ #onFacingModeButtonClick = (evt)=>{\n evt.preventDefault();\n if (this.loading) return;\n this.facingMode = this.facingMode === \"user\" || !this.facingMode ? \"environment\" : \"user\";\n };\n /**\n * Handles the click event of the capture button.\n *\n * @param {*} evt - The click event.\n */ #onCapturePhotoButtonClick = (evt)=>{\n evt.preventDefault();\n this.capture();\n };\n /**\n * Handles the loadedmetadata event of the video element.\n *\n * @param {*} evt - The loadedmetadata event.\n */ #onVideoLoadedMetaData = (evt)=>{\n const video = evt.target;\n video.play().then(()=>{\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:video-play`, {\n bubbles: true,\n composed: true,\n detail: {\n video: video\n }\n }));\n }).catch(/** @param {Error} error */ (error)=>{\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }).finally(()=>{\n this.removeAttribute(\"loading\");\n });\n };\n /**\n * Removes all child nodes from the output element.\n */ #emptyOutputElement() {\n if (!this.#outputElement) return;\n Array.from(this.#outputElement.childNodes).forEach((node)=>node.remove());\n }\n /**\n * Applies the pan, tilt or zoom constraint.\n *\n * @param {'pan' | 'tilt' | 'zoom'} constraintName - The name of the constraint.\n * @param {number} constraintValue - The value of the constraint.\n */ #applyPTZ(constraintName, constraintValue) {\n if (!this.#stream || !constraintName || !constraintValue) return;\n const [track] = this.#stream.getVideoTracks();\n /** @type {ExtendedMediaTrackCapabilities} */ const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n if (constraintName in trackSettings) track.applyConstraints({\n advanced: [\n {\n [constraintName]: (0, $02ad8beec419df62$export$7d15b64cf5a3a4c4)(Number(constraintValue), trackCapabilities[constraintName]?.min || 1, trackCapabilities[constraintName]?.max || 1)\n }\n ]\n });\n }\n /**\n * Handles the slotchange event of the capture button slot.\n *\n * @param {*} evt - The slotchange event.\n */ #onCaptureButtonSlotChange = (evt)=>{\n if (evt.target?.name === \"capture-button\") {\n this.#captureButton?.removeEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#captureButton = this.#getCaptureButton();\n if (this.#captureButton) {\n this.#captureButton.addEventListener(\"click\", this.#onCapturePhotoButtonClick);\n if (this.#captureButton.nodeName !== \"BUTTON\" && !this.#captureButton.hasAttribute(\"role\")) this.#captureButton.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Handles the slotchange event of the facing mode button slot.\n *\n * @param {*} evt - The slotchange event.\n */ #onFacingModeButtonSlotChange = (evt)=>{\n if (evt.target?.name === \"facing-mode-button\") {\n this.#facingModeButton?.removeEventListener(\"click\", this.#onFacingModeButtonClick);\n this.#facingModeButton = this.#getFacingModeButton();\n if (this.#facingModeButton) {\n this.#facingModeButton.addEventListener(\"click\", this.#onFacingModeButtonClick);\n if (this.#facingModeButton.nodeName !== \"BUTTON\" && !this.#facingModeButton.hasAttribute(\"role\")) this.#facingModeButton.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Returns the facing mode button.\n *\n * @returns {Nullable}\n */ #getFacingModeButton() {\n if (!this.#facingModeButtonSlot) return null;\n return this.#facingModeButtonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"facing-mode-button\";\n }) || null;\n }\n /**\n * Returns the capture button.\n *\n * @returns {Nullable}\n */ #getCaptureButton() {\n if (!this.#captureButtonSlot) return null;\n return this.#captureButtonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"capture-button\";\n }) || null;\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and\n * set a value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would\n * miss that property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'autpoPlay' | 'noImage' | 'facingMode' | 'cameraResolution' | 'pan' | 'tilt' | 'zoom' | 'calculateFileSize'} prop\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Starts the video stream.\n *\n * @returns Promise\n */ async startVideoStream() {\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported() || this.#stream) return;\n this.setAttribute(\"loading\", \"\");\n /** @type {ExtendedMediaTrackConstraints} */ const constraints = {\n video: {\n facingMode: {\n ideal: this.facingMode || \"user\"\n },\n pan: true,\n tilt: true,\n zoom: true\n },\n audio: false\n };\n if (typeof this.cameraResolution === \"string\" && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split(\"x\").map((x)=>Number(x));\n if (width > 0 && height > 0) {\n constraints.video.width = width;\n constraints.video.height = height;\n }\n }\n try {\n this.#stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (this.#videoElement) this.#videoElement.srcObject = this.#stream;\n this.#applyPTZ(\"pan\", this.pan);\n this.#applyPTZ(\"tilt\", this.tilt);\n this.#applyPTZ(\"zoom\", this.zoom);\n const trackSettings = this.getTrackSettings();\n if (\"facingMode\" in trackSettings && this.#facingModeButtonSlot) this.#facingModeButtonSlot.hidden = false;\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n } finally{\n this.removeAttribute(\"loading\");\n }\n }\n /**\n * Stops the video stream.\n */ stopVideoStream() {\n if (!this.#videoElement || !this.#stream) return;\n const [track] = this.#stream.getVideoTracks();\n track?.stop();\n this.#videoElement.srcObject = null;\n this.#stream = null;\n }\n /**\n * Captures a photo using the element's properties.\n *\n * @returns Promise\n */ async capture() {\n if (this.loading || !this.#canvasElement || !this.#videoElement) return;\n try {\n const ctx = this.#canvasElement.getContext(\"2d\");\n const width = this.#videoElement.videoWidth;\n const height = this.#videoElement.videoHeight;\n this.#canvasElement.width = width;\n this.#canvasElement.height = height;\n ctx?.drawImage(this.#videoElement, 0, 0, width, height);\n const dataURI = this.#canvasElement.toDataURL(\"image/png\");\n if (typeof dataURI === \"string\" && dataURI.includes(\"data:image\")) {\n if (!this.noImage) {\n const image = new Image();\n image.src = dataURI;\n image.width = width;\n image.height = height;\n image.setAttribute(\"part\", \"output-image\");\n this.#emptyOutputElement();\n this.#outputElement?.appendChild(image);\n }\n /** @type {{ dataURI: string, width: number, height: number, size?: number }} */ const eventDetail = {\n dataURI: dataURI,\n width: width,\n height: height\n };\n if (this.calculateFileSize) try {\n const file = await fetch(dataURI);\n const blob = await file.blob();\n const size = blob.size;\n if (size) eventDetail.size = size;\n } catch (err) {\n // Fail silently...\n }\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:success`, {\n bubbles: true,\n composed: true,\n detail: eventDetail\n }));\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n }\n /**\n * Returns an object based on the `MediaTrackSupportedConstraints` dictionary,\n * whose member fields each specify one ofthe constrainable properties the user agent understands.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaDevices/getSupportedConstraints\n * @returns {MediaTrackSupportedConstraints | {}}\n */ getSupportedConstraints() {\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported()) return {};\n return navigator.mediaDevices.getSupportedConstraints() || {};\n }\n /**\n * Returns a `MediaTrackCapabilities` object which specifies the values or range of values\n * which each constrainable property, based upon the platform and user agent.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getCapabilities\n * @returns {MediaTrackCapabilities | {}}\n */ getTrackCapabilities() {\n if (!this.#stream) return {};\n const [track] = this.#stream.getVideoTracks();\n if (track && typeof track.getCapabilities === \"function\") return track.getCapabilities() || {};\n return {};\n }\n /**\n * Returns a `MediaTrackSettings` object containing the current values of each of\n * the constrainable properties for the current MediaStreamTrack.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getSettings\n * @returns {MediaTrackSettings | {}}\n */ getTrackSettings() {\n if (!this.#stream) return {};\n const [track] = this.#stream.getVideoTracks();\n if (track && typeof track.getSettings === \"function\") return track.getSettings() || {};\n return {};\n }\n /**\n * Checks if the `MediaDevices.getUserMedia()` method is supported.\n *\n * @returns {boolean}\n */ static isSupported() {\n return Boolean(navigator.mediaDevices?.getUserMedia);\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='capture-photo'] - The name of the custom element.\n * @example\n *\n * CapturePhoto.defineCustomElement('my-capture-photo');\n */ static defineCustomElement(elementName = $c290816263f90981$var$COMPONENT_NAME) {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $c290816263f90981$export$cc30a98fe3890794);\n }\n}\n\n\n(0, $c290816263f90981$export$cc30a98fe3890794).defineCustomElement();\n\n\nexport {$c290816263f90981$export$cc30a98fe3890794 as CapturePhoto};\n//# sourceMappingURL=capture-photo-defined.js.map\n","import { CapturePhoto } from './capture-photo.js';\n\nCapturePhoto.defineCustomElement();\n\nexport { CapturePhoto };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\n/**\n * @typedef {Object} ExtendedMediaTrackCapabilities\n * @property {ULongRange} [width] - The width of the video track.\n * @property {ULongRange} [height] - The height of the video track.\n * @property {ULongRange} [pan] - The pan level of the camera.\n * @property {ULongRange} [tilt] - The tilt level of the camera.\n * @property {ULongRange} [zoom] - The zoom level of the camera.\n * @property {MediaTrackCapabilities} [nativeMediaTrackCapabilities] - The native track capabilities.\n */\n\n/**\n * @typedef {Object} ExtendedMediaTrackConstraints\n * @property {MediaTrackConstraints & {pan: boolean, tilt: boolean, zoom: boolean}} video - The video constraints.\n * @property {MediaTrackConstraints | boolean} audio - The audio constraints.\n */\n\nimport { clamp } from './utils/clamp.js';\n\nconst COMPONENT_NAME = 'capture-photo';\n\nconst styles = /* css */`\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */`\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\n\n/**\n * @summary A custom element that implements the MediaDevices.getUserMedia() method of the MediaDevices interface to capture a photo in the browser.\n * @documentation https://github.com/georapbox/capture-photo-element\n *\n * @tagname capture-photo This is the default tag name, unless overridden by the `defineCustomElement` method.\n * @extends HTMLElement\n *\n * @property {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @property {boolean} noImage - Whether or not to show the captured image.\n * @property {string} facingMode - The facing mode of the camera.\n * @property {string} cameraResolution - The resolution of the camera.\n * @property {number} pan - The pan value of the camera.\n * @property {number} tilt - The tilt value of the camera.\n * @property {number} zoom - The zoom value of the camera.\n * @property {boolean} loading - Whether or not the video stream is loading.\n * @property {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n *\n * @atttribute {boolean} auto-play - Reflects the autoPlay property.\n * @atttribute {boolean} no-image - Reflects the noImage property.\n * @atttribute {string} facing-mode - Reflects the facingMode property.\n * @atttribute {string} camera-resolution - Reflects the cameraResolution property.\n * @atttribute {number} pan - Reflects the pan property.\n * @atttribute {number} tilt - Reflects the tilt property.\n * @atttribute {number} zoom - Reflects the zoom property.\n * @atttribute {boolean} loading - Reflects the loading property.\n * @atttribute {boolean} calculate-file-size - Reflects the calculateFileSize property.\n *\n * @slot capture-button - The capture button.\n * @slot capture-button-content - The capture button content.\n * @slot facing-mode-button - The facing mode button.\n * @slot facing-mode-button-content - The facing mode button content.\n * @slot actions - The actions container.\n * @slot - A default un-named slot to add content inside the component.\n *\n * @csspart video - The video element.\n * @csspart actions-container - The actions container.\n * @csspart capture-button - The capture button.\n * @csspart facing-mode-button - The facing mode button.\n * @csspart output-container - The output container.\n * @csspart output-image - The output image.\n *\n * @event capture-photo:video-play - Fires when the video stream is successfully playing.\n * @event capture-photo:success - Fires when the photo is successfully captured.\n * @event capture-photo:error - Fires when an error occurs.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method isSupported - Static method. Checks if the MediaDevices.getUserMedia() method is supported.\n * @method startVideoStream - Instance method. Starts the video stream.\n * @method stopVideoStream - Instance method. Stops the video stream.\n * @method capture - Instance method. Captures a photo.\n * @method getSupportedConstraints - Instance method. Gets the supported constraints.\n * @method getTrackCapabilities - Instance method. Gets the track capabilities.\n * @method getTrackSettings - Instance method. Gets the track settings.\n */\nclass CapturePhoto extends HTMLElement {\n /** @type {MediaTrackSupportedConstraints | {}}*/\n #supportedConstraints = {};\n\n /** @type {Nullable} */\n #stream = null;\n\n /** @type {Nullable} */\n #canvasElement = null;\n\n /** @type {Nullable} */\n #outputElement = null;\n\n /** @type {Nullable} */\n #videoElement = null;\n\n /** @type {Nullable} */\n #captureButtonSlot = null;\n\n /** @type {Nullable} */\n #captureButton = null;\n\n /** @type {Nullable} */\n #facingModeButtonSlot = null;\n\n /** @type {Nullable} */\n #facingModeButton = null;\n\n constructor() {\n super();\n\n this.#supportedConstraints = this.getSupportedConstraints();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n }\n\n static get observedAttributes() {\n return ['no-image', 'facing-mode', 'camera-resolution', 'pan', 'tilt', 'zoom'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (!this.isConnected) {\n return;\n }\n\n /** @type {ExtendedMediaTrackCapabilities} */\n const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n\n if (name === 'no-image' && oldValue !== newValue) {\n this.#emptyOutputElement();\n }\n\n if (name === 'facing-mode' && oldValue !== newValue && 'facingMode' in this.#supportedConstraints) {\n const isValidFacingMode = ['user', 'environment'].includes(this.facingMode || '');\n\n if ('facingMode' in trackSettings && isValidFacingMode) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n\n if (name === 'camera-resolution' && oldValue !== newValue) {\n if (typeof this.cameraResolution === 'string' && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split('x').map(x => Number(x));\n\n if (width > 0 && height > 0 && 'width' in trackCapabilities && 'height' in trackCapabilities) {\n const widthInAllowedRange = trackCapabilities.width?.min && trackCapabilities.width?.max\n ? width >= trackCapabilities?.width?.min && width <= trackCapabilities?.width?.max\n : false;\n\n const heightInAllowedRange = trackCapabilities.height?.min && trackCapabilities.height?.max\n ? height >= trackCapabilities?.height?.min && height <= trackCapabilities?.height?.max\n : false;\n\n if ('width' in trackSettings && 'height' in trackSettings && widthInAllowedRange && heightInAllowedRange) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n }\n }\n\n if (name === 'pan' && oldValue !== newValue && 'pan' in this.#supportedConstraints) {\n const panInAllowedRange = 'pan' in trackCapabilities && trackCapabilities.pan?.min && trackCapabilities.pan?.max\n ? this.pan >= trackCapabilities.pan.min && this.pan <= trackCapabilities.pan.max\n : false;\n\n if ('pan' in trackSettings && typeof this.pan === 'number' && panInAllowedRange) {\n this.#applyPTZ('pan', this.pan);\n }\n }\n\n if (name === 'tilt' && oldValue !== newValue && 'tilt' in this.#supportedConstraints) {\n const tiltInAllowedRange = 'tilt' in trackCapabilities && trackCapabilities.tilt?.min && trackCapabilities.tilt?.max\n ? this.tilt >= trackCapabilities.tilt.min && this.tilt <= trackCapabilities.tilt.max\n : false;\n\n if ('tilt' in trackSettings && typeof this.tilt === 'number' && tiltInAllowedRange) {\n this.#applyPTZ('tilt', this.tilt);\n }\n }\n\n if (name === 'zoom' && oldValue !== newValue && 'zoom' in this.#supportedConstraints) {\n const zoomInAllowedRange = 'zoom' in trackCapabilities && trackCapabilities.zoom?.min && trackCapabilities.zoom?.max\n ? this.zoom >= trackCapabilities.zoom.min && this.zoom <= trackCapabilities.zoom.max\n : false;\n\n if ('zoom' in trackSettings && typeof this.zoom === 'number' && zoomInAllowedRange) {\n this.#applyPTZ('zoom', this.zoom);\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('autpoPlay');\n this.#upgradeProperty('noImage');\n this.#upgradeProperty('facingMode');\n this.#upgradeProperty('cameraResolution');\n this.#upgradeProperty('pan');\n this.#upgradeProperty('tilt');\n this.#upgradeProperty('zoom');\n this.#upgradeProperty('calculateFileSize');\n\n this.#canvasElement = this.shadowRoot?.querySelector('canvas') || null;\n this.#outputElement = this.shadowRoot?.getElementById('output') || null;\n this.#videoElement = this.shadowRoot?.querySelector('video') || null;\n this.#captureButtonSlot = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null;\n this.#captureButton = this.#getCaptureButton();\n this.#facingModeButtonSlot = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null;\n this.#facingModeButton = this.#getFacingModeButton();\n\n this.#videoElement?.addEventListener('loadedmetadata', this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.addEventListener('slotchange', this.#onCaptureButtonSlotChange);\n this.#captureButton?.addEventListener('click', this.#onCapturePhotoButtonClick);\n this.#facingModeButtonSlot?.addEventListener('slotchange', this.#onFacingModeButtonSlotChange);\n this.#facingModeButton?.addEventListener('click', this.#onFacingModeButtonClick);\n\n if (!CapturePhoto.isSupported()) {\n return this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: {\n name: 'NotSupportedError',\n message: 'Not supported'\n }\n }\n }));\n }\n\n if (this.autoPlay) {\n this.startVideoStream();\n }\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.stopVideoStream();\n this.#facingModeButton?.removeEventListener('click', this.#onFacingModeButtonClick);\n this.#captureButton?.removeEventListener('click', this.#onCapturePhotoButtonClick);\n this.#videoElement?.removeEventListener('canplay', this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.removeEventListener('slotchange', this.#onCaptureButtonSlotChange);\n this.#facingModeButtonSlot?.removeEventListener('slotchange', this.#onFacingModeButtonSlotChange);\n }\n\n /**\n * @type {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @attribute auto-play - Reflects the autoPlay attribute.\n */\n get autoPlay() {\n return this.hasAttribute('auto-play');\n }\n\n set autoPlay(value) {\n this.toggleAttribute('auto-play', !!value);\n }\n\n /**\n * @type {boolean} noImage - Whether or not to show the captured image.\n * @attribute no-image - Reflects the noImage attribute.\n */\n get noImage() {\n return this.hasAttribute('no-image');\n }\n\n set noImage(value) {\n this.toggleAttribute('no-image', !!value);\n }\n\n /**\n * @type {string} facingMode - The facing mode of the camera.\n * @attribute facing-mode - Reflects the facingMode attribute.\n */\n get facingMode() {\n return this.getAttribute('facing-mode') || 'user';\n }\n\n set facingMode(value) {\n this.setAttribute('facing-mode', value);\n }\n\n /**\n * @type {string} cameraResolution - The resolution of the camera.\n * @attribute camera-resolution - Reflects the cameraResolution attribute.\n */\n get cameraResolution() {\n return this.getAttribute('camera-resolution') || '';\n }\n\n set cameraResolution(value) {\n this.setAttribute('camera-resolution', value);\n }\n\n /**\n * @type {number} pan - The pan value of the camera.\n * @attribute pan - Reflects the pan attribute.\n */\n get pan() {\n return Number(this.getAttribute('pan')) || 0;\n }\n\n set pan(value) {\n this.setAttribute('pan', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} tilt - The tilt value of the camera.\n * @attribute tilt - Reflects the tilt attribute.\n */\n get tilt() {\n return Number(this.getAttribute('tilt')) || 0;\n }\n\n set tilt(value) {\n this.setAttribute('tilt', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} zoom - The zoom value of the camera.\n * @attribute zoom - Reflects the zoom attribute.\n */\n get zoom() {\n return Number(this.getAttribute('zoom')) || 1;\n }\n\n set zoom(value) {\n this.setAttribute('zoom', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} loading - Whether or not the video stream is loading.\n * @attribute loading - Reflects the loading attribute.\n */\n get loading() {\n return this.hasAttribute('loading');\n }\n\n /**\n * @type {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n * @attribute calculate-file-size - Reflects the calculateFileSize attribute.\n */\n get calculateFileSize() {\n return this.hasAttribute('calculate-file-size');\n }\n\n set calculateFileSize(value) {\n this.toggleAttribute('calculate-file-size', !!value);\n }\n\n /**\n * Handles the click event of the facing mode button.\n *\n * @param {*} evt - The click event.\n */\n #onFacingModeButtonClick = evt => {\n evt.preventDefault();\n\n if (this.loading) {\n return;\n }\n\n this.facingMode = this.facingMode === 'user' || !this.facingMode ? 'environment' : 'user';\n };\n\n /**\n * Handles the click event of the capture button.\n *\n * @param {*} evt - The click event.\n */\n #onCapturePhotoButtonClick = evt => {\n evt.preventDefault();\n this.capture();\n };\n\n /**\n * Handles the loadedmetadata event of the video element.\n *\n * @param {*} evt - The loadedmetadata event.\n */\n #onVideoLoadedMetaData = evt => {\n const video = evt.target;\n\n video.play().then(() => {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:video-play`, {\n bubbles: true,\n composed: true,\n detail: { video }\n }));\n }).catch(/** @param {Error} error */error => {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }).finally(() => {\n this.removeAttribute('loading');\n });\n };\n\n /**\n * Removes all child nodes from the output element.\n */\n #emptyOutputElement() {\n if (!this.#outputElement) {\n return;\n }\n\n Array.from(this.#outputElement.childNodes).forEach(node => node.remove());\n }\n\n /**\n * Applies the pan, tilt or zoom constraint.\n *\n * @param {'pan' | 'tilt' | 'zoom'} constraintName - The name of the constraint.\n * @param {number} constraintValue - The value of the constraint.\n */\n #applyPTZ(constraintName, constraintValue) {\n if (!this.#stream || !constraintName || !constraintValue) {\n return;\n }\n\n const [track] = this.#stream.getVideoTracks();\n /** @type {ExtendedMediaTrackCapabilities} */\n const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n\n if (constraintName in trackSettings) {\n track.applyConstraints({\n advanced: [{\n [constraintName]: clamp(Number(constraintValue), trackCapabilities[constraintName]?.min || 1, trackCapabilities[constraintName]?.max || 1)\n }]\n });\n }\n }\n\n /**\n * Handles the slotchange event of the capture button slot.\n *\n * @param {*} evt - The slotchange event.\n */\n #onCaptureButtonSlotChange = evt => {\n if (evt.target?.name === 'capture-button') {\n this.#captureButton?.removeEventListener('click', this.#onCapturePhotoButtonClick);\n this.#captureButton = this.#getCaptureButton();\n\n if (this.#captureButton) {\n this.#captureButton.addEventListener('click', this.#onCapturePhotoButtonClick);\n\n if (this.#captureButton.nodeName !== 'BUTTON' && !this.#captureButton.hasAttribute('role')) {\n this.#captureButton.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Handles the slotchange event of the facing mode button slot.\n *\n * @param {*} evt - The slotchange event.\n */\n #onFacingModeButtonSlotChange = evt => {\n if (evt.target?.name === 'facing-mode-button') {\n this.#facingModeButton?.removeEventListener('click', this.#onFacingModeButtonClick);\n this.#facingModeButton = this.#getFacingModeButton();\n\n if (this.#facingModeButton) {\n this.#facingModeButton.addEventListener('click', this.#onFacingModeButtonClick);\n\n if (this.#facingModeButton.nodeName !== 'BUTTON' && !this.#facingModeButton.hasAttribute('role')) {\n this.#facingModeButton.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Returns the facing mode button.\n *\n * @returns {Nullable}\n */\n #getFacingModeButton() {\n if (!this.#facingModeButtonSlot) {\n return null;\n }\n\n return this.#facingModeButtonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'facing-mode-button';\n }) || null;\n }\n\n /**\n * Returns the capture button.\n *\n * @returns {Nullable}\n */\n #getCaptureButton() {\n if (!this.#captureButtonSlot) {\n return null;\n }\n\n return this.#captureButtonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'capture-button';\n }) || null;\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and\n * set a value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would\n * miss that property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'autpoPlay' | 'noImage' | 'facingMode' | 'cameraResolution' | 'pan' | 'tilt' | 'zoom' | 'calculateFileSize'} prop\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Starts the video stream.\n *\n * @returns Promise\n */\n async startVideoStream() {\n if (!CapturePhoto.isSupported() || this.#stream) {\n return;\n }\n\n this.setAttribute('loading', '');\n\n /** @type {ExtendedMediaTrackConstraints} */\n const constraints = {\n video: {\n facingMode: {\n ideal: this.facingMode || 'user'\n },\n pan: true,\n tilt: true,\n zoom: true\n },\n audio: false\n };\n\n if (typeof this.cameraResolution === 'string' && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split('x').map(x => Number(x));\n\n if (width > 0 && height > 0) {\n constraints.video.width = width;\n constraints.video.height = height;\n }\n }\n\n try {\n this.#stream = await navigator.mediaDevices.getUserMedia(constraints);\n\n if (this.#videoElement) {\n this.#videoElement.srcObject = this.#stream;\n }\n\n this.#applyPTZ('pan', this.pan);\n this.#applyPTZ('tilt', this.tilt);\n this.#applyPTZ('zoom', this.zoom);\n\n const trackSettings = this.getTrackSettings();\n\n if ('facingMode' in trackSettings && this.#facingModeButtonSlot) {\n this.#facingModeButtonSlot.hidden = false;\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n } finally {\n this.removeAttribute('loading');\n }\n }\n\n /**\n * Stops the video stream.\n */\n stopVideoStream() {\n if (!this.#videoElement || !this.#stream) {\n return;\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n track?.stop();\n this.#videoElement.srcObject = null;\n this.#stream = null;\n }\n\n /**\n * Captures a photo using the element's properties.\n *\n * @returns Promise\n */\n async capture() {\n if (this.loading || !this.#canvasElement || !this.#videoElement) {\n return;\n }\n\n try {\n const ctx = this.#canvasElement.getContext('2d');\n const width = this.#videoElement.videoWidth;\n const height = this.#videoElement.videoHeight;\n this.#canvasElement.width = width;\n this.#canvasElement.height = height;\n ctx?.drawImage(this.#videoElement, 0, 0, width, height);\n const dataURI = this.#canvasElement.toDataURL('image/png');\n\n if (typeof dataURI === 'string' && dataURI.includes('data:image')) {\n if (!this.noImage) {\n const image = new Image();\n image.src = dataURI;\n image.width = width;\n image.height = height;\n image.setAttribute('part', 'output-image');\n this.#emptyOutputElement();\n this.#outputElement?.appendChild(image);\n }\n\n /** @type {{ dataURI: string, width: number, height: number, size?: number }} */\n const eventDetail = { dataURI, width, height };\n\n if (this.calculateFileSize) {\n try {\n const file = await fetch(dataURI);\n const blob = await file.blob();\n const size = blob.size;\n\n if (size) {\n eventDetail.size = size;\n }\n } catch (err) {\n // Fail silently...\n }\n }\n\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:success`, {\n bubbles: true,\n composed: true,\n detail: eventDetail\n }));\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n }\n\n /**\n * Returns an object based on the `MediaTrackSupportedConstraints` dictionary,\n * whose member fields each specify one ofthe constrainable properties the user agent understands.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaDevices/getSupportedConstraints\n * @returns {MediaTrackSupportedConstraints | {}}\n */\n getSupportedConstraints() {\n if (!CapturePhoto.isSupported()) {\n return {};\n }\n\n return navigator.mediaDevices.getSupportedConstraints() || {};\n }\n\n /**\n * Returns a `MediaTrackCapabilities` object which specifies the values or range of values\n * which each constrainable property, based upon the platform and user agent.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getCapabilities\n * @returns {MediaTrackCapabilities | {}}\n */\n getTrackCapabilities() {\n if (!this.#stream) {\n return {};\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n if (track && typeof track.getCapabilities === 'function') {\n return track.getCapabilities() || {};\n }\n\n return {};\n }\n\n /**\n * Returns a `MediaTrackSettings` object containing the current values of each of\n * the constrainable properties for the current MediaStreamTrack.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getSettings\n * @returns {MediaTrackSettings | {}}\n */\n getTrackSettings() {\n if (!this.#stream) {\n return {};\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n if (track && typeof track.getSettings === 'function') {\n return track.getSettings() || {};\n }\n\n return {};\n }\n\n /**\n * Checks if the `MediaDevices.getUserMedia()` method is supported.\n *\n * @returns {boolean}\n */\n static isSupported() {\n return Boolean(navigator.mediaDevices?.getUserMedia);\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='capture-photo'] - The name of the custom element.\n * @example\n *\n * CapturePhoto.defineCustomElement('my-capture-photo');\n */\n static defineCustomElement(elementName = COMPONENT_NAME) {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, CapturePhoto);\n }\n }\n}\n\nexport { CapturePhoto };\n","// @ts-check\n\n/**\n * Clamps number within the inclusive `min` and `max` bounds,\n * making sure it does not go beyond them on either side.\n * If `min` is greater than `max` the parameters are swapped to support inverted ranges.\n *\n * @param {number} value - The number to clamp.\n * @param {number} lower - The lower bound.\n * @param {number} upper - The upper bound.\n * @throws {TypeError} - If one or more of the arguments passed is not a number.\n * @returns {number} - The clamped number.\n * @example\n *\n * clamp(10, -5, 5);\n * // => 5\n *\n * clamp(-10, -5, 5);\n * // => -5\n *\n * clamp(-15, 0, 100);\n * // => 0\n *\n * clamp(120, 0, 100);\n * // => 100\n *\n * clamp(-5, NaN, 5); // If any of lower or upper bound are `NaN`, they will be converted to `0`.\n * // => 0\n *\n * clamp(120, 100, 0); // The order of lower and upper bounds is reversed (100 > 0)\n * // => 100\n */\nexport const clamp = (value, lower, upper) => {\n if (Number.isNaN(lower)) {\n lower = 0;\n }\n\n if (Number.isNaN(upper)) {\n upper = 0;\n }\n\n return Math.min(Math.max(value, Math.min(lower, upper)), Math.max(lower, upper));\n};\n","Object.defineProperty({},\"ModalElement\",{get:function(){return t},set:void 0,enumerable:!0,configurable:!0});let e=document.createElement(\"template\");e.innerHTML=/* html */`\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */class t extends HTMLElement{/** @type {Nullable} */#e=null;/** @type {Nullable} */#t=null;/** @type {ReturnType | undefined} */#o=void 0;constructor(){if(super(),!this.shadowRoot){let t=this.attachShadow({mode:\"open\"});t.appendChild(e.content.cloneNode(!0))}this.shadowRoot&&(this.#e=this.shadowRoot.querySelector(\"dialog\"),this.#t=this.shadowRoot.querySelector('slot[name=\"footer\"]'))}static get observedAttributes(){return[\"open\",\"no-header\",\"no-animations\",\"no-close-button\"]}/**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */attributeChangedCallback(e,t,o){if(null!==this.#e){if(\"open\"===e&&t!==o&&(this.open?(this.#e.showModal(),document.body&&(document.body.style.overflowY=\"hidden\"),this.dispatchEvent(new CustomEvent(\"me-open\",{bubbles:!0,composed:!0,detail:{element:this}}))):this.#e.close()),\"no-header\"===e&&t!==o){/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__header\");null!==e&&(e.hidden=this.noHeader)}if(\"no-animations\"===e&&t!==o&&this.#e.classList.toggle(\"dialog--no-animations\",this.noAnimations),\"no-close-button\"===e&&t!==o){/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__close\");null!==e&&(e.hidden=this.noCloseButton)}}}/**\n * Lifecycle method that is called when the element is added to the DOM.\n */connectedCallback(){this.#i(\"open\"),this.#i(\"staticBackdrop\"),this.#i(\"noHeader\"),this.#i(\"noAnimations\"),this.#i(\"noCloseButton\"),this.#i(\"fullscreen\"),this.#e?.addEventListener(\"click\",this.#a),this.#e?.addEventListener(\"close\",this.#l),this.#e?.addEventListener(\"cancel\",this.#s),this.#e?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\",this.#n),this.#t?.addEventListener(\"slotchange\",this.#r)}/**\n * Lifecycle method that is called when the element is removed from the DOM.\n */disconnectedCallback(){this.#o&&clearTimeout(this.#o),this.#e?.addEventListener(\"click\",this.#a),this.#e?.removeEventListener(\"close\",this.#l),this.#e?.removeEventListener(\"cancel\",this.#s),this.#e?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\",this.#n),this.#t?.removeEventListener(\"slotchange\",this.#r)}/**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */get open(){return this.hasAttribute(\"open\")}set open(e){e?this.setAttribute(\"open\",\"\"):this.removeAttribute(\"open\")}/**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */get staticBackdrop(){return this.hasAttribute(\"static-backdrop\")}set staticBackdrop(e){e?this.setAttribute(\"static-backdrop\",\"\"):this.removeAttribute(\"static-backdrop\")}/**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */get noHeader(){return this.hasAttribute(\"no-header\")}set noHeader(e){e?this.setAttribute(\"no-header\",\"\"):this.removeAttribute(\"no-header\")}/**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */get noAnimations(){return this.hasAttribute(\"no-animations\")}set noAnimations(e){e?this.setAttribute(\"no-animations\",\"\"):this.removeAttribute(\"no-animations\")}/**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */get noCloseButton(){return this.hasAttribute(\"no-close-button\")}set noCloseButton(e){e?this.setAttribute(\"no-close-button\",\"\"):this.removeAttribute(\"no-close-button\")}/**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */get fullscreen(){return this.hasAttribute(\"fullscreen\")}set fullscreen(e){e?this.setAttribute(\"fullscreen\",\"\"):this.removeAttribute(\"fullscreen\")}/**\n * Applies a pulse effect on the dialog.\n */#d(){this.#o||(this.#e?.classList.add(\"dialog--pulse\"),this.#o=setTimeout(()=>{this.#e?.classList.remove(\"dialog--pulse\"),clearTimeout(this.#o),this.#o=void 0},300))}/**\n * Handles the close event of the dialog.\n */#l=()=>{// This is needed because the dialog element does not reset\n// the open property when the dialog is closed by the user.\nthis.open=!1,document.body&&(document.body.style.overflowY=\"\"),this.dispatchEvent(new CustomEvent(\"me-close\",{bubbles:!0,composed:!0,detail:{element:this}}))};/**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */#s=e=>{let t=this.#c(\"escape-key\");this.dispatchEvent(t),t.defaultPrevented&&(e.preventDefault(),this.noAnimations||this.#d())};/**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */#n=e=>{let t=this.#c(\"close-button\");this.dispatchEvent(t),t.defaultPrevented&&(e.preventDefault(),this.noAnimations||this.#d())};/**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */#a=e=>{if(e.target!==e.currentTarget)return;let t=this.#c(\"backdrop-click\");if(this.dispatchEvent(t),t.defaultPrevented||this.staticBackdrop){this.noAnimations||this.#d();return}this.#e?.close()};/**\n * Handles the slotchange event of the footer slot.\n */#r=()=>{if(null===this.#e)return;/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__footer\");if(null===e)return;let t=this.#t?.assignedNodes(),o=!!t&&t.length>0;e.hidden=!o};/**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */#c(e){return new CustomEvent(\"me-request-close\",{bubbles:!0,composed:!0,cancelable:!0,detail:{reason:e,element:this}})}/**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */#i(e){if(Object.prototype.hasOwnProperty.call(this,e)){let t=this[e];delete this[e],this[e]=t}}/**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */show(){this.open||(this.open=!0)}/**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */hide(){this.open&&(this.open=!1)}/**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */static defineCustomElement(e=\"modal-element\"){\"undefined\"==typeof window||window.customElements.get(e)||window.customElements.define(e,t)}}t.defineCustomElement();export{t as ModalElement};//# sourceMappingURL=modal-element-defined.js.map\n\n//# sourceMappingURL=modal-element-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $180b6dcf923bafc7$exports = {};\n\n$parcel$export($180b6dcf923bafc7$exports, \"ModalElement\", function () { return $180b6dcf923bafc7$export$32589115725b904b; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ const $180b6dcf923bafc7$var$PULSE_ANIMATION_DURATION = 300;\nconst $180b6dcf923bafc7$var$template = document.createElement(\"template\");\n$180b6dcf923bafc7$var$template.innerHTML = /* html */ `\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;\n/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */ class $180b6dcf923bafc7$export$32589115725b904b extends HTMLElement {\n /** @type {Nullable} */ #dialogEl = null;\n /** @type {Nullable} */ #footerSlotEl = null;\n /** @type {ReturnType | undefined} */ #pulseAnimationTimeout = void 0;\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($180b6dcf923bafc7$var$template.content.cloneNode(true));\n }\n if (this.shadowRoot) {\n this.#dialogEl = this.shadowRoot.querySelector(\"dialog\");\n this.#footerSlotEl = this.shadowRoot.querySelector('slot[name=\"footer\"]');\n }\n }\n static get observedAttributes() {\n return [\n \"open\",\n \"no-header\",\n \"no-animations\",\n \"no-close-button\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (this.#dialogEl === null) return;\n if (name === \"open\" && oldValue !== newValue) {\n if (this.open) {\n this.#dialogEl.showModal();\n if (document.body) document.body.style.overflowY = \"hidden\";\n this.dispatchEvent(new CustomEvent(\"me-open\", {\n bubbles: true,\n composed: true,\n detail: {\n element: this\n }\n }));\n } else this.#dialogEl.close();\n }\n if (name === \"no-header\" && oldValue !== newValue) {\n /** @type {Nullable} */ const headerEl = this.#dialogEl.querySelector(\".dialog__header\");\n if (headerEl !== null) headerEl.hidden = this.noHeader;\n }\n if (name === \"no-animations\" && oldValue !== newValue) this.#dialogEl.classList.toggle(\"dialog--no-animations\", this.noAnimations);\n if (name === \"no-close-button\" && oldValue !== newValue) {\n /** @type {Nullable} */ const closeBtnEl = this.#dialogEl.querySelector(\".dialog__close\");\n if (closeBtnEl !== null) closeBtnEl.hidden = this.noCloseButton;\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"open\");\n this.#upgradeProperty(\"staticBackdrop\");\n this.#upgradeProperty(\"noHeader\");\n this.#upgradeProperty(\"noAnimations\");\n this.#upgradeProperty(\"noCloseButton\");\n this.#upgradeProperty(\"fullscreen\");\n this.#dialogEl?.addEventListener(\"click\", this.#handleDialogClick);\n this.#dialogEl?.addEventListener(\"close\", this.#handleDialogClose);\n this.#dialogEl?.addEventListener(\"cancel\", this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\", this.#handleCloseButtonClick);\n this.#footerSlotEl?.addEventListener(\"slotchange\", this.#handleFooterSlotChange);\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#pulseAnimationTimeout && clearTimeout(this.#pulseAnimationTimeout);\n this.#dialogEl?.addEventListener(\"click\", this.#handleDialogClick);\n this.#dialogEl?.removeEventListener(\"close\", this.#handleDialogClose);\n this.#dialogEl?.removeEventListener(\"cancel\", this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\", this.#handleCloseButtonClick);\n this.#footerSlotEl?.removeEventListener(\"slotchange\", this.#handleFooterSlotChange);\n }\n /**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */ get open() {\n return this.hasAttribute(\"open\");\n }\n set open(value) {\n if (value) this.setAttribute(\"open\", \"\");\n else this.removeAttribute(\"open\");\n }\n /**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */ get staticBackdrop() {\n return this.hasAttribute(\"static-backdrop\");\n }\n set staticBackdrop(value) {\n if (value) this.setAttribute(\"static-backdrop\", \"\");\n else this.removeAttribute(\"static-backdrop\");\n }\n /**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */ get noHeader() {\n return this.hasAttribute(\"no-header\");\n }\n set noHeader(value) {\n if (value) this.setAttribute(\"no-header\", \"\");\n else this.removeAttribute(\"no-header\");\n }\n /**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */ get noAnimations() {\n return this.hasAttribute(\"no-animations\");\n }\n set noAnimations(value) {\n if (value) this.setAttribute(\"no-animations\", \"\");\n else this.removeAttribute(\"no-animations\");\n }\n /**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */ get noCloseButton() {\n return this.hasAttribute(\"no-close-button\");\n }\n set noCloseButton(value) {\n if (value) this.setAttribute(\"no-close-button\", \"\");\n else this.removeAttribute(\"no-close-button\");\n }\n /**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */ get fullscreen() {\n return this.hasAttribute(\"fullscreen\");\n }\n set fullscreen(value) {\n if (value) this.setAttribute(\"fullscreen\", \"\");\n else this.removeAttribute(\"fullscreen\");\n }\n /**\n * Applies a pulse effect on the dialog.\n */ #applyPulseEffectOnDialog() {\n if (this.#pulseAnimationTimeout) return;\n this.#dialogEl?.classList.add(\"dialog--pulse\");\n this.#pulseAnimationTimeout = setTimeout(()=>{\n this.#dialogEl?.classList.remove(\"dialog--pulse\");\n clearTimeout(this.#pulseAnimationTimeout);\n this.#pulseAnimationTimeout = void 0;\n }, $180b6dcf923bafc7$var$PULSE_ANIMATION_DURATION);\n }\n /**\n * Handles the close event of the dialog.\n */ #handleDialogClose = ()=>{\n // This is needed because the dialog element does not reset\n // the open property when the dialog is closed by the user.\n this.open = false;\n if (document.body) document.body.style.overflowY = \"\";\n this.dispatchEvent(new CustomEvent(\"me-close\", {\n bubbles: true,\n composed: true,\n detail: {\n element: this\n }\n }));\n };\n /**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */ #handleDialogCancel = (evt)=>{\n const requestCloseEvent = this.#createRequestCloseEvent(\"escape-key\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n /**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */ #handleCloseButtonClick = (evt)=>{\n const requestCloseEvent = this.#createRequestCloseEvent(\"close-button\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n /**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */ #handleDialogClick = (evt)=>{\n if (evt.target !== evt.currentTarget) return;\n const requestCloseEvent = this.#createRequestCloseEvent(\"backdrop-click\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented || this.staticBackdrop) {\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n return;\n }\n this.#dialogEl?.close();\n };\n /**\n * Handles the slotchange event of the footer slot.\n */ #handleFooterSlotChange = ()=>{\n if (this.#dialogEl === null) return;\n /** @type {Nullable} */ const footerEl = this.#dialogEl.querySelector(\".dialog__footer\");\n if (footerEl === null) return;\n const footerSlotNodes = this.#footerSlotEl?.assignedNodes();\n const hasFooterSlotNodes = footerSlotNodes ? footerSlotNodes.length > 0 : false;\n footerEl.hidden = !hasFooterSlotNodes;\n };\n /**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */ #createRequestCloseEvent(reason) {\n return new CustomEvent(\"me-request-close\", {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n reason: reason,\n element: this\n }\n });\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */ show() {\n if (this.open) return;\n this.open = true;\n }\n /**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */ hide() {\n if (!this.open) return;\n this.open = false;\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */ static defineCustomElement(elementName = \"modal-element\") {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $180b6dcf923bafc7$export$32589115725b904b);\n }\n}\n\n\n(0, $180b6dcf923bafc7$export$32589115725b904b).defineCustomElement();\n\n\nexport {$180b6dcf923bafc7$export$32589115725b904b as ModalElement};\n//# sourceMappingURL=modal-element-defined.js.map\n","import { ModalElement } from './modal-element.js';\n\nModalElement.defineCustomElement();\n\nexport { ModalElement };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\nconst PULSE_ANIMATION_DURATION = 300;\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */`\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;\n\n/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */\nclass ModalElement extends HTMLElement {\n /** @type {Nullable} */\n #dialogEl = null;\n\n /** @type {Nullable} */\n #footerSlotEl = null;\n\n /** @type {ReturnType | undefined} */\n #pulseAnimationTimeout = void 0;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n if (this.shadowRoot) {\n this.#dialogEl = this.shadowRoot.querySelector('dialog');\n this.#footerSlotEl = this.shadowRoot.querySelector('slot[name=\"footer\"]');\n }\n }\n\n static get observedAttributes() {\n return ['open', 'no-header', 'no-animations', 'no-close-button'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (this.#dialogEl === null) {\n return;\n }\n\n if (name === 'open' && oldValue !== newValue) {\n if (this.open) {\n this.#dialogEl.showModal();\n\n if (document.body) {\n document.body.style.overflowY = 'hidden';\n }\n\n this.dispatchEvent(new CustomEvent('me-open', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n }));\n } else {\n this.#dialogEl.close();\n }\n }\n\n if (name === 'no-header' && oldValue !== newValue) {\n /** @type {Nullable} */\n const headerEl = this.#dialogEl.querySelector('.dialog__header');\n\n if (headerEl !== null) {\n headerEl.hidden = this.noHeader;\n }\n }\n\n if (name === 'no-animations' && oldValue !== newValue) {\n this.#dialogEl.classList.toggle('dialog--no-animations', this.noAnimations);\n }\n\n if (name === 'no-close-button' && oldValue !== newValue) {\n /** @type {Nullable} */\n const closeBtnEl = this.#dialogEl.querySelector('.dialog__close');\n\n if (closeBtnEl !== null) {\n closeBtnEl.hidden = this.noCloseButton;\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('open');\n this.#upgradeProperty('staticBackdrop');\n this.#upgradeProperty('noHeader');\n this.#upgradeProperty('noAnimations');\n this.#upgradeProperty('noCloseButton');\n this.#upgradeProperty('fullscreen');\n\n this.#dialogEl?.addEventListener('click', this.#handleDialogClick);\n this.#dialogEl?.addEventListener('close', this.#handleDialogClose);\n this.#dialogEl?.addEventListener('cancel', this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.addEventListener('submit', this.#handleCloseButtonClick);\n this.#footerSlotEl?.addEventListener('slotchange', this.#handleFooterSlotChange);\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#pulseAnimationTimeout && clearTimeout(this.#pulseAnimationTimeout);\n this.#dialogEl?.addEventListener('click', this.#handleDialogClick);\n this.#dialogEl?.removeEventListener('close', this.#handleDialogClose);\n this.#dialogEl?.removeEventListener('cancel', this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.removeEventListener('submit', this.#handleCloseButtonClick);\n this.#footerSlotEl?.removeEventListener('slotchange', this.#handleFooterSlotChange);\n }\n\n /**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */\n get open() {\n return this.hasAttribute('open');\n }\n\n set open(value) {\n if (value) {\n this.setAttribute('open', '');\n } else {\n this.removeAttribute('open');\n }\n }\n\n /**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */\n get staticBackdrop() {\n return this.hasAttribute('static-backdrop');\n }\n\n set staticBackdrop(value) {\n if (value) {\n this.setAttribute('static-backdrop', '');\n } else {\n this.removeAttribute('static-backdrop');\n }\n }\n\n /**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */\n get noHeader() {\n return this.hasAttribute('no-header');\n }\n\n set noHeader(value) {\n if (value) {\n this.setAttribute('no-header', '');\n } else {\n this.removeAttribute('no-header');\n }\n }\n\n /**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */\n get noAnimations() {\n return this.hasAttribute('no-animations');\n }\n\n set noAnimations(value) {\n if (value) {\n this.setAttribute('no-animations', '');\n } else {\n this.removeAttribute('no-animations');\n }\n }\n\n /**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */\n get noCloseButton() {\n return this.hasAttribute('no-close-button');\n }\n\n set noCloseButton(value) {\n if (value) {\n this.setAttribute('no-close-button', '');\n } else {\n this.removeAttribute('no-close-button');\n }\n }\n\n /**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */\n get fullscreen() {\n return this.hasAttribute('fullscreen');\n }\n\n set fullscreen(value) {\n if (value) {\n this.setAttribute('fullscreen', '');\n } else {\n this.removeAttribute('fullscreen');\n }\n }\n\n /**\n * Applies a pulse effect on the dialog.\n */\n #applyPulseEffectOnDialog() {\n if (this.#pulseAnimationTimeout) {\n return;\n }\n\n this.#dialogEl?.classList.add('dialog--pulse');\n\n this.#pulseAnimationTimeout = setTimeout(() => {\n this.#dialogEl?.classList.remove('dialog--pulse');\n clearTimeout(this.#pulseAnimationTimeout);\n this.#pulseAnimationTimeout = void 0;\n }, PULSE_ANIMATION_DURATION);\n }\n\n /**\n * Handles the close event of the dialog.\n */\n #handleDialogClose = () => {\n // This is needed because the dialog element does not reset\n // the open property when the dialog is closed by the user.\n this.open = false;\n\n if (document.body) {\n document.body.style.overflowY = '';\n }\n\n this.dispatchEvent(new CustomEvent('me-close', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n }));\n };\n\n /**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */\n #handleDialogCancel = evt => {\n const requestCloseEvent = this.#createRequestCloseEvent('escape-key');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n\n /**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */\n #handleCloseButtonClick = evt => {\n const requestCloseEvent = this.#createRequestCloseEvent('close-button');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n\n /**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */\n #handleDialogClick = evt => {\n if (evt.target !== evt.currentTarget) {\n return;\n }\n\n const requestCloseEvent = this.#createRequestCloseEvent('backdrop-click');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented || this.staticBackdrop) {\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n return;\n }\n\n this.#dialogEl?.close();\n };\n\n /**\n * Handles the slotchange event of the footer slot.\n */\n #handleFooterSlotChange = () => {\n if (this.#dialogEl === null) {\n return;\n }\n\n /** @type {Nullable} */\n const footerEl = this.#dialogEl.querySelector('.dialog__footer');\n\n if (footerEl === null) {\n return;\n }\n\n const footerSlotNodes = this.#footerSlotEl?.assignedNodes();\n const hasFooterSlotNodes = footerSlotNodes ? footerSlotNodes.length > 0 : false;\n\n footerEl.hidden = !hasFooterSlotNodes;\n };\n\n /**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */\n #createRequestCloseEvent(reason) {\n return new CustomEvent('me-request-close', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n reason,\n element: this\n }\n });\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */\n show() {\n if (this.open) {\n return;\n }\n\n this.open = true;\n }\n\n /**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */\n hide() {\n if (!this.open) {\n return;\n }\n\n this.open = false;\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */\n static defineCustomElement(elementName = 'modal-element') {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, ModalElement);\n }\n }\n}\n\nexport { ModalElement };\n","Object.defineProperty({},\"FilesDropzone\",{get:function(){return m},set:void 0,enumerable:!0,configurable:!0});let e=new Map([[\"aac\",\"audio/aac\"],[\"abw\",\"application/x-abiword\"],[\"arc\",\"application/x-freearc\"],[\"avif\",\"image/avif\"],[\"avi\",\"video/x-msvideo\"],[\"azw\",\"application/vnd.amazon.ebook\"],[\"bin\",\"application/octet-stream\"],[\"bmp\",\"image/bmp\"],[\"bz\",\"application/x-bzip\"],[\"bz2\",\"application/x-bzip2\"],[\"cda\",\"application/x-cdf\"],[\"csh\",\"application/x-csh\"],[\"css\",\"text/css\"],[\"csv\",\"text/csv\"],[\"doc\",\"application/msword\"],[\"docx\",\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"],[\"eot\",\"application/vnd.ms-fontobject\"],[\"epub\",\"application/epub+zip\"],[\"gz\",\"application/gzip\"],[\"gif\",\"image/gif\"],[\"heic\",\"image/heic\"],[\"heif\",\"image/heif\"],[\"htm\",\"text/html\"],[\"html\",\"text/html\"],[\"ico\",\"image/vnd.microsoft.icon\"],[\"ics\",\"text/calendar\"],[\"jar\",\"application/java-archive\"],[\"jpeg\",\"image/jpeg\"],[\"jpg\",\"image/jpeg\"],[\"jxl\",\"image/jxl\"],[\"js\",\"text/javascript\"],[\"json\",\"application/json\"],[\"jsonld\",\"application/ld+json\"],[\"markdown\",\"text/markdown\"],[\"md\",\"text/markdown\"],[\"mid\",\"audio/midi\"],[\"midi\",\"audio/midi\"],[\"mjs\",\"text/javascript\"],[\"mp3\",\"audio/mpeg\"],[\"mp4\",\"video/mp4\"],[\"mpeg\",\"video/mpeg\"],[\"mpkg\",\"application/vnd.apple.installer+xml\"],[\"odp\",\"application/vnd.oasis.opendocument.presentation\"],[\"ods\",\"application/vnd.oasis.opendocument.spreadsheet\"],[\"odt\",\"application/vnd.oasis.opendocument.text\"],[\"oga\",\"audio/ogg\"],[\"ogv\",\"video/ogg\"],[\"ogx\",\"application/ogg\"],[\"opus\",\"audio/opus\"],[\"otf\",\"font/otf\"],[\"png\",\"image/png\"],[\"pdf\",\"application/pdf\"],[\"php\",\"application/x-httpd-php\"],[\"ppt\",\"application/vnd.ms-powerpoint\"],[\"pptx\",\"application/vnd.openxmlformats-officedocument.presentationml.presentation\"],[\"rar\",\"application/vnd.rar\"],[\"rtf\",\"application/rtf\"],[\"sh\",\"application/x-sh\"],[\"svg\",\"image/svg+xml\"],[\"swf\",\"application/x-shockwave-flash\"],[\"tar\",\"application/x-tar\"],[\"tif\",\"image/tiff\"],[\"tiff\",\"image/tiff\"],[\"ts\",\"video/mp2t\"],[\"ttf\",\"font/ttf\"],[\"txt\",\"text/plain\"],[\"vsd\",\"application/vnd.visio\"],[\"wav\",\"audio/wav\"],[\"weba\",\"audio/webm\"],[\"webm\",\"video/webm\"],[\"webp\",\"image/webp\"],[\"woff\",\"font/woff\"],[\"woff2\",\"font/woff2\"],[\"xhtml\",\"application/xhtml+xml\"],[\"xls\",\"application/vnd.ms-excel\"],[\"xlsx\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],[\"xml\",\"application/xml\"],[\"xul\",\"application/vnd.mozilla.xul+xml\"],[\"zip\",\"application/zip\"],[\"7z\",\"application/x-7z-compressed\"],[\"mkv\",\"video/x-matroska\"],[\"mov\",\"video/quicktime\"],[\"msg\",\"application/vnd.ms-outlook\"]]),t=[\".DS_Store\",\"Thumbs.db\"],o=t=>{let{name:o}=t;if(o&&-1!==o.lastIndexOf(\".\")&&!t.type){let i=(o.split(\".\").pop()||\"\").toLowerCase(),r=e.get(i);r&&Object.defineProperty(t,\"type\",{value:r,writable:!1,configurable:!1,enumerable:!0})}return t},i=(e,t)=>{let i=o(e);if(\"string\"!=typeof i.path){let{webkitRelativePath:o}=e;Object.defineProperty(i,\"path\",{value:\"string\"==typeof t?t:o||e.name,writable:!1,configurable:!1,enumerable:!0})}return i},r=async e=>await new Promise((t,o)=>{e.readEntries(t,o)}),a=async e=>{let t=[],o=await r(e);for(;o.length>0;)t.push(...o),o=await r(e);return t},n=e=>new Promise((t,o)=>{e.file(o=>t(i(o,e.fullPath)),o)}),s=async e=>{let o=[],i=[];for(let t of e){if(\"file\"!==t.kind)continue;let e=t.getAsEntry?t.getAsEntry():t.webkitGetAsEntry();i.push(e)}for(;i.length>0;){let e=i.shift();if(e){if(e.isFile){let i=await n(e);-1===t.indexOf(i.name)&&o.push(i)}else e.isDirectory&&i.push(...await a(e.createReader()))}}return o},d=async e=>{let o=[];for(let r of e)-1===t.indexOf(r.name)&&o.push(i(r));return o},l=async e=>e.dataTransfer?e.dataTransfer.items?await s(e.dataTransfer.items):await d(e.dataTransfer.files):await d(e.target.files),p=\"files-dropzone\",c=\"TOO_MANY_FILES\",h=document.createElement(\"template\"),u=`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;h.innerHTML=`\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;class m extends HTMLElement{#e=null;#t=null;constructor(){super(),this.shadowRoot||this.attachShadow({mode:\"open\"}).appendChild(h.content.cloneNode(!0)),this.shadowRoot&&(this.#e=this.shadowRoot.getElementById(\"fileInput\"),this.#t=this.shadowRoot.getElementById(\"dropzoneEl\"))}static get observedAttributes(){return[\"accept\",\"disabled\",\"multiple\",\"no-keyboard\"]}attributeChangedCallback(e,t,o){\"accept\"===e&&t!==o&&this.#e&&(this.#e.accept=this.accept),\"disabled\"===e&&t!==o&&this.#e&&(this.#e.disabled=this.disabled,this.disabled?this.#t?.removeAttribute(\"tabindex\"):this.#t?.setAttribute(\"tabindex\",\"0\")),\"multiple\"===e&&t!==o&&this.#e&&(this.#e.multiple=this.multiple),\"no-keyboard\"===e&&t!==o&&this.#t&&(this.noKeyboard?this.#t.removeAttribute(\"tabindex\"):this.#t.setAttribute(\"tabindex\",\"0\"))}connectedCallback(){this.#o(\"accept\"),this.#o(\"disabled\"),this.#o(\"maxFiles\"),this.#o(\"maxSize\"),this.#o(\"minSize\"),this.#o(\"multiple\"),this.#o(\"noClick\"),this.#o(\"noDrag\"),this.#o(\"noKeyboard\"),this.#o(\"autoFocus\"),this.#o(\"noStyle\"),this.#e?.addEventListener(\"change\",this.#i),this.#t?.addEventListener(\"dragenter\",this.#r),this.#t?.addEventListener(\"dragover\",this.#a),this.#t?.addEventListener(\"dragleave\",this.#n),this.#t?.addEventListener(\"drop\",this.#s),this.#t?.addEventListener(\"click\",this.#d),this.#t?.addEventListener(\"keyup\",this.#l),this.autoFocus&&this.#t?.focus()}disconnectedCallback(){this.#e?.removeEventListener(\"change\",this.#i),this.#t?.removeEventListener(\"dragenter\",this.#r),this.#t?.removeEventListener(\"dragover\",this.#a),this.#t?.removeEventListener(\"dragleave\",this.#n),this.#t?.removeEventListener(\"drop\",this.#s),this.#t?.removeEventListener(\"click\",this.#d),this.#t?.removeEventListener(\"keyup\",this.#l)}get accept(){return this.getAttribute(\"accept\")||\"\"}set accept(e){this.setAttribute(\"accept\",null!=e?e.toString():e)}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(e){this.toggleAttribute(\"disabled\",!!e)}get maxFiles(){let e=Number(this.getAttribute(\"max-files\"))||0;return e<=0?1/0:Math.floor(Math.abs(e))}set maxFiles(e){this.setAttribute(\"max-files\",null!=e?e.toString():e)}get maxSize(){let e=this.getAttribute(\"max-size\");if(null===e)return 1/0;let t=Number(e);return Number.isNaN(t)?1/0:t}set maxSize(e){this.setAttribute(\"max-size\",null!=e?e.toString():e)}get minSize(){let e=this.getAttribute(\"min-size\");if(null===e)return 0;let t=Number(e);return Number.isNaN(t)?0:t}set minSize(e){this.setAttribute(\"min-size\",null!=e?e.toString():e)}get multiple(){return this.hasAttribute(\"multiple\")}set multiple(e){this.toggleAttribute(\"multiple\",!!e)}get noClick(){return this.hasAttribute(\"no-click\")}set noClick(e){this.toggleAttribute(\"no-click\",!!e)}get noDrag(){return this.hasAttribute(\"no-drag\")}set noDrag(e){this.toggleAttribute(\"no-drag\",!!e)}get noKeyboard(){return this.hasAttribute(\"no-keyboard\")}set noKeyboard(e){this.toggleAttribute(\"no-keyboard\",!!e)}get autoFocus(){return this.hasAttribute(\"auto-focus\")}set autoFocus(e){this.toggleAttribute(\"auto-focus\",!!e)}get noStyle(){return this.hasAttribute(\"no-style\")}set noStyle(e){this.toggleAttribute(\"no-style\",!!e)}#i=async e=>{try{this.#p(await l(e))}catch(e){this.dispatchEvent(new CustomEvent(`${p}-error`,{bubbles:!0,composed:!0,detail:{error:e}}))}};#r=()=>{this.disabled||this.noDrag||this.dispatchEvent(new Event(`${p}-dragenter`,{bubbles:!0,composed:!0}))};#a=e=>{if(e.preventDefault(),this.disabled||this.noDrag){e.dataTransfer.dropEffect=\"none\";return}e.dataTransfer.dropEffect=\"copy\",this.#t&&(this.#t.classList.add(\"dropzone--dragover\"),this.#t.part.add(\"dropzone--dragover\")),this.dispatchEvent(new Event(`${p}-dragover`,{bubbles:!0,composed:!0}))};#n=()=>{this.disabled||this.noDrag||(this.#t&&(this.#t.classList.remove(\"dropzone--dragover\"),this.#t.part.remove(\"dropzone--dragover\")),this.dispatchEvent(new Event(`${p}-dragleave`,{bubbles:!0,composed:!0})))};#s=async e=>{if(!this.disabled&&!this.noDrag){e.preventDefault(),this.#t&&(this.#t.classList.remove(\"dropzone--dragover\"),this.#t.part.remove(\"dropzone--dragover\"));try{this.#p(await l(e))}catch(e){this.dispatchEvent(new CustomEvent(`${p}-error`,{bubbles:!0,composed:!0,detail:{error:e}}))}}};#d=()=>{this.disabled||this.noClick||this.#e?.click()};#l=e=>{this.disabled||this.noKeyboard||\" \"!==e.key&&\"Enter\"!==e.key||this.#e?.click()};#p(e){if(!Array.isArray(e)||!e.length)return;let t=[],o=[],i=e.length;if(!this.multiple&&i>1)for(let t of e)o.push({file:t,errors:[{code:c,message:\"Too many files selected. Only 1 file is allowed.\"}]});else if(this.multiple&&i>this.maxFiles)for(let t of e)o.push({file:t,errors:[{code:c,message:`Too many files selected. Only ${this.maxFiles} ${this.maxFiles>1?\"files are\":\"file is\"} allowed.`}]});else for(let i of e){let e=function(e,t=\"\"){if(!t)return!0;let o=[...new Set(t.split(\",\").map(e=>e.trim()).filter(Boolean))],i=e.type,r=i.replace(/\\/.*$/,\"\");for(let t of o)if(\".\"===t.charAt(0)){if(-1!==e.name.toLowerCase().indexOf(t.toLowerCase(),e.name.length-t.length))return!0}else if(/\\/\\*$/.test(t)){if(r===t.replace(/\\/.*$/,\"\"))return!0}else if(i===t)return!0;return!1}(i,this.accept),r=i.size>this.maxSize,a=i.size0&&this.dispatchEvent(new CustomEvent(`${p}-drop-accepted`,{bubbles:!0,composed:!0,detail:{acceptedFiles:t}})),o.length>0&&this.dispatchEvent(new CustomEvent(`${p}-drop-rejected`,{bubbles:!0,composed:!0,detail:{rejectedFiles:o}})),this.#e&&(this.#e.value=this.#e.defaultValue)}openFileDialog(){this.disabled||this.#e?.click()}#o(e){if(Object.prototype.hasOwnProperty.call(this,e)){let t=this[e];delete this[e],this[e]=t}}static defineCustomElement(e=p){\"undefined\"==typeof window||window.customElements.get(e)||window.customElements.define(e,m)}}m.defineCustomElement();export{m as FilesDropzone};\n//# sourceMappingURL=files-dropzone-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $862aa3736b0514bc$exports = {};\n\n$parcel$export($862aa3736b0514bc$exports, \"FilesDropzone\", function () { return $862aa3736b0514bc$export$6ccd1735166caad9; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ // @ts-check\n/**\n * Checks if a file is valid based on the accepted file type specifiers.\n *\n * @param {File} file - The File object to validate.\n * @param {string} [acceptedTypeSpecifiers=''] - The accepted file type specifiers.\n * @returns {boolean} - True if the file is valid, false otherwise.\n */ function $38f222170fd4d21a$export$7c47054fed488f80(file, acceptedTypeSpecifiers = \"\") {\n if (!acceptedTypeSpecifiers) return true;\n const acceptedMimeTypesList = [\n ...new Set(acceptedTypeSpecifiers.split(\",\").map((v)=>v.trim()).filter(Boolean))\n ];\n const fileMimeType = file.type;\n const baseMimeType = fileMimeType.replace(/\\/.*$/, \"\");\n for (const validType of acceptedMimeTypesList){\n if (validType.charAt(0) === \".\") {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) return true;\n } else if (/\\/\\*$/.test(validType)) {\n // Check for mime type that looks like \"image/*\" or similar.\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) return true;\n } else {\n if (fileMimeType === validType) return true;\n }\n }\n return false;\n}\n\n\n// @ts-check\n/**\n * A map of common file extensions and their associated MIME types.\n */ const $f31161edf38949e9$var$COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n [\n \"aac\",\n \"audio/aac\"\n ],\n [\n \"abw\",\n \"application/x-abiword\"\n ],\n [\n \"arc\",\n \"application/x-freearc\"\n ],\n [\n \"avif\",\n \"image/avif\"\n ],\n [\n \"avi\",\n \"video/x-msvideo\"\n ],\n [\n \"azw\",\n \"application/vnd.amazon.ebook\"\n ],\n [\n \"bin\",\n \"application/octet-stream\"\n ],\n [\n \"bmp\",\n \"image/bmp\"\n ],\n [\n \"bz\",\n \"application/x-bzip\"\n ],\n [\n \"bz2\",\n \"application/x-bzip2\"\n ],\n [\n \"cda\",\n \"application/x-cdf\"\n ],\n [\n \"csh\",\n \"application/x-csh\"\n ],\n [\n \"css\",\n \"text/css\"\n ],\n [\n \"csv\",\n \"text/csv\"\n ],\n [\n \"doc\",\n \"application/msword\"\n ],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ],\n [\n \"eot\",\n \"application/vnd.ms-fontobject\"\n ],\n [\n \"epub\",\n \"application/epub+zip\"\n ],\n [\n \"gz\",\n \"application/gzip\"\n ],\n [\n \"gif\",\n \"image/gif\"\n ],\n [\n \"heic\",\n \"image/heic\"\n ],\n [\n \"heif\",\n \"image/heif\"\n ],\n [\n \"htm\",\n \"text/html\"\n ],\n [\n \"html\",\n \"text/html\"\n ],\n [\n \"ico\",\n \"image/vnd.microsoft.icon\"\n ],\n [\n \"ics\",\n \"text/calendar\"\n ],\n [\n \"jar\",\n \"application/java-archive\"\n ],\n [\n \"jpeg\",\n \"image/jpeg\"\n ],\n [\n \"jpg\",\n \"image/jpeg\"\n ],\n [\n \"jxl\",\n \"image/jxl\"\n ],\n [\n \"js\",\n \"text/javascript\"\n ],\n [\n \"json\",\n \"application/json\"\n ],\n [\n \"jsonld\",\n \"application/ld+json\"\n ],\n [\n \"markdown\",\n \"text/markdown\"\n ],\n [\n \"md\",\n \"text/markdown\"\n ],\n [\n \"mid\",\n \"audio/midi\"\n ],\n [\n \"midi\",\n \"audio/midi\"\n ],\n [\n \"mjs\",\n \"text/javascript\"\n ],\n [\n \"mp3\",\n \"audio/mpeg\"\n ],\n [\n \"mp4\",\n \"video/mp4\"\n ],\n [\n \"mpeg\",\n \"video/mpeg\"\n ],\n [\n \"mpkg\",\n \"application/vnd.apple.installer+xml\"\n ],\n [\n \"odp\",\n \"application/vnd.oasis.opendocument.presentation\"\n ],\n [\n \"ods\",\n \"application/vnd.oasis.opendocument.spreadsheet\"\n ],\n [\n \"odt\",\n \"application/vnd.oasis.opendocument.text\"\n ],\n [\n \"oga\",\n \"audio/ogg\"\n ],\n [\n \"ogv\",\n \"video/ogg\"\n ],\n [\n \"ogx\",\n \"application/ogg\"\n ],\n [\n \"opus\",\n \"audio/opus\"\n ],\n [\n \"otf\",\n \"font/otf\"\n ],\n [\n \"png\",\n \"image/png\"\n ],\n [\n \"pdf\",\n \"application/pdf\"\n ],\n [\n \"php\",\n \"application/x-httpd-php\"\n ],\n [\n \"ppt\",\n \"application/vnd.ms-powerpoint\"\n ],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n ],\n [\n \"rar\",\n \"application/vnd.rar\"\n ],\n [\n \"rtf\",\n \"application/rtf\"\n ],\n [\n \"sh\",\n \"application/x-sh\"\n ],\n [\n \"svg\",\n \"image/svg+xml\"\n ],\n [\n \"swf\",\n \"application/x-shockwave-flash\"\n ],\n [\n \"tar\",\n \"application/x-tar\"\n ],\n [\n \"tif\",\n \"image/tiff\"\n ],\n [\n \"tiff\",\n \"image/tiff\"\n ],\n [\n \"ts\",\n \"video/mp2t\"\n ],\n [\n \"ttf\",\n \"font/ttf\"\n ],\n [\n \"txt\",\n \"text/plain\"\n ],\n [\n \"vsd\",\n \"application/vnd.visio\"\n ],\n [\n \"wav\",\n \"audio/wav\"\n ],\n [\n \"weba\",\n \"audio/webm\"\n ],\n [\n \"webm\",\n \"video/webm\"\n ],\n [\n \"webp\",\n \"image/webp\"\n ],\n [\n \"woff\",\n \"font/woff\"\n ],\n [\n \"woff2\",\n \"font/woff2\"\n ],\n [\n \"xhtml\",\n \"application/xhtml+xml\"\n ],\n [\n \"xls\",\n \"application/vnd.ms-excel\"\n ],\n [\n \"xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ],\n [\n \"xml\",\n \"application/xml\"\n ],\n [\n \"xul\",\n \"application/vnd.mozilla.xul+xml\"\n ],\n [\n \"zip\",\n \"application/zip\"\n ],\n [\n \"7z\",\n \"application/x-7z-compressed\"\n ],\n // Others\n [\n \"mkv\",\n \"video/x-matroska\"\n ],\n [\n \"mov\",\n \"video/quicktime\"\n ],\n [\n \"msg\",\n \"application/vnd.ms-outlook\"\n ]\n]);\nconst $f31161edf38949e9$var$FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n \".DS_Store\",\n \"Thumbs.db\" // Windows\n];\n/**\n * Adds a `type` property to the file object if it doesn't have one and the file has an extension.\n * This is needed because Firefox doesn't add a type property to files dragged from the desktop.\n * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=1424689\n *\n * @param {File} file - The file object to add the type property to.\n * @returns {File} - The file object with the type property added.\n */ const $f31161edf38949e9$var$toFileWithMimeType = (file)=>{\n const { name: name } = file;\n const hasExtension = name && name.lastIndexOf(\".\") !== -1;\n if (hasExtension && !file.type) {\n const extension = (name.split(\".\").pop() || \"\").toLowerCase();\n const type = $f31161edf38949e9$var$COMMON_MIME_TYPES.get(extension);\n if (type) Object.defineProperty(file, \"type\", {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return file;\n};\n/**\n * Adds a `path` property to the file object if it doesn't have one.\n * If `path` is not provided, the `webkitRelativePath` property of the file will be used\n * or the file's name if `webkitRelativePath` is not available.\n *\n * @param {File} file - The file object to add the path property to.\n * @param {string} [path] - The path to set on the file object.\n * @returns {File} - The file object with the path property added.\n */ const $f31161edf38949e9$var$toFileWithPath = (file, path)=>{\n const fileWithMimeType = $f31161edf38949e9$var$toFileWithMimeType(file);\n // @ts-ignore\n if (typeof fileWithMimeType.path !== \"string\") {\n const { webkitRelativePath: webkitRelativePath } = file;\n Object.defineProperty(fileWithMimeType, \"path\", {\n value: typeof path === \"string\" ? path : webkitRelativePath || file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return fileWithMimeType;\n};\n/**\n * Wrap `FileSystemDirectoryReader.readEntries` in a promise to make working with read entries easier.\n * https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */ const $f31161edf38949e9$var$readEntriesPromise = async (directoryReader)=>{\n return await new Promise((resolve, reject)=>{\n directoryReader.readEntries(resolve, reject);\n });\n};\n/**\n * Read all entries in a directory or sub-directory\n * by calling `readEntries` until it returns an empty array.\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */ const $f31161edf38949e9$var$readAllDirectoryEntries = async (directoryReader)=>{\n const entries = [];\n let readEntries = await $f31161edf38949e9$var$readEntriesPromise(directoryReader);\n while(readEntries.length > 0){\n entries.push(...readEntries);\n readEntries = await $f31161edf38949e9$var$readEntriesPromise(directoryReader);\n }\n return entries;\n};\n/**\n * Get a `File` object from a `FileSystemFileEntry` object.\n *\n * @param {FileSystemFileEntry} fileEntry - The file entry to get a `File` object from.\n * @returns {Promise} - A promise that resolves with a `File` object.\n */ const $f31161edf38949e9$var$getFileFromFileEntry = (fileEntry)=>{\n return new Promise((resolve, reject)=>{\n fileEntry.file((file)=>resolve($f31161edf38949e9$var$toFileWithPath(file, fileEntry.fullPath)), reject);\n });\n};\n/**\n * Get an array of `File` objects from a `DataTransferItemList` object.\n *\n * @param {DataTransferItemList} dataTransferItemList - The item list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */ const $f31161edf38949e9$var$getFilesFromDataTransferItemList = async (dataTransferItemList)=>{\n const files = [];\n // Chromium browsers read only 100 files at a time as per the spec, so we need to use\n // BFS (Breadth-first search) to traverse the entire directory/file structure.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#javascript_content\n const queue = [];\n for (const item of dataTransferItemList){\n if (item.kind !== \"file\") continue;\n // https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry\n // This function is implemented as `webkitGetAsEntry()` in non-WebKit browsers\n // including Firefox at this time but it may be renamed to `getAsEntry()` in the future.\n // @ts-ignore\n const entry = item.getAsEntry ? item.getAsEntry() : item.webkitGetAsEntry();\n queue.push(entry);\n }\n while(queue.length > 0){\n const entry = queue.shift();\n if (!entry) continue;\n else if (entry.isFile) {\n const file = await $f31161edf38949e9$var$getFileFromFileEntry(entry);\n if ($f31161edf38949e9$var$FILES_TO_IGNORE.indexOf(file.name) === -1) files.push(file);\n } else if (entry.isDirectory) queue.push(...await $f31161edf38949e9$var$readAllDirectoryEntries(entry.createReader()));\n }\n return files;\n};\n/**\n * Get an array of `File` objects from a `FileList` object.\n *\n * @param {FileList} fileList - The file list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */ const $f31161edf38949e9$var$getFilesFromFileList = async (fileList)=>{\n const files = [];\n for (const file of fileList)if ($f31161edf38949e9$var$FILES_TO_IGNORE.indexOf(file.name) === -1) files.push($f31161edf38949e9$var$toFileWithPath(file));\n return files;\n};\nconst $f31161edf38949e9$export$6d52664cd15c442 = async (evt)=>{\n if (evt.dataTransfer) return evt.dataTransfer.items ? await $f31161edf38949e9$var$getFilesFromDataTransferItemList(evt.dataTransfer.items) : await $f31161edf38949e9$var$getFilesFromFileList(evt.dataTransfer.files);\n return await $f31161edf38949e9$var$getFilesFromFileList(evt.target.files);\n};\n\n\nconst $862aa3736b0514bc$var$COMPONENT_NAME = \"files-dropzone\";\nconst $862aa3736b0514bc$var$TOO_MANY_FILES = \"TOO_MANY_FILES\";\nconst $862aa3736b0514bc$var$FILE_TOO_LARGE = \"FILE_TOO_LARGE\";\nconst $862aa3736b0514bc$var$FILE_TOO_SMALL = \"FILE_TOO_SMALL\";\nconst $862aa3736b0514bc$var$INVALID_MIME_TYPE = \"INVALID_MIME_TYPE\";\nconst $862aa3736b0514bc$var$template = document.createElement(\"template\");\nconst $862aa3736b0514bc$var$styles = /* css */ `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n$862aa3736b0514bc$var$template.innerHTML = /* html */ `\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\n/**\n * @summary A custom element that allows users to drag and drop files into it.\n * @documentation https://github.com/georapbox/files-dropzone-element\n *\n * @tagname files-dropzone - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {string} accept - A comma-separated list of unique file type specifiers describing file types to allow.\n * @property {boolean} disabled - Determines whether the dropzone is disabled.\n * @property {number} maxFiles - The maximum number of files allowed to be dropped.\n * @property {number} maxSize - The maximum file size allowed in bytes.\n * @property {number} minSize - The minimum file size allowed in bytes.\n * @property {boolean} multiple - Allows multiple files to be dropped.\n * @property {boolean} noClick - Prevents the file dialog from opening when the dropzone is clicked.\n * @property {boolean} noDrag - Prevents the dropzone from reacting to drag events.\n * @property {boolean} noKeyboard - Prevents the dropzone from reacting to keyboard events.\n * @property {boolean} autoFocus - Automatically focuses the dropzone when it's connected to the DOM.\n * @property {boolean} noStyle - Prevents the dropzone from applying any styling.\n *\n * @attribute {string} accept - Reflects the accept property.\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {number} max-files - Reflects the maxFiles property.\n * @attribute {number} max-size - Reflects the maxSize property.\n * @attribute {number} min-size - Reflects the minSize property.\n * @attribute {boolean} multiple - Reflects the multiple property.\n * @attribute {boolean} no-click - Reflects the noClick property.\n * @attribute {boolean} no-drag - Reflects the noDrag property.\n * @attribute {boolean} no-keyboard - Reflects the noKeyboard property.\n * @attribute {boolean} auto-focus - Reflects the autoFocus property.\n * @attribute {boolean} no-style - Reflects the noStyle property.\n *\n * @slot - The default slot content of the dropzone.\n *\n * @csspart dropzone - The dropzone element.\n * @csspart dropzone--dragover - The state of the dropzone when dragging over it.\n *\n * @cssproperty --dropzone-border-width - The border width of the dropzone.\n * @cssproperty --dropzone-border-style - The border style of the dropzone.\n * @cssproperty --dropzone-border-radius - The border radius of the dropzone.\n * @cssproperty --dropzone-border-color - The border color of the dropzone.\n * @cssproperty --dropzone-border-color-dragover - The border color of the dropzone when dragging over it.\n * @cssproperty --dropzone-border-color-hover - The border color of the dropzone when hovering over it.\n * @cssproperty --dropzone-background-color - The background color of the dropzone.\n * @cssproperty --dropzone-background-color-dragover - The background color of the dropzone when dragging over it.\n * @cssproperty --dropzone-background-color-hover - The background color of the dropzone when hovering over it.\n * @cssproperty --dropzone-body-color - The text color of the dropzone.\n * @cssproperty --dropzone-body-color-dragover - The text color of the dropzone when dragging over it.\n * @cssproperty --dropzone-body-color-hover - The text color of the dropzone when hovering over it.\n * @cssproperty --dropzone-focus-shadow-rgb - The RGB value of the dropzone's focus shadow.\n * @cssproperty --dropzone-focus-box-shadow - The box shadow of the dropzone when focused.\n * @cssproperty --dropzone-transition-duration - The transition's duration for the dropzone area.\n *\n * @event files-dropzone-drop - Fired when files are dropped.\n * @event files-dropzone-drop-accepted - Fired when files dropped files are accepted.\n * @event files-dropzone-drop-rejected - Fired when files dropped files are rejected.\n * @event files-dropzone-dragenter - Fired when files are dragged into the dropzone.\n * @event files-dropzone-dragover - Fired when files are dragged over the dropzone.\n * @event files-dropzone-dragleave - Fired when files are dragged out of the dropzone.\n * @event files-dropzone-error - Fired when there is any error in the process of reading dropped files or directories.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method openFileDialog - Instance method. Opens the file dialog programmatically.\n */ class $862aa3736b0514bc$export$6ccd1735166caad9 extends HTMLElement {\n /** @type {Nullable} */ #fileInput = null;\n /** @type {Nullable} */ #dropzoneEl = null;\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($862aa3736b0514bc$var$template.content.cloneNode(true));\n }\n if (this.shadowRoot) {\n this.#fileInput = /** @type {Nullable} */ this.shadowRoot.getElementById(\"fileInput\");\n this.#dropzoneEl = this.shadowRoot.getElementById(\"dropzoneEl\");\n }\n }\n static get observedAttributes() {\n return [\n \"accept\",\n \"disabled\",\n \"multiple\",\n \"no-keyboard\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"accept\" && oldValue !== newValue && this.#fileInput) this.#fileInput.accept = this.accept;\n if (name === \"disabled\" && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.disabled = this.disabled;\n if (this.disabled) this.#dropzoneEl?.removeAttribute(\"tabindex\");\n else this.#dropzoneEl?.setAttribute(\"tabindex\", \"0\");\n }\n if (name === \"multiple\" && oldValue !== newValue && this.#fileInput) this.#fileInput.multiple = this.multiple;\n if (name === \"no-keyboard\" && oldValue !== newValue && this.#dropzoneEl) {\n if (this.noKeyboard) this.#dropzoneEl.removeAttribute(\"tabindex\");\n else this.#dropzoneEl.setAttribute(\"tabindex\", \"0\");\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"accept\");\n this.#upgradeProperty(\"disabled\");\n this.#upgradeProperty(\"maxFiles\");\n this.#upgradeProperty(\"maxSize\");\n this.#upgradeProperty(\"minSize\");\n this.#upgradeProperty(\"multiple\");\n this.#upgradeProperty(\"noClick\");\n this.#upgradeProperty(\"noDrag\");\n this.#upgradeProperty(\"noKeyboard\");\n this.#upgradeProperty(\"autoFocus\");\n this.#upgradeProperty(\"noStyle\");\n this.#fileInput?.addEventListener(\"change\", this.#handleFileInputChange);\n this.#dropzoneEl?.addEventListener(\"dragenter\", this.#handleDragEnter);\n this.#dropzoneEl?.addEventListener(\"dragover\", this.#handleDragOver);\n this.#dropzoneEl?.addEventListener(\"dragleave\", this.#handleDragLeave);\n this.#dropzoneEl?.addEventListener(\"drop\", this.#handleDrop);\n this.#dropzoneEl?.addEventListener(\"click\", this.#handleClick);\n this.#dropzoneEl?.addEventListener(\"keyup\", this.#handleKeyUp);\n this.autoFocus && this.#dropzoneEl?.focus();\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#fileInput?.removeEventListener(\"change\", this.#handleFileInputChange);\n this.#dropzoneEl?.removeEventListener(\"dragenter\", this.#handleDragEnter);\n this.#dropzoneEl?.removeEventListener(\"dragover\", this.#handleDragOver);\n this.#dropzoneEl?.removeEventListener(\"dragleave\", this.#handleDragLeave);\n this.#dropzoneEl?.removeEventListener(\"drop\", this.#handleDrop);\n this.#dropzoneEl?.removeEventListener(\"click\", this.#handleClick);\n this.#dropzoneEl?.removeEventListener(\"keyup\", this.#handleKeyUp);\n }\n /**\n * @type {string} - A comma-separated list of unique file type specifiers describing file types to allow.\n * @attribute accept - Reflects the accept property.\n */ get accept() {\n return this.getAttribute(\"accept\") || \"\";\n }\n set accept(value) {\n this.setAttribute(\"accept\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} - Determines whether the dropzone is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */ get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n this.toggleAttribute(\"disabled\", !!value);\n }\n /**\n * @type {number} - The maximum number of files allowed to be dropped.\n * @default Infinity\n * @attribute max-files - Reflects the maxFiles property.\n */ get maxFiles() {\n const num = Number(this.getAttribute(\"max-files\")) || 0;\n if (num <= 0) return Infinity;\n return Math.floor(Math.abs(num));\n }\n set maxFiles(value) {\n this.setAttribute(\"max-files\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} - The maximum file size allowed in bytes.\n * @default Infinity\n * @attribute max-size - Reflects the maxSize property.\n */ get maxSize() {\n const value = this.getAttribute(\"max-size\");\n if (value === null) return Infinity;\n const num = Number(value);\n return Number.isNaN(num) ? Infinity : num;\n }\n set maxSize(value) {\n this.setAttribute(\"max-size\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} - The minimum file size allowed in bytes.\n * @default 0\n * @attribute min-size - Reflects the minSize property.\n */ get minSize() {\n const value = this.getAttribute(\"min-size\");\n if (value === null) return 0;\n const num = Number(value);\n return Number.isNaN(num) ? 0 : num;\n }\n set minSize(value) {\n this.setAttribute(\"min-size\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} - Allows multiple files to be dropped.\n * @default false\n * @attribute multiple - Reflects the multiple property.\n */ get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(value) {\n this.toggleAttribute(\"multiple\", !!value);\n }\n /**\n * @type {boolean} - Prevents the file dialog from opening when the dropzone is clicked.\n * @default false\n * @attribute no-click - Reflects the noClick property.\n */ get noClick() {\n return this.hasAttribute(\"no-click\");\n }\n set noClick(value) {\n this.toggleAttribute(\"no-click\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from reacting to drag events.\n * @default false\n * @attribute no-drag - Reflects the noDrag property.\n */ get noDrag() {\n return this.hasAttribute(\"no-drag\");\n }\n set noDrag(value) {\n this.toggleAttribute(\"no-drag\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from reacting to keyboard events.\n * @default false\n * @attribute no-keyboard - Reflects the noKeyboard property.\n */ get noKeyboard() {\n return this.hasAttribute(\"no-keyboard\");\n }\n set noKeyboard(value) {\n this.toggleAttribute(\"no-keyboard\", !!value);\n }\n /**\n * @type {boolean} - Automatically focuses the dropzone when it's connected to the DOM.\n * @default false\n * @attribute auto-focus - Reflects the autoFocus property.\n */ get autoFocus() {\n return this.hasAttribute(\"auto-focus\");\n }\n set autoFocus(value) {\n this.toggleAttribute(\"auto-focus\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from applying any styling.\n * @default false\n * @attribute no-style - Reflects the noStyle property.\n */ get noStyle() {\n return this.hasAttribute(\"no-style\");\n }\n set noStyle(value) {\n this.toggleAttribute(\"no-style\", !!value);\n }\n /**\n * Handles the change event of the file input.\n *\n * @param {*} evt - The event object.\n */ #handleFileInputChange = async (evt)=>{\n try {\n this.#handleFilesSelect(await (0, $f31161edf38949e9$export$6d52664cd15c442)(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n };\n /**\n * Handles the dragenter event of the dropzone.\n */ #handleDragEnter = ()=>{\n if (this.disabled || this.noDrag) return;\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragenter`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the dragover event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleDragOver = (evt)=>{\n evt.preventDefault();\n if (this.disabled || this.noDrag) {\n evt.dataTransfer.dropEffect = \"none\";\n return;\n }\n evt.dataTransfer.dropEffect = \"copy\";\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.add(\"dropzone--dragover\");\n this.#dropzoneEl.part.add(\"dropzone--dragover\");\n }\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragover`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the dragleave event of the dropzone.\n */ #handleDragLeave = ()=>{\n if (this.disabled || this.noDrag) return;\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove(\"dropzone--dragover\");\n this.#dropzoneEl.part.remove(\"dropzone--dragover\");\n }\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragleave`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the drop event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleDrop = async (evt)=>{\n if (this.disabled || this.noDrag) return;\n evt.preventDefault();\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove(\"dropzone--dragover\");\n this.#dropzoneEl.part.remove(\"dropzone--dragover\");\n }\n try {\n this.#handleFilesSelect(await (0, $f31161edf38949e9$export$6d52664cd15c442)(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n };\n /**\n * Handles the click event of the dropzone.\n */ #handleClick = ()=>{\n if (this.disabled || this.noClick) return;\n this.#fileInput?.click();\n };\n /**\n * Handles the keyup event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleKeyUp = (evt)=>{\n if (this.disabled || this.noKeyboard) return;\n if (evt.key === \" \" || evt.key === \"Enter\") this.#fileInput?.click();\n };\n /**\n * Handles the selection of files.\n *\n * @param {File[]} files - The files to handle.\n */ #handleFilesSelect(files) {\n if (!Array.isArray(files) || !files.length) return;\n const acceptedFiles = [];\n const rejectedFiles = [];\n const filesLength = files.length;\n // If the component is not in multiple mode, reject all files.\n if (!this.multiple && filesLength > 1) for (const file of files)rejectedFiles.push({\n file: file,\n errors: [\n {\n code: $862aa3736b0514bc$var$TOO_MANY_FILES,\n message: `Too many files selected. Only 1 file is allowed.`\n }\n ]\n });\n else if (this.multiple && filesLength > this.maxFiles) // If the component is in multiple mode, but the number of files exceeds\n // the maxFiles attribute, reject all files.\n for (const file of files)rejectedFiles.push({\n file: file,\n errors: [\n {\n code: $862aa3736b0514bc$var$TOO_MANY_FILES,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? \"files are\" : \"file is\"} allowed.`\n }\n ]\n });\n else // Validate each file. If it's valid, add it to the accepted files array,\n // otherwise add it to the rejected files array.\n for (const file of files){\n const fileHasValidType = (0, $38f222170fd4d21a$export$7c47054fed488f80)(file, this.accept);\n const fileExceedsMaxSize = file.size > this.maxSize;\n const fileIsSmallerThanMinSize = file.size < this.minSize;\n if (fileHasValidType && !fileExceedsMaxSize && !fileIsSmallerThanMinSize) acceptedFiles.push(file);\n else {\n const errors = [];\n if (!fileHasValidType) errors.push({\n code: $862aa3736b0514bc$var$INVALID_MIME_TYPE,\n message: `File type \"${file.type}\" is not accepted.`\n });\n if (fileExceedsMaxSize) errors.push({\n code: $862aa3736b0514bc$var$FILE_TOO_LARGE,\n message: `File size ${file.size} exceeds the maximum size of ${this.maxSize}.`\n });\n if (fileIsSmallerThanMinSize) errors.push({\n code: $862aa3736b0514bc$var$FILE_TOO_SMALL,\n message: `File size ${file.size} is smaller than the minimum size of ${this.minSize}.`\n });\n rejectedFiles.push({\n file: file,\n errors: errors\n });\n }\n }\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles: acceptedFiles,\n rejectedFiles: rejectedFiles\n }\n }));\n if (acceptedFiles.length > 0) this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop-accepted`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles: acceptedFiles\n }\n }));\n if (rejectedFiles.length > 0) this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop-rejected`, {\n bubbles: true,\n composed: true,\n detail: {\n rejectedFiles: rejectedFiles\n }\n }));\n if (this.#fileInput) this.#fileInput.value = this.#fileInput.defaultValue;\n }\n /**\n * Opens the file dialog programmatically.\n */ openFileDialog() {\n if (this.disabled) return;\n this.#fileInput?.click();\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'accept' | 'disabled' | 'maxFiles' | 'maxSize' | 'minSize' | 'multiple' | 'noClick' | 'noDrag' | 'noKeyboard' | 'autoFocus' | 'noStyle'} prop - The property name to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='files-dropzone'] - The name of the custom element.\n * @example\n *\n * FilesDropzone.defineCustomElement('my-dropzone');\n */ static defineCustomElement(elementName = $862aa3736b0514bc$var$COMPONENT_NAME) {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $862aa3736b0514bc$export$6ccd1735166caad9);\n }\n}\n\n\n(0, $862aa3736b0514bc$export$6ccd1735166caad9).defineCustomElement();\n\n\nexport {$862aa3736b0514bc$export$6ccd1735166caad9 as FilesDropzone};\n//# sourceMappingURL=files-dropzone-defined.js.map\n","import { FilesDropzone } from './files-dropzone.js';\n\nFilesDropzone.defineCustomElement();\n\nexport { FilesDropzone };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\nimport { isValidFile } from './utils/is-valid-file.js';\nimport { getFilesFromEvent } from './utils/files-selector.js';\n\nconst COMPONENT_NAME = 'files-dropzone';\nconst TOO_MANY_FILES = 'TOO_MANY_FILES';\nconst FILE_TOO_LARGE = 'FILE_TOO_LARGE';\nconst FILE_TOO_SMALL = 'FILE_TOO_SMALL';\nconst INVALID_MIME_TYPE = 'INVALID_MIME_TYPE';\nconst template = document.createElement('template');\n\nconst styles = /* css */`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n\ntemplate.innerHTML = /* html */`\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\n\n/**\n * @summary A custom element that allows users to drag and drop files into it.\n * @documentation https://github.com/georapbox/files-dropzone-element\n *\n * @tagname files-dropzone - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {string} accept - A comma-separated list of unique file type specifiers describing file types to allow.\n * @property {boolean} disabled - Determines whether the dropzone is disabled.\n * @property {number} maxFiles - The maximum number of files allowed to be dropped.\n * @property {number} maxSize - The maximum file size allowed in bytes.\n * @property {number} minSize - The minimum file size allowed in bytes.\n * @property {boolean} multiple - Allows multiple files to be dropped.\n * @property {boolean} noClick - Prevents the file dialog from opening when the dropzone is clicked.\n * @property {boolean} noDrag - Prevents the dropzone from reacting to drag events.\n * @property {boolean} noKeyboard - Prevents the dropzone from reacting to keyboard events.\n * @property {boolean} autoFocus - Automatically focuses the dropzone when it's connected to the DOM.\n * @property {boolean} noStyle - Prevents the dropzone from applying any styling.\n *\n * @attribute {string} accept - Reflects the accept property.\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {number} max-files - Reflects the maxFiles property.\n * @attribute {number} max-size - Reflects the maxSize property.\n * @attribute {number} min-size - Reflects the minSize property.\n * @attribute {boolean} multiple - Reflects the multiple property.\n * @attribute {boolean} no-click - Reflects the noClick property.\n * @attribute {boolean} no-drag - Reflects the noDrag property.\n * @attribute {boolean} no-keyboard - Reflects the noKeyboard property.\n * @attribute {boolean} auto-focus - Reflects the autoFocus property.\n * @attribute {boolean} no-style - Reflects the noStyle property.\n *\n * @slot - The default slot content of the dropzone.\n *\n * @csspart dropzone - The dropzone element.\n * @csspart dropzone--dragover - The state of the dropzone when dragging over it.\n *\n * @cssproperty --dropzone-border-width - The border width of the dropzone.\n * @cssproperty --dropzone-border-style - The border style of the dropzone.\n * @cssproperty --dropzone-border-radius - The border radius of the dropzone.\n * @cssproperty --dropzone-border-color - The border color of the dropzone.\n * @cssproperty --dropzone-border-color-dragover - The border color of the dropzone when dragging over it.\n * @cssproperty --dropzone-border-color-hover - The border color of the dropzone when hovering over it.\n * @cssproperty --dropzone-background-color - The background color of the dropzone.\n * @cssproperty --dropzone-background-color-dragover - The background color of the dropzone when dragging over it.\n * @cssproperty --dropzone-background-color-hover - The background color of the dropzone when hovering over it.\n * @cssproperty --dropzone-body-color - The text color of the dropzone.\n * @cssproperty --dropzone-body-color-dragover - The text color of the dropzone when dragging over it.\n * @cssproperty --dropzone-body-color-hover - The text color of the dropzone when hovering over it.\n * @cssproperty --dropzone-focus-shadow-rgb - The RGB value of the dropzone's focus shadow.\n * @cssproperty --dropzone-focus-box-shadow - The box shadow of the dropzone when focused.\n * @cssproperty --dropzone-transition-duration - The transition's duration for the dropzone area.\n *\n * @event files-dropzone-drop - Fired when files are dropped.\n * @event files-dropzone-drop-accepted - Fired when files dropped files are accepted.\n * @event files-dropzone-drop-rejected - Fired when files dropped files are rejected.\n * @event files-dropzone-dragenter - Fired when files are dragged into the dropzone.\n * @event files-dropzone-dragover - Fired when files are dragged over the dropzone.\n * @event files-dropzone-dragleave - Fired when files are dragged out of the dropzone.\n * @event files-dropzone-error - Fired when there is any error in the process of reading dropped files or directories.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method openFileDialog - Instance method. Opens the file dialog programmatically.\n */\nclass FilesDropzone extends HTMLElement {\n /** @type {Nullable} */\n #fileInput = null;\n\n /** @type {Nullable} */\n #dropzoneEl = null;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n if (this.shadowRoot) {\n this.#fileInput = /** @type {Nullable} */(this.shadowRoot.getElementById('fileInput'));\n this.#dropzoneEl = this.shadowRoot.getElementById('dropzoneEl');\n }\n }\n\n static get observedAttributes() {\n return ['accept', 'disabled', 'multiple', 'no-keyboard'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'accept' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.accept = this.accept;\n }\n\n if (name === 'disabled' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.disabled = this.disabled;\n\n if (this.disabled) {\n this.#dropzoneEl?.removeAttribute('tabindex');\n } else {\n this.#dropzoneEl?.setAttribute('tabindex', '0');\n }\n }\n\n if (name === 'multiple' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.multiple = this.multiple;\n }\n\n if (name === 'no-keyboard' && oldValue !== newValue && this.#dropzoneEl) {\n if (this.noKeyboard) {\n this.#dropzoneEl.removeAttribute('tabindex');\n } else {\n this.#dropzoneEl.setAttribute('tabindex', '0');\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('accept');\n this.#upgradeProperty('disabled');\n this.#upgradeProperty('maxFiles');\n this.#upgradeProperty('maxSize');\n this.#upgradeProperty('minSize');\n this.#upgradeProperty('multiple');\n this.#upgradeProperty('noClick');\n this.#upgradeProperty('noDrag');\n this.#upgradeProperty('noKeyboard');\n this.#upgradeProperty('autoFocus');\n this.#upgradeProperty('noStyle');\n\n this.#fileInput?.addEventListener('change', this.#handleFileInputChange);\n this.#dropzoneEl?.addEventListener('dragenter', this.#handleDragEnter);\n this.#dropzoneEl?.addEventListener('dragover', this.#handleDragOver);\n this.#dropzoneEl?.addEventListener('dragleave', this.#handleDragLeave);\n this.#dropzoneEl?.addEventListener('drop', this.#handleDrop);\n this.#dropzoneEl?.addEventListener('click', this.#handleClick);\n this.#dropzoneEl?.addEventListener('keyup', this.#handleKeyUp);\n\n this.autoFocus && this.#dropzoneEl?.focus();\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#fileInput?.removeEventListener('change', this.#handleFileInputChange);\n this.#dropzoneEl?.removeEventListener('dragenter', this.#handleDragEnter);\n this.#dropzoneEl?.removeEventListener('dragover', this.#handleDragOver);\n this.#dropzoneEl?.removeEventListener('dragleave', this.#handleDragLeave);\n this.#dropzoneEl?.removeEventListener('drop', this.#handleDrop);\n this.#dropzoneEl?.removeEventListener('click', this.#handleClick);\n this.#dropzoneEl?.removeEventListener('keyup', this.#handleKeyUp);\n }\n\n /**\n * @type {string} - A comma-separated list of unique file type specifiers describing file types to allow.\n * @attribute accept - Reflects the accept property.\n */\n get accept() {\n return this.getAttribute('accept') || '';\n }\n\n set accept(value) {\n this.setAttribute('accept', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} - Determines whether the dropzone is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n set disabled(value) {\n this.toggleAttribute('disabled', !!value);\n }\n\n /**\n * @type {number} - The maximum number of files allowed to be dropped.\n * @default Infinity\n * @attribute max-files - Reflects the maxFiles property.\n */\n get maxFiles() {\n const num = Number(this.getAttribute('max-files')) || 0;\n\n if (num <= 0) {\n return Infinity;\n }\n\n return Math.floor(Math.abs(num));\n }\n\n set maxFiles(value) {\n this.setAttribute('max-files', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} - The maximum file size allowed in bytes.\n * @default Infinity\n * @attribute max-size - Reflects the maxSize property.\n */\n get maxSize() {\n const value = this.getAttribute('max-size');\n\n if (value === null) {\n return Infinity;\n }\n\n const num = Number(value);\n\n return Number.isNaN(num) ? Infinity : num;\n }\n\n set maxSize(value) {\n this.setAttribute('max-size', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} - The minimum file size allowed in bytes.\n * @default 0\n * @attribute min-size - Reflects the minSize property.\n */\n get minSize() {\n const value = this.getAttribute('min-size');\n\n if (value === null) {\n return 0;\n }\n\n const num = Number(value);\n\n return Number.isNaN(num) ? 0 : num;\n }\n\n set minSize(value) {\n this.setAttribute('min-size', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} - Allows multiple files to be dropped.\n * @default false\n * @attribute multiple - Reflects the multiple property.\n */\n get multiple() {\n return this.hasAttribute('multiple');\n }\n\n set multiple(value) {\n this.toggleAttribute('multiple', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the file dialog from opening when the dropzone is clicked.\n * @default false\n * @attribute no-click - Reflects the noClick property.\n */\n get noClick() {\n return this.hasAttribute('no-click');\n }\n\n set noClick(value) {\n this.toggleAttribute('no-click', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from reacting to drag events.\n * @default false\n * @attribute no-drag - Reflects the noDrag property.\n */\n get noDrag() {\n return this.hasAttribute('no-drag');\n }\n\n set noDrag(value) {\n this.toggleAttribute('no-drag', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from reacting to keyboard events.\n * @default false\n * @attribute no-keyboard - Reflects the noKeyboard property.\n */\n get noKeyboard() {\n return this.hasAttribute('no-keyboard');\n }\n\n set noKeyboard(value) {\n this.toggleAttribute('no-keyboard', !!value);\n }\n\n /**\n * @type {boolean} - Automatically focuses the dropzone when it's connected to the DOM.\n * @default false\n * @attribute auto-focus - Reflects the autoFocus property.\n */\n get autoFocus() {\n return this.hasAttribute('auto-focus');\n }\n\n set autoFocus(value) {\n this.toggleAttribute('auto-focus', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from applying any styling.\n * @default false\n * @attribute no-style - Reflects the noStyle property.\n */\n get noStyle() {\n return this.hasAttribute('no-style');\n }\n\n set noStyle(value) {\n this.toggleAttribute('no-style', !!value);\n }\n\n /**\n * Handles the change event of the file input.\n *\n * @param {*} evt - The event object.\n */\n #handleFileInputChange = async evt => {\n try {\n this.#handleFilesSelect(await getFilesFromEvent(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n };\n\n /**\n * Handles the dragenter event of the dropzone.\n */\n #handleDragEnter = () => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragenter`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the dragover event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleDragOver = evt => {\n evt.preventDefault();\n\n if (this.disabled || this.noDrag) {\n evt.dataTransfer.dropEffect = 'none';\n return;\n }\n\n evt.dataTransfer.dropEffect = 'copy';\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.add('dropzone--dragover');\n this.#dropzoneEl.part.add('dropzone--dragover');\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragover`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the dragleave event of the dropzone.\n */\n #handleDragLeave = () => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove('dropzone--dragover');\n this.#dropzoneEl.part.remove('dropzone--dragover');\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragleave`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the drop event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleDrop = async evt => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n evt.preventDefault();\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove('dropzone--dragover');\n this.#dropzoneEl.part.remove('dropzone--dragover');\n }\n\n try {\n this.#handleFilesSelect(await getFilesFromEvent(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n };\n\n /**\n * Handles the click event of the dropzone.\n */\n #handleClick = () => {\n if (this.disabled || this.noClick) {\n return;\n }\n\n this.#fileInput?.click();\n };\n\n /**\n * Handles the keyup event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleKeyUp = evt => {\n if (this.disabled || this.noKeyboard) {\n return;\n }\n\n if (evt.key === ' ' || evt.key === 'Enter') {\n this.#fileInput?.click();\n }\n };\n\n /**\n * Handles the selection of files.\n *\n * @param {File[]} files - The files to handle.\n */\n #handleFilesSelect(files) {\n if (!Array.isArray(files) || !files.length) {\n return;\n }\n\n const acceptedFiles = [];\n const rejectedFiles = [];\n const filesLength = files.length;\n\n // If the component is not in multiple mode, reject all files.\n if (!this.multiple && filesLength > 1) {\n for (const file of files) {\n rejectedFiles.push({\n file,\n errors: [{\n code: TOO_MANY_FILES,\n message: `Too many files selected. Only 1 file is allowed.`\n }]\n });\n }\n } else if (this.multiple && filesLength > this.maxFiles) {\n // If the component is in multiple mode, but the number of files exceeds\n // the maxFiles attribute, reject all files.\n for (const file of files) {\n rejectedFiles.push({\n file,\n errors: [{\n code: TOO_MANY_FILES,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? 'files are' : 'file is'} allowed.`\n }]\n });\n }\n } else {\n // Validate each file. If it's valid, add it to the accepted files array,\n // otherwise add it to the rejected files array.\n for (const file of files) {\n const fileHasValidType = isValidFile(file, this.accept);\n const fileExceedsMaxSize = file.size > this.maxSize;\n const fileIsSmallerThanMinSize = file.size < this.minSize;\n\n if (fileHasValidType && !fileExceedsMaxSize && !fileIsSmallerThanMinSize) {\n acceptedFiles.push(file);\n } else {\n const errors = [];\n\n if (!fileHasValidType) {\n errors.push({\n code: INVALID_MIME_TYPE,\n message: `File type \"${file.type}\" is not accepted.`\n });\n }\n\n if (fileExceedsMaxSize) {\n errors.push({\n code: FILE_TOO_LARGE,\n message: `File size ${file.size} exceeds the maximum size of ${this.maxSize}.`\n });\n }\n\n if (fileIsSmallerThanMinSize) {\n errors.push({\n code: FILE_TOO_SMALL,\n message: `File size ${file.size} is smaller than the minimum size of ${this.minSize}.`\n });\n }\n\n rejectedFiles.push({ file, errors });\n }\n }\n }\n\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles,\n rejectedFiles\n }\n }));\n\n if (acceptedFiles.length > 0) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop-accepted`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles\n }\n }));\n }\n\n if (rejectedFiles.length > 0) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop-rejected`, {\n bubbles: true,\n composed: true,\n detail: {\n rejectedFiles\n }\n }));\n }\n\n if (this.#fileInput) {\n this.#fileInput.value = this.#fileInput.defaultValue;\n }\n }\n\n /**\n * Opens the file dialog programmatically.\n */\n openFileDialog() {\n if (this.disabled) {\n return;\n }\n\n this.#fileInput?.click();\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'accept' | 'disabled' | 'maxFiles' | 'maxSize' | 'minSize' | 'multiple' | 'noClick' | 'noDrag' | 'noKeyboard' | 'autoFocus' | 'noStyle'} prop - The property name to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='files-dropzone'] - The name of the custom element.\n * @example\n *\n * FilesDropzone.defineCustomElement('my-dropzone');\n */\n static defineCustomElement(elementName = COMPONENT_NAME) {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, FilesDropzone);\n }\n }\n}\n\nexport { FilesDropzone };\n","// @ts-check\n\n/**\n * Checks if a file is valid based on the accepted file type specifiers.\n *\n * @param {File} file - The File object to validate.\n * @param {string} [acceptedTypeSpecifiers=''] - The accepted file type specifiers.\n * @returns {boolean} - True if the file is valid, false otherwise.\n */\nexport function isValidFile(file, acceptedTypeSpecifiers = '') {\n if (!acceptedTypeSpecifiers) {\n return true;\n }\n\n const acceptedMimeTypesList = [\n ...new Set(acceptedTypeSpecifiers.split(',').map(v => v.trim()).filter(Boolean))\n ];\n\n const fileMimeType = file.type;\n const baseMimeType = fileMimeType.replace(/\\/.*$/, '');\n\n for (const validType of acceptedMimeTypesList) {\n if (validType.charAt(0) === '.') {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n return true;\n }\n } else if (/\\/\\*$/.test(validType)) {\n // Check for mime type that looks like \"image/*\" or similar.\n if (baseMimeType === validType.replace(/\\/.*$/, '')) {\n return true;\n }\n } else {\n if (fileMimeType === validType) {\n return true;\n }\n }\n }\n\n return false;\n}\n","// @ts-check\n\n/**\n * A map of common file extensions and their associated MIME types.\n */\nconst COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n ['aac', 'audio/aac'],\n ['abw', 'application/x-abiword'],\n ['arc', 'application/x-freearc'],\n ['avif', 'image/avif'],\n ['avi', 'video/x-msvideo'],\n ['azw', 'application/vnd.amazon.ebook'],\n ['bin', 'application/octet-stream'],\n ['bmp', 'image/bmp'],\n ['bz', 'application/x-bzip'],\n ['bz2', 'application/x-bzip2'],\n ['cda', 'application/x-cdf'],\n ['csh', 'application/x-csh'],\n ['css', 'text/css'],\n ['csv', 'text/csv'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n ['eot', 'application/vnd.ms-fontobject'],\n ['epub', 'application/epub+zip'],\n ['gz', 'application/gzip'],\n ['gif', 'image/gif'],\n ['heic', 'image/heic'],\n ['heif', 'image/heif'],\n ['htm', 'text/html'],\n ['html', 'text/html'],\n ['ico', 'image/vnd.microsoft.icon'],\n ['ics', 'text/calendar'],\n ['jar', 'application/java-archive'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['jxl', 'image/jxl'],\n ['js', 'text/javascript'],\n ['json', 'application/json'],\n ['jsonld', 'application/ld+json'],\n ['markdown', 'text/markdown'],\n ['md', 'text/markdown'],\n ['mid', 'audio/midi'],\n ['midi', 'audio/midi'],\n ['mjs', 'text/javascript'],\n ['mp3', 'audio/mpeg'],\n ['mp4', 'video/mp4'],\n ['mpeg', 'video/mpeg'],\n ['mpkg', 'application/vnd.apple.installer+xml'],\n ['odp', 'application/vnd.oasis.opendocument.presentation'],\n ['ods', 'application/vnd.oasis.opendocument.spreadsheet'],\n ['odt', 'application/vnd.oasis.opendocument.text'],\n ['oga', 'audio/ogg'],\n ['ogv', 'video/ogg'],\n ['ogx', 'application/ogg'],\n ['opus', 'audio/opus'],\n ['otf', 'font/otf'],\n ['png', 'image/png'],\n ['pdf', 'application/pdf'],\n ['php', 'application/x-httpd-php'],\n ['ppt', 'application/vnd.ms-powerpoint'],\n ['pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'],\n ['rar', 'application/vnd.rar'],\n ['rtf', 'application/rtf'],\n ['sh', 'application/x-sh'],\n ['svg', 'image/svg+xml'],\n ['swf', 'application/x-shockwave-flash'],\n ['tar', 'application/x-tar'],\n ['tif', 'image/tiff'],\n ['tiff', 'image/tiff'],\n ['ts', 'video/mp2t'],\n ['ttf', 'font/ttf'],\n ['txt', 'text/plain'],\n ['vsd', 'application/vnd.visio'],\n ['wav', 'audio/wav'],\n ['weba', 'audio/webm'],\n ['webm', 'video/webm'],\n ['webp', 'image/webp'],\n ['woff', 'font/woff'],\n ['woff2', 'font/woff2'],\n ['xhtml', 'application/xhtml+xml'],\n ['xls', 'application/vnd.ms-excel'],\n ['xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],\n ['xml', 'application/xml'],\n ['xul', 'application/vnd.mozilla.xul+xml'],\n ['zip', 'application/zip'],\n ['7z', 'application/x-7z-compressed'],\n\n // Others\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['msg', 'application/vnd.ms-outlook']\n]);\n\nconst FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store', // macOs\n 'Thumbs.db' // Windows\n];\n\n/**\n * Adds a `type` property to the file object if it doesn't have one and the file has an extension.\n * This is needed because Firefox doesn't add a type property to files dragged from the desktop.\n * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=1424689\n *\n * @param {File} file - The file object to add the type property to.\n * @returns {File} - The file object with the type property added.\n */\nconst toFileWithMimeType = file => {\n const { name } = file;\n const hasExtension = name && name.lastIndexOf('.') !== -1;\n\n if (hasExtension && !file.type) {\n const extension = (name.split('.').pop() || '').toLowerCase();\n const type = COMMON_MIME_TYPES.get(extension);\n\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n\n return file;\n};\n\n/**\n * Adds a `path` property to the file object if it doesn't have one.\n * If `path` is not provided, the `webkitRelativePath` property of the file will be used\n * or the file's name if `webkitRelativePath` is not available.\n *\n * @param {File} file - The file object to add the path property to.\n * @param {string} [path] - The path to set on the file object.\n * @returns {File} - The file object with the path property added.\n */\nconst toFileWithPath = (file, path) => {\n const fileWithMimeType = toFileWithMimeType(file);\n\n // @ts-ignore\n if (typeof fileWithMimeType.path !== 'string') {\n const { webkitRelativePath } = file;\n\n Object.defineProperty(fileWithMimeType, 'path', {\n value: typeof path === 'string' ? path : webkitRelativePath || file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n\n return fileWithMimeType;\n};\n\n/**\n * Wrap `FileSystemDirectoryReader.readEntries` in a promise to make working with read entries easier.\n * https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */\nconst readEntriesPromise = async directoryReader => {\n return await new Promise((resolve, reject) => {\n directoryReader.readEntries(resolve, reject);\n });\n};\n\n/**\n * Read all entries in a directory or sub-directory\n * by calling `readEntries` until it returns an empty array.\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */\nconst readAllDirectoryEntries = async directoryReader => {\n const entries = [];\n let readEntries = await readEntriesPromise(directoryReader);\n\n while (readEntries.length > 0) {\n entries.push(...readEntries);\n readEntries = await readEntriesPromise(directoryReader);\n }\n\n return entries;\n};\n\n/**\n * Get a `File` object from a `FileSystemFileEntry` object.\n *\n * @param {FileSystemFileEntry} fileEntry - The file entry to get a `File` object from.\n * @returns {Promise} - A promise that resolves with a `File` object.\n */\nconst getFileFromFileEntry = fileEntry => {\n return new Promise((resolve, reject) => {\n fileEntry.file(file => resolve(toFileWithPath(file, fileEntry.fullPath)), reject);\n });\n};\n\n/**\n * Get an array of `File` objects from a `DataTransferItemList` object.\n *\n * @param {DataTransferItemList} dataTransferItemList - The item list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nconst getFilesFromDataTransferItemList = async dataTransferItemList => {\n const files = [];\n\n // Chromium browsers read only 100 files at a time as per the spec, so we need to use\n // BFS (Breadth-first search) to traverse the entire directory/file structure.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#javascript_content\n const queue = [];\n\n for (const item of dataTransferItemList) {\n if (item.kind !== 'file') {\n // Ignore non-file items, such as links.\n continue;\n }\n\n // https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry\n // This function is implemented as `webkitGetAsEntry()` in non-WebKit browsers\n // including Firefox at this time but it may be renamed to `getAsEntry()` in the future.\n // @ts-ignore\n const entry = item.getAsEntry ? item.getAsEntry() : item.webkitGetAsEntry();\n\n queue.push(entry);\n }\n\n while (queue.length > 0) {\n const entry = queue.shift();\n\n if (!entry) {\n continue;\n } else if (entry.isFile) {\n const file = await getFileFromFileEntry(entry);\n\n if (FILES_TO_IGNORE.indexOf(file.name) === -1) {\n files.push(file);\n }\n } else if (entry.isDirectory) {\n queue.push(...await readAllDirectoryEntries(entry.createReader()));\n }\n }\n\n return files;\n};\n\n/**\n * Get an array of `File` objects from a `FileList` object.\n *\n * @param {FileList} fileList - The file list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nconst getFilesFromFileList = async fileList => {\n const files = [];\n\n for (const file of fileList) {\n if (FILES_TO_IGNORE.indexOf(file.name) === -1) {\n files.push(toFileWithPath(file));\n }\n }\n\n return files;\n};\n\n/**\n * Get an array of `File` objects from an event.\n * This function supports both `drop` and `change` events.\n *\n * @param {*} evt - The event to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nexport const getFilesFromEvent = async evt => {\n if (evt.dataTransfer) {\n return evt.dataTransfer.items\n ? await getFilesFromDataTransferItemList(evt.dataTransfer.items)\n : await getFilesFromFileList(evt.dataTransfer.files);\n }\n\n return await getFilesFromFileList(evt.target.files);\n};\n","/**\n * Removes one or more elements from an array at the specified index(es).\n *\n * @param {Array} array The initial array to remove elements from.\n * @param {Number} ...indexes The index(es) of the elements to be removed. Non numbers are ignored.\n * @throws {TypeError} If `array` is not array.\n * @returns {Array} The result array with the elements specified removed.\n * @example\n *\n * const arr = [1, 2, 3, 4, 5];\n *\n * remove(arr, 0);\n * // => [2, 3, 4, 5]\n *\n * remove(arr, 0, 1);\n * // => [3, 4, 5]\n *\n * remove(arr, 0, 4);\n * // => [2, 3, 4]\n *\n * remove(arr);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length - 1);\n * // => [1, 2, 3, 4]\n *\n * remove(arr, NaN);\n * // => [1, 2, 3, 4, 5]\n */\nexport const arrayRemove = (array, ...indexes) => {\n if (!Array.isArray(array)) {\n throw new TypeError('Expected an array for first argument');\n }\n\n return array.filter((_, i) => indexes.indexOf(i) === -1);\n};\n","/**\n * Generates a unique id of the form `${prefix}-${randomString}-${suffix}`.\n *\n * @param {string} [prefix=''] - The prefix to use for the id.\n * @param {string} [suffix=''] - The suffix to use for the id.\n * @returns {string} - The unique id.\n */\nconst uid = (prefix = '', suffix = '') => {\n const prefixString = typeof prefix === 'string' && prefix !== '' ? prefix + '-' : '';\n const suffixString = typeof suffix === 'string' && suffix !== '' ? '-' + suffix : '';\n const randomString = Math.random().toString(36).substring(2, 8); // Pseudo-random string of six alphanumeric characters.\n\n return `${prefixString}${randomString}${suffixString}`;\n};\n\nexport { uid };\n","export const ACCEPTED_MIME_TYPES = ['image/jpg', 'image/jpeg', 'image/png', 'image/apng', 'image/gif', 'image/webp', 'image/avif'];\n","import Pressuru from 'url:../assets/fonts/Pressuru/Pressuru.ttf';\nimport OswaldRegular from 'url:../assets/fonts/Oswald/Oswald-Regular.ttf';\nimport OswaldBold from 'url:../assets/fonts/Oswald/Oswald-Bold.ttf';\nimport RobotoRegular from 'url:../assets/fonts/Roboto/Roboto-Regular.ttf';\nimport RobotoBold from 'url:../assets/fonts/Roboto/Roboto-Bold.ttf';\nimport RobotoCondensedRegular from 'url:../assets/fonts/RobotoCondensed/RobotoCondensed-Regular.ttf';\nimport RobotoCondensedBold from 'url:../assets/fonts/RobotoCondensed/RobotoCondensed-Bold.ttf';\nimport CourierPrimeRegular from 'url:../assets/fonts/CourierPrime/CourierPrime-Regular.ttf';\nimport CourierPrimeBold from 'url:../assets/fonts/CourierPrime/CourierPrime-Bold.ttf';\nimport OpenSansRegular from 'url:../assets/fonts/OpenSans/OpenSans-Regular.ttf';\nimport OpenSansBold from 'url:../assets/fonts/OpenSans/OpenSans-Bold.ttf';\n\nexport const customFonts = [\n { name: 'Pressuru', label: 'Pressuru', path: Pressuru, style: 'normal', weight: '400' },\n { name: 'Oswald-Regular', label: 'Oswald', path: OswaldRegular, style: 'normal', weight: '400' },\n { name: 'Oswald-Bold', label: 'Oswald Bold', path: OswaldBold, style: 'normal', weight: '700' },\n { name: 'Roboto-Regular', label: 'Roboto', path: RobotoRegular, style: 'normal', weight: '400' },\n { name: 'Roboto-Bold', label: 'Roboto Bold', path: RobotoBold, style: 'normal', weight: '700' },\n { name: 'RobotoCondensed-Regular', label: 'Roboto Condensed', path: RobotoCondensedRegular, style: 'normal', weight: '400' },\n { name: 'RobotoCondensed-Bold', label: 'Roboto Condensed Bold', path: RobotoCondensedBold, style: 'normal', weight: '700' },\n { name: 'CourierPrime-Regular', label: 'Courier Prime', path: CourierPrimeRegular, style: 'normal', weight: '400' },\n { name: 'CourierPrime-Bold', label: 'Courier Prime Bold', path: CourierPrimeBold, style: 'normal', weight: '700' },\n { name: 'OpenSans-Regular', label: 'Open Sans', path: OpenSansRegular, style: 'normal', weight: '400' },\n { name: 'OpenSans-Bold', label: 'Open Sans Bold', path: OpenSansBold, style: 'normal', weight: '400' }\n];\n\nexport const loadCustomFont = async (name, path, options = {}) => {\n try {\n const font = new FontFace(name, `url(${path})`, { ...options });\n await font.load();\n document.fonts.add(font);\n } catch (err) {\n console.error(err);\n }\n};\n","module.exports = new __parcel__URL__(\"Pressuru.684952ea.ttf\").toString();","module.exports = new __parcel__URL__(\"Oswald-Regular.89ec7d89.ttf\").toString();","module.exports = new __parcel__URL__(\"Oswald-Bold.0f6a7ca6.ttf\").toString();","module.exports = new __parcel__URL__(\"Roboto-Regular.ca197847.ttf\").toString();","module.exports = new __parcel__URL__(\"Roboto-Bold.fdb9b54a.ttf\").toString();","module.exports = new __parcel__URL__(\"RobotoCondensed-Regular.d585f5c7.ttf\").toString();","module.exports = new __parcel__URL__(\"RobotoCondensed-Bold.e1f96d4b.ttf\").toString();","module.exports = new __parcel__URL__(\"CourierPrime-Regular.3a25a501.ttf\").toString();","module.exports = new __parcel__URL__(\"CourierPrime-Bold.3d6bf689.ttf\").toString();","module.exports = new __parcel__URL__(\"OpenSans-Regular.edf9e01b.ttf\").toString();","module.exports = new __parcel__URL__(\"OpenSans-Bold.8fceb72b.ttf\").toString();","import { ACCEPTED_MIME_TYPES } from './constants.js';\n\nexport const fileFromUrl = async (options = {}) => {\n const res = await fetch(options.url);\n const blob = await res.blob();\n const mimeType = options.mimeType || blob.type || '';\n\n if (!ACCEPTED_MIME_TYPES.includes(mimeType)) {\n throw new Error(`This is not an accepted image format. Accepted MIME types are: ${ACCEPTED_MIME_TYPES.join(', ')}`);\n }\n\n return new File([blob], options.filename || '', blob);\n};\n","const errorsContainer = document.getElementById('errorsContainer');\n\nconst hideError = evt => {\n const target = evt.currentTarget;\n target.removeEventListener('click', hideError);\n errorsContainer.removeChild(target.parentNode);\n};\n\nexport const toastAlert = (message = '', type = 'info') => {\n const types = ['info', 'warning', 'danger'];\n\n if (!types.includes(type)) {\n type = 'info';\n }\n\n const template = /* html */`\n ${message}\n \n `;\n\n const div = document.createElement('div');\n div.className = `alert alert-${type} alert-dismissible text-break mb-2 fade`;\n div.innerHTML = template;\n div.querySelector('button').addEventListener('click', hideError);\n errorsContainer.appendChild(div);\n setTimeout(() => div.classList.add('show'), 100);\n};\n","import { customFonts } from './custom-fonts.js';\n\nexport const createTextBox = (index, data = {}) => {\n const inputTemplate = /* html */`\n
\n \n\n \n\n
\n \n \n \n
\n
\n\n
\n
\n
\n \n\n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n
\n `;\n\n const fragment = document.createDocumentFragment();\n const div = document.createElement('div');\n\n div.className = 'bg-light border shadow-sm mb-3 rounded';\n div.setAttribute('data-section', 'textBox');\n div.setAttribute('data-index', index);\n div.innerHTML = inputTemplate;\n div.querySelector('[data-input=\"font\"]').value = data.font;\n div.querySelector('[data-input=\"textAlign\"]').value = data.textAlign;\n div.querySelector('[data-input=\"allCaps\"]').checked = data.allCaps;\n\n return fragment.appendChild(div);\n};\n","export const drawCanvas = (image, canvas, ctx, textOptions = []) => {\n if (image == null) {\n return;\n }\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (typeof image === 'string') { // Assume it's a color\n ctx.fillStyle = image;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else {\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n }\n\n textOptions.forEach(function (item, index) {\n ctx.save();\n\n ctx.font = `${item.fontWeight} ${item.fontSize}px ${item.font}`;\n ctx.fillStyle = item.fillColor;\n ctx.textAlign = item.textAlign;\n ctx.strokeStyle = item.shadowColor;\n\n const multiplier = index + 1;\n const lineHeight = ctx.measureText('M').width + item.fontSize / 2;\n const xPos = canvas.width / 2;\n const shadowBlur = item.shadowBlur;\n const text = item.allCaps === true ? item.text.toUpperCase() : item.text;\n const textLines = text.split('\\n');\n\n if (shadowBlur !== 0) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = item.shadowColor;\n }\n\n ctx.translate(xPos + item.offsetX, lineHeight * multiplier + item.offsetY);\n ctx.rotate(item.rotate * Math.PI / 180);\n // first draw each line with shadow\n textLines.forEach((text, index) => ctx.fillText(text, 0, index * lineHeight));\n // since shadows of multiline text may be drawn over letters of neighbour lines\n // (when shadow blur is big enough), re-draw text without shadows.\n ctx.shadowBlur = 0;\n textLines.forEach((text, index) => ctx.fillText(text, 0, index * lineHeight));\n if (item.borderWidth > 0) {\n ctx.lineWidth = item.borderWidth;\n textLines.forEach((text, index) => ctx.strokeText(text, 0, index * lineHeight));\n }\n\n ctx.restore();\n });\n};\n"],"names":["$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","$7a2aca835bb05064$export$c37129e465f64ef0","navigator","canShare","id","exports","init","module","call","err","Error","code","register","parcelRegister","Object","defineProperty","get","$ef7689007096c8a0$export$6503ec6e8aabbaf","set","v","enumerable","configurable","$ef7689007096c8a0$var$mapping","Map","baseUrl","manifest","i","length","path","URL","url","toString","JSON","parse","$cd62c5572235e737$export$30b344bef3e55b67","$cd62c5572235e737$var$t","$cd62c5572235e737$var$e","document","createElement","innerHTML","HTMLElement","t","e","s","constructor","shadowRoot","attachShadow","mode","delegatesFocus","appendChild","content","cloneNode","querySelector","observedAttributes","attributeChangedCallback","toggleAttribute","disabled","setAttribute","part","contains","toggle","connectedCallback","r","addEventListener","n","disconnectedCallback","removeEventListener","hasAttribute","shareUrl","getAttribute","shareTitle","shareText","shareFiles","Array","isArray","share","title","text","files","dispatchEvent","CustomEvent","bubbles","composed","detail","shareData","name","error","preventDefault","target","nodeName","assignedElements","flatten","find","prototype","hasOwnProperty","defineCustomElement","customElements","define","$dced0d224c6d876e$export$cc30a98fe3890794","$dced0d224c6d876e$var$t","Number","isNaN","Math","min","max","$dced0d224c6d876e$var$e","$dced0d224c6d876e$var$i","$dced0d224c6d876e$var$o","o","l","getSupportedConstraints","isConnected","getTrackCapabilities","getTrackSettings","u","includes","facingMode","stopVideoStream","startVideoStream","cameraResolution","trim","split","map","width","height","pan","h","tilt","zoom","d","getElementById","c","m","p","g","b","f","isSupported","message","autoPlay","noImage","loading","calculateFileSize","capture","play","then","video","catch","finally","removeAttribute","from","childNodes","forEach","remove","getVideoTracks","applyConstraints","advanced","ideal","audio","mediaDevices","getUserMedia","srcObject","hidden","stop","getContext","videoWidth","videoHeight","drawImage","toDataURL","Image","src","dataURI","fetch","blob","size","getCapabilities","getSettings","$d9c5053bade2d3f8$export$32589115725b904b","$d9c5053bade2d3f8$var$e","open","showModal","body","style","overflowY","element","close","noHeader","classList","noAnimations","noCloseButton","clearTimeout","staticBackdrop","fullscreen","add","setTimeout","defaultPrevented","currentTarget","assignedNodes","cancelable","reason","show","hide","$9351176e8d763a78$export$6ccd1735166caad9","$9351176e8d763a78$var$e","$9351176e8d763a78$var$t","$9351176e8d763a78$var$o","lastIndexOf","type","pop","toLowerCase","value","writable","$9351176e8d763a78$var$i","webkitRelativePath","$9351176e8d763a78$var$r","Promise","readEntries","$9351176e8d763a78$var$a","push","$9351176e8d763a78$var$n","file","fullPath","$9351176e8d763a78$var$s","kind","getAsEntry","webkitGetAsEntry","shift","isFile","indexOf","isDirectory","createReader","$9351176e8d763a78$var$d","$9351176e8d763a78$var$l","dataTransfer","items","$9351176e8d763a78$var$p","$9351176e8d763a78$var$c","$9351176e8d763a78$var$h","$9351176e8d763a78$var$u","accept","multiple","noKeyboard","autoFocus","focus","maxFiles","floor","abs","maxSize","minSize","noClick","noDrag","noStyle","Event","dropEffect","click","key","errors","Set","filter","Boolean","replace","charAt","test","acceptedFiles","rejectedFiles","defaultValue","openFileDialog","$4af3d380d1884504$export$30a014203d0d7e4f","array","indexes","TypeError","_","$17004b28c97c1306$export$e2a22331486dcca0","prefix","suffix","randomString","random","substring","$65136e012e05e2d7$export$63e7bed68b07a85c","$5c8573fd76c057a5$exports","$2db6b38fbc5d48da$exports","$a0b1873abc1b077b$exports","$df7c7f72fd04e02a$exports","$e4c2039736f96f5d$exports","$fbff28e47a938944$exports","$d8f4a375a42d32f4$exports","$7cfbda315cbb4209$exports","$6379185b16d8409f$exports","$454f2b111c8d0078$exports","$c05fcaeb63dbd733$exports","$56b863c8b6be7003$export$6874249d87f2602a","label","weight","$56b863c8b6be7003$export$59eceaef0c7797b2","options","font","FontFace","load","fonts","console","$0374350c629f125f$export$6539e087749cf9d3","res","mimeType","join","File","filename","$3969451ff60cb8d5$var$errorsContainer","$3969451ff60cb8d5$var$hideError","evt","removeChild","parentNode","$3969451ff60cb8d5$export$af04143326425dbd","types","template","div","className","$224fa2388dce65c4$export$293a4b86a6fe2398","index","data","inputTemplate","fillColor","shadowColor","_isSettingsOpen","fontSize","shadowBlur","borderWidth","offsetY","offsetX","rotate","fragment","createDocumentFragment","textAlign","checked","allCaps","$64ef5d4149d7e6a5$export$e653a2de0f3a8b89","image","canvas","ctx","textOptions","clearRect","fillStyle","fillRect","item","save","fontWeight","strokeStyle","lineHeight","measureText","xPos","textLines","toUpperCase","shadowOffsetX","shadowOffsetY","translate","PI","fillText","lineWidth","strokeText","restore","$85a5f86b715fe7db$var$videoModal","$85a5f86b715fe7db$var$downloadModal","$85a5f86b715fe7db$var$canvas","$85a5f86b715fe7db$var$dropzoneEl","$85a5f86b715fe7db$var$instructionsEl","$85a5f86b715fe7db$var$ctx","$85a5f86b715fe7db$var$imageUploadMethodSelect","$85a5f86b715fe7db$var$fileSelectBtn","$85a5f86b715fe7db$var$imageUrlForm","$85a5f86b715fe7db$var$addTextboxBtn","$85a5f86b715fe7db$var$inputsContainer","$85a5f86b715fe7db$var$generateMemeBtn","$85a5f86b715fe7db$var$openVideoModalBtn","$85a5f86b715fe7db$var$downloadMemeBtn","$85a5f86b715fe7db$var$downloadMemePreview","$85a5f86b715fe7db$var$webShareComponent","$85a5f86b715fe7db$var$galleryEl","$85a5f86b715fe7db$var$gallerySearchEl","$85a5f86b715fe7db$var$galleryNoResultsEl","$85a5f86b715fe7db$var$solidColorForm","$85a5f86b715fe7db$var$uploadMethodEls","querySelectorAll","$85a5f86b715fe7db$var$selectedImage","$85a5f86b715fe7db$var$reqAnimFrame","$85a5f86b715fe7db$var$defaultTextOptions","$85a5f86b715fe7db$var$textOptions","$85a5f86b715fe7db$var$generateMeme","dataUrl","downloadLink","download","href","requestAnimationFrame","$85a5f86b715fe7db$var$onImageLoaded","MAX_WIDTH","MAX_HEIGHT","$85a5f86b715fe7db$var$handleFileSelect","reader","FileReader","result","readAsDataURL","$85a5f86b715fe7db$var$handleTextPropChange","prop","$85a5f86b715fe7db$var$handleImageUploadFromURL","form","submitButton","imageUrl","$85a5f86b715fe7db$var$moveText","offsetDir","sign","textBoxSection","offsetYInput","offsetXInput","$85a5f86b715fe7db$var$handleGalleryClick","button","closest","img","alt","newTextBox","matches","textBoxIndex","textBoxEls","el","settingsEl","confirm","isOffsetYButton","isOffsetXButton","cancelAnimationFrame","query","galleryItems","capturePhotoComponent","$442be162a818aed4$export$c37129e465f64ef0","isWebShareSupported","$e179325634270afd$export$30b344bef3e55b67","$e179325634270afd$var$styles","$e179325634270afd$var$template","buttonSlot","buttonEl","getButton","oldValue","newValue","upgradeProperty","handleSlotChange","handleClick","instance","elementName","WebShare","$c290816263f90981$export$cc30a98fe3890794","$02ad8beec419df62$export$7d15b64cf5a3a4c4","lower","upper","$c290816263f90981$var$COMPONENT_NAME","$c290816263f90981$var$styles","$c290816263f90981$var$template","supportedConstraints","stream","canvasElement","outputElement","videoElement","captureButtonSlot","captureButton","facingModeButtonSlot","facingModeButton","trackCapabilities","trackSettings","emptyOutputElement","isValidFacingMode","x","widthInAllowedRange","heightInAllowedRange","panInAllowedRange","applyPTZ","tiltInAllowedRange","zoomInAllowedRange","getCaptureButton","getFacingModeButton","onVideoLoadedMetaData","onCaptureButtonSlotChange","onCapturePhotoButtonClick","onFacingModeButtonSlotChange","onFacingModeButtonClick","node","constraintName","constraintValue","track","constraints","eventDetail","CapturePhoto","$180b6dcf923bafc7$export$32589115725b904b","$180b6dcf923bafc7$var$template","dialogEl","footerSlotEl","pulseAnimationTimeout","headerEl","closeBtnEl","handleDialogClick","handleDialogClose","handleDialogCancel","handleCloseButtonClick","handleFooterSlotChange","applyPulseEffectOnDialog","requestCloseEvent","createRequestCloseEvent","footerEl","footerSlotNodes","hasFooterSlotNodes","ModalElement","$862aa3736b0514bc$export$6ccd1735166caad9","$f31161edf38949e9$var$COMMON_MIME_TYPES","$f31161edf38949e9$var$FILES_TO_IGNORE","$f31161edf38949e9$var$toFileWithMimeType","hasExtension","extension","$f31161edf38949e9$var$toFileWithPath","fileWithMimeType","$f31161edf38949e9$var$readEntriesPromise","directoryReader","resolve","reject","$f31161edf38949e9$var$readAllDirectoryEntries","entries","$f31161edf38949e9$var$getFileFromFileEntry","fileEntry","$f31161edf38949e9$var$getFilesFromDataTransferItemList","dataTransferItemList","queue","entry","$f31161edf38949e9$var$getFilesFromFileList","fileList","$f31161edf38949e9$export$6d52664cd15c442","$862aa3736b0514bc$var$COMPONENT_NAME","$862aa3736b0514bc$var$TOO_MANY_FILES","$862aa3736b0514bc$var$template","$862aa3736b0514bc$var$styles","fileInput","dropzoneEl","handleFileInputChange","handleDragEnter","handleDragOver","handleDragLeave","handleDrop","handleKeyUp","num","Infinity","handleFilesSelect","filesLength","fileHasValidType","acceptedTypeSpecifiers","acceptedMimeTypesList","fileMimeType","baseMimeType","validType","fileExceedsMaxSize","fileIsSmallerThanMinSize","FilesDropzone"],"version":3,"file":"index.a2b8f4c4.js.map"} \ No newline at end of file diff --git a/docs/index.4f090451.js b/docs/index.ac06585e.js similarity index 99% rename from docs/index.4f090451.js rename to docs/index.ac06585e.js index 6d49c9c..a5ca5a0 100644 --- a/docs/index.4f090451.js +++ b/docs/index.ac06585e.js @@ -1,4 +1,4 @@ -!function(){function t(t,e,o,i){Object.defineProperty(t,e,{get:o,set:i,enumerable:!0,configurable:!0})}function e(t){return t&&t.__esModule?t.default:t}var o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},i={},a={},n=o.parcelRequire5078;null==n&&((n=function(t){if(t in i)return i[t].exports;if(t in a){var e=a[t];delete a[t];var o={id:t,exports:{}};return i[t]=o,e.call(o.exports,o,o.exports),o.exports}var n=Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}).register=function(t,e){a[t]=e},o.parcelRequire5078=n);var s=n.register;function r(t){return null!==t&&"object"==typeof t?"share"in navigator&&"canShare"in navigator&&navigator.canShare(t):"share"in navigator}s("iE7OH",function(e,o){t(e.exports,"register",function(){return i},function(t){return i=t});var i,a=new Map;i=function(t,e){for(var o=0;o `,i=document.createDocumentFragment(),a=document.createElement("div");return a.className="bg-light border shadow-sm mb-3 rounded",a.setAttribute("data-section","textBox"),a.setAttribute("data-index",t),a.innerHTML=o,a.querySelector('[data-input="font"]').value=e.font,a.querySelector('[data-input="textAlign"]').value=e.textAlign,a.querySelector('[data-input="allCaps"]').checked=e.allCaps,i.appendChild(a)},tt=(t,e,o,i=[])=>{null!=t&&(o.clearRect(0,0,e.width,e.height),"string"==typeof t?(o.fillStyle=t,o.fillRect(0,0,e.width,e.height)):o.drawImage(t,0,0,e.width,e.height),i.forEach(function(t,i){o.save(),o.font=`${t.fontWeight} ${t.fontSize}px ${t.font}`,o.fillStyle=t.fillColor,o.textAlign=t.textAlign,o.strokeStyle=t.shadowColor;let a=o.measureText("M").width+t.fontSize/2,n=e.width/2,s=t.shadowBlur,r=(!0===t.allCaps?t.text.toUpperCase():t.text).split("\n");0!==s&&(o.shadowOffsetX=0,o.shadowOffsetY=0,o.shadowBlur=s,o.shadowColor=t.shadowColor),o.translate(n+t.offsetX,a*(i+1)+t.offsetY),o.rotate(t.rotate*Math.PI/180),r.forEach((t,e)=>o.fillText(t,0,e*a)),o.shadowBlur=0,r.forEach((t,e)=>o.fillText(t,0,e*a)),t.borderWidth>0&&(o.lineWidth=t.borderWidth,r.forEach((t,e)=>o.strokeText(t,0,e*a))),o.restore()}))},te=document.getElementById("videoModal"),to=document.getElementById("downloadModal"),ti=document.getElementById("canvas"),ta=document.querySelector("files-dropzone"),tn=document.getElementById("instructions"),ts=ti.getContext("2d"),tr=document.getElementById("imageUploadMethodSelect"),tl=document.getElementById("fileSelectBtn"),td=document.getElementById("imageUrlForm"),tc=document.getElementById("addTextboxBtn"),th=document.getElementById("inputsContainer"),tu=document.getElementById("generateMemeBtn"),tp=document.getElementById("openVideoModalBtn"),tm=document.getElementById("downloadMemeBtn"),tb=document.getElementById("downloadMemePreview"),tg=document.querySelector("web-share"),tf=document.getElementById("gallery"),tv=document.getElementById("gallerySearch"),ty=tf.querySelector(".gallery__no-results"),tw=document.getElementById("solidColorForm"),tE=document.querySelectorAll(".upload-method"),tx=null,tA=null,tS={_isSettingsOpen:!1,text:"",fillColor:"#ffffff",shadowColor:"#000000",font:"Pressuru",fontSize:40,fontWeight:"normal",textAlign:"center",shadowBlur:3,borderWidth:1,offsetY:0,offsetX:0,rotate:0,allCaps:!0},tk=[{...tS}],tC=async()=>{let t=ti.toDataURL("image/png"),e=t.replace("image/png","image/octet-stream");if(tm.download=`${N("meme")}.png`,tm.href=e,tb.width=ti.width,tb.height=ti.height,tb.src=e,r())try{let e=await J({url:t,filename:`${N("meme")}.png`,mimeType:"image/png"}).catch(t=>Q(t.message,"danger"));e&&r({files:[e]})&&(tg.shareFiles=[e],tg.hidden=!1)}catch(t){console.error(t)}window.requestAnimationFrame(()=>{to.open=!0})},tz=t=>{let e=t.target.width,o=t.target.height;e>o?e>4e3&&(o*=4e3/e,e=4e3):o>3e3&&(e*=3e3/o,o=3e3),ti.width=e,ti.height=o,tt(tx=t.target,ti,ts,tk),tu.disabled=!1,ti.hidden=!1,tn.hidden=!0},tL=t=>{if(!t)return;let e=new Image,o=new FileReader;o.addEventListener("load",function(t){let o=t.target.result;e.addEventListener("load",tz),e.src=o}),o.readAsDataURL(t)},t_=(t,e,o)=>{"checkbox"===t.type?tk[e][o]=t.checked:"number"===t.type?tk[e][o]=Number(t.value):tk[e][o]=t.value,tt(tx,ti,ts,tk)},tR=async t=>{t.preventDefault();let e=t.target,o=e.querySelector('button[type="submit"]'),i=e.imageUrl.value;if(i.trim()){o.disabled=!0,o.querySelector(".spinner").hidden=!1,o.querySelector(".label").hidden=!0;try{let t=await J({url:i}).catch(t=>Q(t.message,"danger"));t&&tL(t)}catch(t){Q(`Failed to load image from "${i}".`,"danger")}finally{o.disabled=!1,o.querySelector(".spinner").hidden=!0,o.querySelector(".label").hidden=!1}}},tB=(t,e,o)=>()=>{let i=document.querySelectorAll('[data-section="textBox"]')[o],a=i.querySelector('[data-input="offsetY"]'),n=i.querySelector('[data-input="offsetX"]');"offsetY"===t&&("-"===e&&(tk[o].offsetY-=1),"+"===e&&(tk[o].offsetY+=1),a.value=tk[o].offsetY),"offsetX"===t&&("-"===e&&(tk[o].offsetX-=1),"+"===e&&(tk[o].offsetX+=1),n.value=tk[o].offsetX),tt(tx,ti,ts,tk),tA=requestAnimationFrame(tB(t,e,o))},tT=async t=>{let e=t.target.closest("button");if(!e)return;let o=e.querySelector("img");try{let t=await J({url:o.src}).catch(t=>Q(t.message,"danger"));t&&tL(t)}catch(t){Q(`Failed to load image: "${o.alt}".`,"danger")}};tl.addEventListener("click",()=>{"function"==typeof ta.openFileDialog&&ta.openFileDialog()}),tp.addEventListener("click",()=>{te.open=!0}),tc.addEventListener("click",()=>{let t=Z(tk.length,tS);tk.push({...tS}),th.appendChild(t),t.querySelector('[data-input="text"]').focus()}),tu.addEventListener("click",tC),tm.addEventListener("click",()=>to.open=!1),td.addEventListener("submit",tR),ta.addEventListener("files-dropzone-drop-accepted",t=>{let[e]=t.detail.acceptedFiles;e&&tL(e)}),th.addEventListener("input",t=>{let e;let o=t.target,i=Number(o.closest('[data-section="textBox"]').getAttribute("data-index"));o.matches('[data-input="text"]')?e="text":o.matches('[data-input="fillColor"]')?e="fillColor":o.matches('[data-input="shadowColor"]')?e="shadowColor":o.matches('[data-input="font"]')?e="font":o.matches('[data-input="fontSize"]')?e="fontSize":o.matches('[data-input="fontWeight"]')?e="fontWeight":o.matches('[data-input="textAlign"]')?e="textAlign":o.matches('[data-input="shadowBlur"]')?e="shadowBlur":o.matches('[data-input="offsetY"]')?e="offsetY":o.matches('[data-input="offsetX"]')?e="offsetX":o.matches('[data-input="rotate"]')?e="rotate":o.matches('[data-input="borderWidth"]')&&(e="borderWidth"),e&&t_(o,i,e)}),th.addEventListener("change",t=>{let e;let o=t.target,i=Number(o.closest('[data-section="textBox"]').getAttribute("data-index"));o.matches('[data-input="allCaps"]')&&(e="allCaps"),e&&t_(o,i,e)}),th.addEventListener("click",t=>{let e=t.target;if(e.matches('[data-button="settings"]')){let t=e.closest('[data-section="textBox"]').getAttribute("data-index");document.querySelectorAll('[data-section="textBox"]').forEach((e,o)=>{let i=e.querySelector('[data-section="settings"]');e.getAttribute("data-index")===t?(i.hidden=!i.hidden,tk[o]._isSettingsOpen=!tk[o]._isSettingsOpen):(i.hidden=!0,tk[o]._isSettingsOpen=!1)})}if(e.matches('[data-button="delete-text-box"]')){let t=Number(e.closest('[data-section="textBox"]').getAttribute("data-index")),o=!0;tk[t].text.trim()&&(o=window.confirm("Are you sure you want to remove this text box?")),o&&(tk=F(tk,t),th.querySelectorAll('[data-section="textBox"]').forEach(t=>t.remove()),tk.forEach((t,e)=>th.appendChild(Z(e,t))),tt(tx,ti,ts,tk))}}),th.addEventListener("pointerdown",t=>{let e=t.target;if(!e.closest('[data-section="textBox"]'))return;let o=Number(e.closest('[data-section="textBox"]').getAttribute("data-index")),i=e.matches('[data-move="offsetY"]'),a=e.matches('[data-move="offsetX"]');if(!i&&!a)return;let n=e.getAttribute("data-move"),s=e.getAttribute("data-sign");tA=requestAnimationFrame(tB(n,s,o))}),th.addEventListener("pointerup",t=>{let e=t.target,o=e.matches('[data-move="offsetY"]'),i=e.matches('[data-move="offsetX"]');(o||i)&&(cancelAnimationFrame(tA),tA=null)}),th.addEventListener("pointerout",t=>{let e=t.target,o=e.matches('[data-move="offsetY"]'),i=e.matches('[data-move="offsetX"]');(o||i)&&tA&&(cancelAnimationFrame(tA),tA=null)}),tr.addEventListener("change",t=>{tE.forEach(e=>e.hidden=e.id!==t.target.value)}),tf.addEventListener("click",tT),tv.addEventListener("input",t=>{let e=t.target.value.toLowerCase().trim();tf.querySelectorAll("button").forEach(t=>{let o=(t.querySelector("img").getAttribute("alt")||"").toLowerCase();t.hidden=!o.includes(e)}),ty.hidden=!!tf.querySelector("button:not([hidden])")}),tw.addEventListener("input",t=>{t.target===tw.canvasColor&&(tx=t.target.value),"string"==typeof tx&&(ti.width=Number(tw.canvasWidth.value)||600,ti.height=Number(tw.canvasHeight.value)||400,tt(tx,ti,ts,tk),tu.disabled=!1,ti.hidden=!1,tn.hidden=!0)}),document.addEventListener("web-share:error",()=>{to.open=!1,Q("There was an error while trying to share your meme.","danger")}),document.addEventListener("capture-photo:error",t=>{console.error(t.detail.error),Q(t.detail.error.message,"danger")}),document.addEventListener("capture-photo:success",t=>{te.open=!1;let e=new Image;e.addEventListener("load",tz),e.src=t.detail.dataURI}),document.addEventListener("me-open",t=>{if("videoModal"===t.target.id){let t=te.querySelector("capture-photo");t&&"function"==typeof t.startVideoStream&&t.startVideoStream()}}),document.addEventListener("me-close",t=>{if("videoModal"===t.target.id){let t=te.querySelector("capture-photo");t&&"function"==typeof t.stopVideoStream&&t.stopVideoStream()}}),tf.querySelectorAll("button > img")?.forEach(t=>{t.setAttribute("title",t.getAttribute("alt"))}),tk.forEach((t,e)=>{th.appendChild(Z(e,t))}),ta.accept=$,Y.forEach(({name:t,path:e,style:o,weight:i})=>{X(t,e,{style:o,weight:i})})}(); -//# sourceMappingURL=index.4f090451.js.map +//# sourceMappingURL=index.ac06585e.js.map diff --git a/docs/index.4f090451.js.map b/docs/index.ac06585e.js.map similarity index 99% rename from docs/index.4f090451.js.map rename to docs/index.ac06585e.js.map index 78fdcd0..97f6401 100644 --- a/docs/index.4f090451.js.map +++ b/docs/index.ac06585e.js.map @@ -1 +1 @@ -{"mappings":"C,A,W,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,S,E,C,E,O,G,E,U,C,E,O,C,C,C,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,I,E,E,Q,COQA,SAAS,EAAoB,CAAO,EAAA,OAClB,OAAZ,GAAoB,UAAA,OAAO,EACtB,UAAW,WAAa,aAAc,WAAa,UAAU,QAAA,CAAS,GAGxE,UAAW,SACpB,C,E,Q,S,C,C,C,E,E,E,O,C,W,W,O,C,E,S,C,E,O,E,C,GNZA,IAgBA,EAhBI,EAAU,IAAI,IAgBlB,EAfA,SAAkB,CAAO,CAAE,CAAQ,EACjC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,MAAM,CAAG,EAAG,GAAK,EAC5C,EAAQ,GAAG,CAAC,CAAQ,CAAC,EAAE,CAAE,CACvB,QAAS,EACT,KAAM,CAAQ,CAAC,EAAI,EAAE,AACvB,EAEJ,C,G,E,Q,S,C,C,C,E,E,E,O,C,e,W,O,C,E,S,C,E,O,E,C,GCRA,IAkCA,EAlCI,EAAY,CAAC,EAkCjB,EAjCA,SAA4B,CAAE,EAC5B,IAAI,EAAQ,CAAS,CAAC,EAAG,CAKzB,OAJK,IACH,EAAQ,AAKZ,WACE,GAAI,CACF,MAAM,AAAI,OACZ,CAAE,MAAO,EAAK,CACZ,IAAI,EAAW,AAAA,CAAA,GAAK,EAAI,KAAI,AAAJ,EAAO,KAAK,CAAC,oEACrC,GAAI,EAGF,MAMI,AAAA,CAAA,GANc,CAAO,CAAC,EAAE,AAMnB,EAAK,OAAO,CAAC,0EAA2E,MAAQ,GAJ7G,CACA,MAAO,GACT,IAhBI,CAAS,CAAC,EAAG,CAAG,GAEX,CACT,C,GCVA,AAAA,EAAA,SAAA,QAAA,CAA8C,AAAA,EAAA,SAAA,YAAA,CAA6C,SAAS,KAAK,KAAK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","sources":["","node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js","node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js","node_modules/@parcel/runtime-js/lib/runtime-9c947c219454732e.js","src/js/index.js","node_modules/@georapbox/web-share-element/dist/is-web-share-supported.js","node_modules/@georapbox/web-share-element/dist/","node_modules/@georapbox/web-share-element/dist/src/is-web-share-supported.js","node_modules/@georapbox/web-share-element/dist/web-share-defined.js","node_modules/@georapbox/web-share-element/dist/src/web-share-defined.js","node_modules/@georapbox/web-share-element/dist/src/web-share.js","node_modules/@georapbox/capture-photo-element/dist/capture-photo-defined.js","node_modules/@georapbox/capture-photo-element/dist/","node_modules/@georapbox/capture-photo-element/dist/src/capture-photo-defined.js","node_modules/@georapbox/capture-photo-element/dist/src/capture-photo.js","node_modules/@georapbox/capture-photo-element/dist/src/utils/clamp.js","node_modules/@georapbox/modal-element/dist/modal-element-defined.js","node_modules/@georapbox/modal-element/dist/","node_modules/@georapbox/modal-element/dist/src/modal-element-defined.js","node_modules/@georapbox/modal-element/dist/src/modal-element.js","node_modules/@georapbox/files-dropzone-element/dist/files-dropzone-defined.js","node_modules/@georapbox/files-dropzone-element/dist/","node_modules/@georapbox/files-dropzone-element/dist/src/files-dropzone-defined.js","node_modules/@georapbox/files-dropzone-element/dist/src/files-dropzone.js","node_modules/@georapbox/files-dropzone-element/dist/src/utils/is-valid-file.js","node_modules/@georapbox/files-dropzone-element/dist/src/utils/files-selector.js","src/js/utils/array-remove.js","src/js/utils/uid.js","src/js/constants.js","src/js/custom-fonts.js","node_modules/@parcel/runtime-js/lib/runtime-2ee5618ea0a4ff82.js","node_modules/@parcel/runtime-js/lib/runtime-d90b112f208fab9c.js","node_modules/@parcel/runtime-js/lib/runtime-8863d03da459b1d2.js","node_modules/@parcel/runtime-js/lib/runtime-7530982a5c34e2a8.js","node_modules/@parcel/runtime-js/lib/runtime-f6db6103a1a0ae20.js","node_modules/@parcel/runtime-js/lib/runtime-d668b18f4657778e.js","node_modules/@parcel/runtime-js/lib/runtime-9d4df09940169c58.js","node_modules/@parcel/runtime-js/lib/runtime-df220659d471ec24.js","node_modules/@parcel/runtime-js/lib/runtime-935f2ad29b2ba54a.js","node_modules/@parcel/runtime-js/lib/runtime-23720a89f55d1035.js","node_modules/@parcel/runtime-js/lib/runtime-180dcf6211e1516d.js","src/js/file-from-url.js","src/js/toast-alert.js","src/js/create-text-box.js","src/js/draw-canvas.js"],"sourcesContent":["(function () {\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequire5078\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequire5078\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"iE7OH\", function(module, exports) {\n\n$parcel$export(module.exports, \"register\", function () { return $0380ce8f1f064ccc$export$6503ec6e8aabbaf; }, function (v) { return $0380ce8f1f064ccc$export$6503ec6e8aabbaf = v; });\nvar $0380ce8f1f064ccc$export$6503ec6e8aabbaf;\nvar $0380ce8f1f064ccc$export$f7ad0328861e2f03;\n\"use strict\";\nvar $0380ce8f1f064ccc$var$mapping = new Map();\nfunction $0380ce8f1f064ccc$var$register(baseUrl, manifest) {\n for(var i = 0; i < manifest.length - 1; i += 2)$0380ce8f1f064ccc$var$mapping.set(manifest[i], {\n baseUrl: baseUrl,\n path: manifest[i + 1]\n });\n}\nfunction $0380ce8f1f064ccc$var$resolve(id) {\n var resolved = $0380ce8f1f064ccc$var$mapping.get(id);\n if (resolved == null) throw new Error(\"Could not resolve bundle with id \" + id);\n return new URL(resolved.path, resolved.baseUrl).toString();\n}\n$0380ce8f1f064ccc$export$6503ec6e8aabbaf = $0380ce8f1f064ccc$var$register;\n$0380ce8f1f064ccc$export$f7ad0328861e2f03 = $0380ce8f1f064ccc$var$resolve;\n\n});\n\nparcelRegister(\"aNJCr\", function(module, exports) {\n\n$parcel$export(module.exports, \"getBundleURL\", function () { return $7dd1ddf6834435ca$export$bdfd709ae4826697; }, function (v) { return $7dd1ddf6834435ca$export$bdfd709ae4826697 = v; });\nvar $7dd1ddf6834435ca$export$bdfd709ae4826697;\nvar $7dd1ddf6834435ca$export$c9e73fbda7da57b6;\nvar $7dd1ddf6834435ca$export$5a759dc7a1cfb72a;\n\"use strict\";\nvar $7dd1ddf6834435ca$var$bundleURL = {};\nfunction $7dd1ddf6834435ca$var$getBundleURLCached(id) {\n var value = $7dd1ddf6834435ca$var$bundleURL[id];\n if (!value) {\n value = $7dd1ddf6834435ca$var$getBundleURL();\n $7dd1ddf6834435ca$var$bundleURL[id] = value;\n }\n return value;\n}\nfunction $7dd1ddf6834435ca$var$getBundleURL() {\n try {\n throw new Error();\n } catch (err) {\n var matches = (\"\" + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g);\n if (matches) // The first two stack frames will be this function and getBundleURLCached.\n // Use the 3rd one, which will be a runtime in the original bundle.\n return $7dd1ddf6834435ca$var$getBaseURL(matches[2]);\n }\n return \"/\";\n}\nfunction $7dd1ddf6834435ca$var$getBaseURL(url) {\n return (\"\" + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/.+)\\/[^/]+$/, \"$1\") + \"/\";\n}\n// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported.\nfunction $7dd1ddf6834435ca$var$getOrigin(url) {\n var matches = (\"\" + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^/]+/);\n if (!matches) throw new Error(\"Origin not found\");\n return matches[0];\n}\n$7dd1ddf6834435ca$export$bdfd709ae4826697 = $7dd1ddf6834435ca$var$getBundleURLCached;\n$7dd1ddf6834435ca$export$c9e73fbda7da57b6 = $7dd1ddf6834435ca$var$getBaseURL;\n$7dd1ddf6834435ca$export$5a759dc7a1cfb72a = $7dd1ddf6834435ca$var$getOrigin;\n\n});\n\nvar $700227d4c71b456e$exports = {};\n\n\n(parcelRequire(\"iE7OH\")).register((parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\"), JSON.parse('[\"8tAhj\",\"index.4f090451.js\",\"cIoLp\",\"Pressuru.684952ea.ttf\",\"a9OJN\",\"Oswald-Regular.89ec7d89.ttf\",\"jOuj0\",\"Oswald-Bold.0f6a7ca6.ttf\",\"ePq3V\",\"Roboto-Regular.ca197847.ttf\",\"9WQUU\",\"Roboto-Bold.fdb9b54a.ttf\",\"hIywO\",\"RobotoCondensed-Regular.d585f5c7.ttf\",\"ab1rw\",\"RobotoCondensed-Bold.e1f96d4b.ttf\",\"j4ruO\",\"CourierPrime-Regular.3a25a501.ttf\",\"3nnD2\",\"CourierPrime-Bold.3d6bf689.ttf\",\"8fsWK\",\"OpenSans-Regular.edf9e01b.ttf\",\"5JXG6\",\"OpenSans-Bold.8fceb72b.ttf\",\"9FH7D\",\"index.4e55d6a2.css\"]'));\n\nfunction $94933cc6427541bd$export$c37129e465f64ef0(a) {\n return null !== a && \"object\" == typeof a ? \"share\" in navigator && \"canShare\" in navigator && navigator.canShare(a) : \"share\" in navigator;\n}\n\n\nObject.defineProperty({}, \"WebShare\", {\n get: function() {\n return $4f74a8126e204146$export$30b344bef3e55b67;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $4f74a8126e204146$var$t = `\n :host {\n display: inline-block;\n }\n`, $4f74a8126e204146$var$e = document.createElement(\"template\");\n$4f74a8126e204146$var$e.innerHTML = `\n \n \n`;\nclass $4f74a8126e204146$export$30b344bef3e55b67 extends HTMLElement {\n #t;\n #e;\n #s = [];\n constructor(){\n super(), this.shadowRoot || this.attachShadow({\n mode: \"open\",\n delegatesFocus: !0\n }).appendChild($4f74a8126e204146$var$e.content.cloneNode(!0)), this.#t = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null, this.#e = this.#i();\n }\n static get observedAttributes() {\n return [\n \"disabled\"\n ];\n }\n attributeChangedCallback(t, e, s) {\n \"disabled\" === t && e !== s && this.#e && (this.#e.toggleAttribute(\"disabled\", this.disabled), this.#e.setAttribute(\"aria-disabled\", this.disabled.toString()), this.#e.part && this.#e.part.contains(\"button\") && this.#e.part.toggle(\"button--disabled\", this.disabled));\n }\n connectedCallback() {\n this.#r(\"shareUrl\"), this.#r(\"shareTitle\"), this.#r(\"shareText\"), this.#r(\"shareFiles\"), this.#r(\"disabled\"), this.#t?.addEventListener(\"slotchange\", this.#a), this.#e?.addEventListener(\"click\", this.#n);\n }\n disconnectedCallback() {\n this.#t?.removeEventListener(\"slotchange\", this.#a), this.#e?.removeEventListener(\"click\", this.#n);\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(t) {\n this.toggleAttribute(\"disabled\", !!t);\n }\n get shareUrl() {\n return this.getAttribute(\"share-url\") || \"\";\n }\n set shareUrl(t) {\n this.setAttribute(\"share-url\", t);\n }\n get shareTitle() {\n return this.getAttribute(\"share-title\") || \"\";\n }\n set shareTitle(t) {\n this.setAttribute(\"share-title\", t);\n }\n get shareText() {\n return this.getAttribute(\"share-text\") || \"\";\n }\n set shareText(t) {\n this.setAttribute(\"share-text\", t);\n }\n get shareFiles() {\n return this.#s;\n }\n set shareFiles(t) {\n Array.isArray(t) && t.length > 0 && (this.#s = t);\n }\n async share() {\n if (!this.disabled) try {\n let t = {};\n this.shareUrl && (t.url = this.shareUrl), this.shareTitle && (t.title = this.shareTitle), this.shareText && (t.text = this.shareText), Array.isArray(this.shareFiles) && this.shareFiles.length > 0 && navigator.canShare && navigator.canShare({\n files: this.shareFiles\n }) && (t.files = this.shareFiles), await navigator.share(t), this.dispatchEvent(new CustomEvent(\"web-share:success\", {\n bubbles: !0,\n composed: !0,\n detail: {\n shareData: t\n }\n }));\n } catch (t) {\n if (t instanceof Error && \"AbortError\" === t.name) {\n this.dispatchEvent(new CustomEvent(\"web-share:abort\", {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n return;\n }\n this.dispatchEvent(new CustomEvent(\"web-share:error\", {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }\n }\n #n = (t)=>{\n t.preventDefault(), this.disabled || this.share();\n };\n #a = (t)=>{\n t.target && \"button\" === t.target.name && (this.#e?.removeEventListener(\"click\", this.#n), this.#e = this.#i(), this.#e && (this.#e.addEventListener(\"click\", this.#n), \"BUTTON\" === this.#e.nodeName || this.#e.hasAttribute(\"role\") || this.#e.setAttribute(\"role\", \"button\")));\n };\n #i() {\n return this.#t && this.#t.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"button\" === t.getAttribute(\"slot\")) || null;\n }\n #r(t) {\n if (Object.prototype.hasOwnProperty.call(this, t)) {\n let e = this[t];\n delete this[t], this[t] = e;\n }\n }\n static defineCustomElement(t = \"web-share\") {\n \"undefined\" == typeof window || window.customElements.get(t) || window.customElements.define(t, $4f74a8126e204146$export$30b344bef3e55b67);\n }\n}\n$4f74a8126e204146$export$30b344bef3e55b67.defineCustomElement();\n\n\nObject.defineProperty({}, \"CapturePhoto\", {\n get: function() {\n return $636b0cf1ed0b9f88$export$cc30a98fe3890794;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $636b0cf1ed0b9f88$var$t = (t, e, i)=>(Number.isNaN(e) && (e = 0), Number.isNaN(i) && (i = 0), Math.min(Math.max(t, Math.min(e, i)), Math.max(e, i))), $636b0cf1ed0b9f88$var$e = \"capture-photo\", $636b0cf1ed0b9f88$var$i = `\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`, $636b0cf1ed0b9f88$var$o = document.createElement(\"template\");\n$636b0cf1ed0b9f88$var$o.innerHTML = `\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\nclass $636b0cf1ed0b9f88$export$cc30a98fe3890794 extends HTMLElement {\n #t = {};\n #e = null;\n #i = null;\n #o = null;\n #n = null;\n #a = null;\n #s = null;\n #r = null;\n #l = null;\n constructor(){\n super(), this.#t = this.getSupportedConstraints(), this.shadowRoot || this.attachShadow({\n mode: \"open\"\n }).appendChild($636b0cf1ed0b9f88$var$o.content.cloneNode(!0));\n }\n static get observedAttributes() {\n return [\n \"no-image\",\n \"facing-mode\",\n \"camera-resolution\",\n \"pan\",\n \"tilt\",\n \"zoom\"\n ];\n }\n attributeChangedCallback(t, e, i) {\n if (!this.isConnected) return;\n let o = this.getTrackCapabilities(), n = this.getTrackSettings();\n if (\"no-image\" === t && e !== i && this.#u(), \"facing-mode\" === t && e !== i && \"facingMode\" in this.#t) {\n let t = [\n \"user\",\n \"environment\"\n ].includes(this.facingMode || \"\");\n \"facingMode\" in n && t && (this.stopVideoStream(), this.startVideoStream());\n }\n if (\"camera-resolution\" === t && e !== i && \"string\" == typeof this.cameraResolution && this.cameraResolution.trim().length > 0) {\n let [t = 0, e = 0] = this.cameraResolution.split(\"x\").map((t)=>Number(t));\n if (t > 0 && e > 0 && \"width\" in o && \"height\" in o) {\n let i = !!(o.width?.min && o.width?.max) && t >= o?.width?.min && t <= o?.width?.max, a = !!(o.height?.min && o.height?.max) && e >= o?.height?.min && e <= o?.height?.max;\n \"width\" in n && \"height\" in n && i && a && (this.stopVideoStream(), this.startVideoStream());\n }\n }\n if (\"pan\" === t && e !== i && \"pan\" in this.#t) {\n let t = !!(\"pan\" in o && o.pan?.min && o.pan?.max) && this.pan >= o.pan.min && this.pan <= o.pan.max;\n \"pan\" in n && \"number\" == typeof this.pan && t && this.#h(\"pan\", this.pan);\n }\n if (\"tilt\" === t && e !== i && \"tilt\" in this.#t) {\n let t = !!(\"tilt\" in o && o.tilt?.min && o.tilt?.max) && this.tilt >= o.tilt.min && this.tilt <= o.tilt.max;\n \"tilt\" in n && \"number\" == typeof this.tilt && t && this.#h(\"tilt\", this.tilt);\n }\n if (\"zoom\" === t && e !== i && \"zoom\" in this.#t) {\n let t = !!(\"zoom\" in o && o.zoom?.min && o.zoom?.max) && this.zoom >= o.zoom.min && this.zoom <= o.zoom.max;\n \"zoom\" in n && \"number\" == typeof this.zoom && t && this.#h(\"zoom\", this.zoom);\n }\n }\n connectedCallback() {\n if (this.#d(\"autpoPlay\"), this.#d(\"noImage\"), this.#d(\"facingMode\"), this.#d(\"cameraResolution\"), this.#d(\"pan\"), this.#d(\"tilt\"), this.#d(\"zoom\"), this.#d(\"calculateFileSize\"), this.#i = this.shadowRoot?.querySelector(\"canvas\") || null, this.#o = this.shadowRoot?.getElementById(\"output\") || null, this.#n = this.shadowRoot?.querySelector(\"video\") || null, this.#a = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null, this.#s = this.#c(), this.#r = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null, this.#l = this.#m(), this.#n?.addEventListener(\"loadedmetadata\", this.#p), this.#a?.addEventListener(\"slotchange\", this.#g), this.#s?.addEventListener(\"click\", this.#b), this.#r?.addEventListener(\"slotchange\", this.#f), this.#l?.addEventListener(\"click\", this.#v), !$636b0cf1ed0b9f88$export$cc30a98fe3890794.isSupported()) return this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: {\n name: \"NotSupportedError\",\n message: \"Not supported\"\n }\n }\n }));\n this.autoPlay && this.startVideoStream();\n }\n disconnectedCallback() {\n this.stopVideoStream(), this.#l?.removeEventListener(\"click\", this.#v), this.#s?.removeEventListener(\"click\", this.#b), this.#n?.removeEventListener(\"canplay\", this.#p), this.#a?.removeEventListener(\"slotchange\", this.#g), this.#r?.removeEventListener(\"slotchange\", this.#f);\n }\n get autoPlay() {\n return this.hasAttribute(\"auto-play\");\n }\n set autoPlay(t) {\n this.toggleAttribute(\"auto-play\", !!t);\n }\n get noImage() {\n return this.hasAttribute(\"no-image\");\n }\n set noImage(t) {\n this.toggleAttribute(\"no-image\", !!t);\n }\n get facingMode() {\n return this.getAttribute(\"facing-mode\") || \"user\";\n }\n set facingMode(t) {\n this.setAttribute(\"facing-mode\", t);\n }\n get cameraResolution() {\n return this.getAttribute(\"camera-resolution\") || \"\";\n }\n set cameraResolution(t) {\n this.setAttribute(\"camera-resolution\", t);\n }\n get pan() {\n return Number(this.getAttribute(\"pan\")) || 0;\n }\n set pan(t) {\n this.setAttribute(\"pan\", null != t ? t.toString() : t);\n }\n get tilt() {\n return Number(this.getAttribute(\"tilt\")) || 0;\n }\n set tilt(t) {\n this.setAttribute(\"tilt\", null != t ? t.toString() : t);\n }\n get zoom() {\n return Number(this.getAttribute(\"zoom\")) || 1;\n }\n set zoom(t) {\n this.setAttribute(\"zoom\", null != t ? t.toString() : t);\n }\n get loading() {\n return this.hasAttribute(\"loading\");\n }\n get calculateFileSize() {\n return this.hasAttribute(\"calculate-file-size\");\n }\n set calculateFileSize(t) {\n this.toggleAttribute(\"calculate-file-size\", !!t);\n }\n #v = (t)=>{\n t.preventDefault(), this.loading || (this.facingMode = \"user\" !== this.facingMode && this.facingMode ? \"user\" : \"environment\");\n };\n #b = (t)=>{\n t.preventDefault(), this.capture();\n };\n #p = (t)=>{\n let i = t.target;\n i.play().then(()=>{\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:video-play`, {\n bubbles: !0,\n composed: !0,\n detail: {\n video: i\n }\n }));\n }).catch((t)=>{\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }).finally(()=>{\n this.removeAttribute(\"loading\");\n });\n };\n #u() {\n this.#o && Array.from(this.#o.childNodes).forEach((t)=>t.remove());\n }\n #h(e, i) {\n if (!this.#e || !e || !i) return;\n let [o] = this.#e.getVideoTracks(), n = this.getTrackCapabilities();\n e in this.getTrackSettings() && o.applyConstraints({\n advanced: [\n {\n [e]: $636b0cf1ed0b9f88$var$t(Number(i), n[e]?.min || 1, n[e]?.max || 1)\n }\n ]\n });\n }\n #g = (t)=>{\n t.target?.name === \"capture-button\" && (this.#s?.removeEventListener(\"click\", this.#b), this.#s = this.#c(), this.#s && (this.#s.addEventListener(\"click\", this.#b), \"BUTTON\" === this.#s.nodeName || this.#s.hasAttribute(\"role\") || this.#s.setAttribute(\"role\", \"button\")));\n };\n #f = (t)=>{\n t.target?.name === \"facing-mode-button\" && (this.#l?.removeEventListener(\"click\", this.#v), this.#l = this.#m(), this.#l && (this.#l.addEventListener(\"click\", this.#v), \"BUTTON\" === this.#l.nodeName || this.#l.hasAttribute(\"role\") || this.#l.setAttribute(\"role\", \"button\")));\n };\n #m() {\n return this.#r && this.#r.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"facing-mode-button\" === t.getAttribute(\"slot\")) || null;\n }\n #c() {\n return this.#a && this.#a.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"capture-button\" === t.getAttribute(\"slot\")) || null;\n }\n #d(t) {\n if (Object.prototype.hasOwnProperty.call(this, t)) {\n let e = this[t];\n delete this[t], this[t] = e;\n }\n }\n async startVideoStream() {\n if (!$636b0cf1ed0b9f88$export$cc30a98fe3890794.isSupported() || this.#e) return;\n this.setAttribute(\"loading\", \"\");\n let t = {\n video: {\n facingMode: {\n ideal: this.facingMode || \"user\"\n },\n pan: !0,\n tilt: !0,\n zoom: !0\n },\n audio: !1\n };\n if (\"string\" == typeof this.cameraResolution && this.cameraResolution.trim().length > 0) {\n let [e = 0, i = 0] = this.cameraResolution.split(\"x\").map((t)=>Number(t));\n e > 0 && i > 0 && (t.video.width = e, t.video.height = i);\n }\n try {\n this.#e = await navigator.mediaDevices.getUserMedia(t), this.#n && (this.#n.srcObject = this.#e), this.#h(\"pan\", this.pan), this.#h(\"tilt\", this.tilt), this.#h(\"zoom\", this.zoom);\n let e = this.getTrackSettings();\n \"facingMode\" in e && this.#r && (this.#r.hidden = !1);\n } catch (t) {\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n } finally{\n this.removeAttribute(\"loading\");\n }\n }\n stopVideoStream() {\n if (!this.#n || !this.#e) return;\n let [t] = this.#e.getVideoTracks();\n t?.stop(), this.#n.srcObject = null, this.#e = null;\n }\n async capture() {\n if (!this.loading && this.#i && this.#n) try {\n let t = this.#i.getContext(\"2d\"), i = this.#n.videoWidth, o = this.#n.videoHeight;\n this.#i.width = i, this.#i.height = o, t?.drawImage(this.#n, 0, 0, i, o);\n let n = this.#i.toDataURL(\"image/png\");\n if (\"string\" == typeof n && n.includes(\"data:image\")) {\n if (!this.noImage) {\n let t = new Image;\n t.src = n, t.width = i, t.height = o, t.setAttribute(\"part\", \"output-image\"), this.#u(), this.#o?.appendChild(t);\n }\n let t = {\n dataURI: n,\n width: i,\n height: o\n };\n if (this.calculateFileSize) try {\n let e = await fetch(n), i = (await e.blob()).size;\n i && (t.size = i);\n } catch (t) {}\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:success`, {\n bubbles: !0,\n composed: !0,\n detail: t\n }));\n }\n } catch (t) {\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }\n }\n getSupportedConstraints() {\n return $636b0cf1ed0b9f88$export$cc30a98fe3890794.isSupported() && navigator.mediaDevices.getSupportedConstraints() || {};\n }\n getTrackCapabilities() {\n if (!this.#e) return {};\n let [t] = this.#e.getVideoTracks();\n return t && \"function\" == typeof t.getCapabilities && t.getCapabilities() || {};\n }\n getTrackSettings() {\n if (!this.#e) return {};\n let [t] = this.#e.getVideoTracks();\n return t && \"function\" == typeof t.getSettings && t.getSettings() || {};\n }\n static isSupported() {\n return !!navigator.mediaDevices?.getUserMedia;\n }\n static defineCustomElement(t = $636b0cf1ed0b9f88$var$e) {\n \"undefined\" == typeof window || window.customElements.get(t) || window.customElements.define(t, $636b0cf1ed0b9f88$export$cc30a98fe3890794);\n }\n}\n$636b0cf1ed0b9f88$export$cc30a98fe3890794.defineCustomElement();\n\n\nObject.defineProperty({}, \"ModalElement\", {\n get: function() {\n return $4da30046ce6d9325$export$32589115725b904b;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $4da30046ce6d9325$var$e = document.createElement(\"template\");\n$4da30046ce6d9325$var$e.innerHTML = /* html */ `\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`; /**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */ \nclass $4da30046ce6d9325$export$32589115725b904b extends HTMLElement {\n #e = null;\n #t = null;\n #o = void 0;\n constructor(){\n if (super(), !this.shadowRoot) {\n let t = this.attachShadow({\n mode: \"open\"\n });\n t.appendChild($4da30046ce6d9325$var$e.content.cloneNode(!0));\n }\n this.shadowRoot && (this.#e = this.shadowRoot.querySelector(\"dialog\"), this.#t = this.shadowRoot.querySelector('slot[name=\"footer\"]'));\n }\n static get observedAttributes() {\n return [\n \"open\",\n \"no-header\",\n \"no-animations\",\n \"no-close-button\"\n ];\n }\n attributeChangedCallback(e, t, o) {\n if (null !== this.#e) {\n if (\"open\" === e && t !== o && (this.open ? (this.#e.showModal(), document.body && (document.body.style.overflowY = \"hidden\"), this.dispatchEvent(new CustomEvent(\"me-open\", {\n bubbles: !0,\n composed: !0,\n detail: {\n element: this\n }\n }))) : this.#e.close()), \"no-header\" === e && t !== o) {\n let e = this.#e.querySelector(\".dialog__header\");\n null !== e && (e.hidden = this.noHeader);\n }\n if (\"no-animations\" === e && t !== o && this.#e.classList.toggle(\"dialog--no-animations\", this.noAnimations), \"no-close-button\" === e && t !== o) {\n let e = this.#e.querySelector(\".dialog__close\");\n null !== e && (e.hidden = this.noCloseButton);\n }\n }\n }\n connectedCallback() {\n this.#i(\"open\"), this.#i(\"staticBackdrop\"), this.#i(\"noHeader\"), this.#i(\"noAnimations\"), this.#i(\"noCloseButton\"), this.#i(\"fullscreen\"), this.#e?.addEventListener(\"click\", this.#a), this.#e?.addEventListener(\"close\", this.#l), this.#e?.addEventListener(\"cancel\", this.#s), this.#e?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\", this.#n), this.#t?.addEventListener(\"slotchange\", this.#r);\n }\n disconnectedCallback() {\n this.#o && clearTimeout(this.#o), this.#e?.addEventListener(\"click\", this.#a), this.#e?.removeEventListener(\"close\", this.#l), this.#e?.removeEventListener(\"cancel\", this.#s), this.#e?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\", this.#n), this.#t?.removeEventListener(\"slotchange\", this.#r);\n }\n get open() {\n return this.hasAttribute(\"open\");\n }\n set open(e) {\n e ? this.setAttribute(\"open\", \"\") : this.removeAttribute(\"open\");\n }\n get staticBackdrop() {\n return this.hasAttribute(\"static-backdrop\");\n }\n set staticBackdrop(e) {\n e ? this.setAttribute(\"static-backdrop\", \"\") : this.removeAttribute(\"static-backdrop\");\n }\n get noHeader() {\n return this.hasAttribute(\"no-header\");\n }\n set noHeader(e) {\n e ? this.setAttribute(\"no-header\", \"\") : this.removeAttribute(\"no-header\");\n }\n get noAnimations() {\n return this.hasAttribute(\"no-animations\");\n }\n set noAnimations(e) {\n e ? this.setAttribute(\"no-animations\", \"\") : this.removeAttribute(\"no-animations\");\n }\n get noCloseButton() {\n return this.hasAttribute(\"no-close-button\");\n }\n set noCloseButton(e) {\n e ? this.setAttribute(\"no-close-button\", \"\") : this.removeAttribute(\"no-close-button\");\n }\n get fullscreen() {\n return this.hasAttribute(\"fullscreen\");\n }\n set fullscreen(e) {\n e ? this.setAttribute(\"fullscreen\", \"\") : this.removeAttribute(\"fullscreen\");\n }\n #d() {\n this.#o || (this.#e?.classList.add(\"dialog--pulse\"), this.#o = setTimeout(()=>{\n this.#e?.classList.remove(\"dialog--pulse\"), clearTimeout(this.#o), this.#o = void 0;\n }, 300));\n }\n #l = ()=>{\n // the open property when the dialog is closed by the user.\n this.open = !1, document.body && (document.body.style.overflowY = \"\"), this.dispatchEvent(new CustomEvent(\"me-close\", {\n bubbles: !0,\n composed: !0,\n detail: {\n element: this\n }\n }));\n };\n #s = (e)=>{\n let t = this.#c(\"escape-key\");\n this.dispatchEvent(t), t.defaultPrevented && (e.preventDefault(), this.noAnimations || this.#d());\n };\n #n = (e)=>{\n let t = this.#c(\"close-button\");\n this.dispatchEvent(t), t.defaultPrevented && (e.preventDefault(), this.noAnimations || this.#d());\n };\n #a = (e)=>{\n if (e.target !== e.currentTarget) return;\n let t = this.#c(\"backdrop-click\");\n if (this.dispatchEvent(t), t.defaultPrevented || this.staticBackdrop) {\n this.noAnimations || this.#d();\n return;\n }\n this.#e?.close();\n };\n #r = ()=>{\n if (null === this.#e) return; /** @type {Nullable} */ \n let e = this.#e.querySelector(\".dialog__footer\");\n if (null === e) return;\n let t = this.#t?.assignedNodes(), o = !!t && t.length > 0;\n e.hidden = !o;\n };\n #c(e) {\n return new CustomEvent(\"me-request-close\", {\n bubbles: !0,\n composed: !0,\n cancelable: !0,\n detail: {\n reason: e,\n element: this\n }\n });\n }\n #i(e) {\n if (Object.prototype.hasOwnProperty.call(this, e)) {\n let t = this[e];\n delete this[e], this[e] = t;\n }\n }\n show() {\n this.open || (this.open = !0);\n }\n hide() {\n this.open && (this.open = !1);\n }\n static defineCustomElement(e = \"modal-element\") {\n \"undefined\" == typeof window || window.customElements.get(e) || window.customElements.define(e, $4da30046ce6d9325$export$32589115725b904b);\n }\n}\n$4da30046ce6d9325$export$32589115725b904b.defineCustomElement();\n //# sourceMappingURL=modal-element-defined.js.map\n\n\nObject.defineProperty({}, \"FilesDropzone\", {\n get: function() {\n return $7aad62ebc3d6fae8$export$6ccd1735166caad9;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $7aad62ebc3d6fae8$var$e = new Map([\n [\n \"aac\",\n \"audio/aac\"\n ],\n [\n \"abw\",\n \"application/x-abiword\"\n ],\n [\n \"arc\",\n \"application/x-freearc\"\n ],\n [\n \"avif\",\n \"image/avif\"\n ],\n [\n \"avi\",\n \"video/x-msvideo\"\n ],\n [\n \"azw\",\n \"application/vnd.amazon.ebook\"\n ],\n [\n \"bin\",\n \"application/octet-stream\"\n ],\n [\n \"bmp\",\n \"image/bmp\"\n ],\n [\n \"bz\",\n \"application/x-bzip\"\n ],\n [\n \"bz2\",\n \"application/x-bzip2\"\n ],\n [\n \"cda\",\n \"application/x-cdf\"\n ],\n [\n \"csh\",\n \"application/x-csh\"\n ],\n [\n \"css\",\n \"text/css\"\n ],\n [\n \"csv\",\n \"text/csv\"\n ],\n [\n \"doc\",\n \"application/msword\"\n ],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ],\n [\n \"eot\",\n \"application/vnd.ms-fontobject\"\n ],\n [\n \"epub\",\n \"application/epub+zip\"\n ],\n [\n \"gz\",\n \"application/gzip\"\n ],\n [\n \"gif\",\n \"image/gif\"\n ],\n [\n \"heic\",\n \"image/heic\"\n ],\n [\n \"heif\",\n \"image/heif\"\n ],\n [\n \"htm\",\n \"text/html\"\n ],\n [\n \"html\",\n \"text/html\"\n ],\n [\n \"ico\",\n \"image/vnd.microsoft.icon\"\n ],\n [\n \"ics\",\n \"text/calendar\"\n ],\n [\n \"jar\",\n \"application/java-archive\"\n ],\n [\n \"jpeg\",\n \"image/jpeg\"\n ],\n [\n \"jpg\",\n \"image/jpeg\"\n ],\n [\n \"jxl\",\n \"image/jxl\"\n ],\n [\n \"js\",\n \"text/javascript\"\n ],\n [\n \"json\",\n \"application/json\"\n ],\n [\n \"jsonld\",\n \"application/ld+json\"\n ],\n [\n \"markdown\",\n \"text/markdown\"\n ],\n [\n \"md\",\n \"text/markdown\"\n ],\n [\n \"mid\",\n \"audio/midi\"\n ],\n [\n \"midi\",\n \"audio/midi\"\n ],\n [\n \"mjs\",\n \"text/javascript\"\n ],\n [\n \"mp3\",\n \"audio/mpeg\"\n ],\n [\n \"mp4\",\n \"video/mp4\"\n ],\n [\n \"mpeg\",\n \"video/mpeg\"\n ],\n [\n \"mpkg\",\n \"application/vnd.apple.installer+xml\"\n ],\n [\n \"odp\",\n \"application/vnd.oasis.opendocument.presentation\"\n ],\n [\n \"ods\",\n \"application/vnd.oasis.opendocument.spreadsheet\"\n ],\n [\n \"odt\",\n \"application/vnd.oasis.opendocument.text\"\n ],\n [\n \"oga\",\n \"audio/ogg\"\n ],\n [\n \"ogv\",\n \"video/ogg\"\n ],\n [\n \"ogx\",\n \"application/ogg\"\n ],\n [\n \"opus\",\n \"audio/opus\"\n ],\n [\n \"otf\",\n \"font/otf\"\n ],\n [\n \"png\",\n \"image/png\"\n ],\n [\n \"pdf\",\n \"application/pdf\"\n ],\n [\n \"php\",\n \"application/x-httpd-php\"\n ],\n [\n \"ppt\",\n \"application/vnd.ms-powerpoint\"\n ],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n ],\n [\n \"rar\",\n \"application/vnd.rar\"\n ],\n [\n \"rtf\",\n \"application/rtf\"\n ],\n [\n \"sh\",\n \"application/x-sh\"\n ],\n [\n \"svg\",\n \"image/svg+xml\"\n ],\n [\n \"swf\",\n \"application/x-shockwave-flash\"\n ],\n [\n \"tar\",\n \"application/x-tar\"\n ],\n [\n \"tif\",\n \"image/tiff\"\n ],\n [\n \"tiff\",\n \"image/tiff\"\n ],\n [\n \"ts\",\n \"video/mp2t\"\n ],\n [\n \"ttf\",\n \"font/ttf\"\n ],\n [\n \"txt\",\n \"text/plain\"\n ],\n [\n \"vsd\",\n \"application/vnd.visio\"\n ],\n [\n \"wav\",\n \"audio/wav\"\n ],\n [\n \"weba\",\n \"audio/webm\"\n ],\n [\n \"webm\",\n \"video/webm\"\n ],\n [\n \"webp\",\n \"image/webp\"\n ],\n [\n \"woff\",\n \"font/woff\"\n ],\n [\n \"woff2\",\n \"font/woff2\"\n ],\n [\n \"xhtml\",\n \"application/xhtml+xml\"\n ],\n [\n \"xls\",\n \"application/vnd.ms-excel\"\n ],\n [\n \"xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ],\n [\n \"xml\",\n \"application/xml\"\n ],\n [\n \"xul\",\n \"application/vnd.mozilla.xul+xml\"\n ],\n [\n \"zip\",\n \"application/zip\"\n ],\n [\n \"7z\",\n \"application/x-7z-compressed\"\n ],\n [\n \"mkv\",\n \"video/x-matroska\"\n ],\n [\n \"mov\",\n \"video/quicktime\"\n ],\n [\n \"msg\",\n \"application/vnd.ms-outlook\"\n ]\n]), $7aad62ebc3d6fae8$var$t = [\n \".DS_Store\",\n \"Thumbs.db\"\n], $7aad62ebc3d6fae8$var$o = (t)=>{\n let { name: o } = t;\n if (o && -1 !== o.lastIndexOf(\".\") && !t.type) {\n let i = (o.split(\".\").pop() || \"\").toLowerCase(), r = $7aad62ebc3d6fae8$var$e.get(i);\n r && Object.defineProperty(t, \"type\", {\n value: r,\n writable: !1,\n configurable: !1,\n enumerable: !0\n });\n }\n return t;\n}, $7aad62ebc3d6fae8$var$i = (e, t)=>{\n let i = $7aad62ebc3d6fae8$var$o(e);\n if (\"string\" != typeof i.path) {\n let { webkitRelativePath: o } = e;\n Object.defineProperty(i, \"path\", {\n value: \"string\" == typeof t ? t : o || e.name,\n writable: !1,\n configurable: !1,\n enumerable: !0\n });\n }\n return i;\n}, $7aad62ebc3d6fae8$var$r = async (e)=>await new Promise((t, o)=>{\n e.readEntries(t, o);\n }), $7aad62ebc3d6fae8$var$a = async (e)=>{\n let t = [], o = await $7aad62ebc3d6fae8$var$r(e);\n for(; o.length > 0;)t.push(...o), o = await $7aad62ebc3d6fae8$var$r(e);\n return t;\n}, $7aad62ebc3d6fae8$var$n = (e)=>new Promise((t, o)=>{\n e.file((o)=>t($7aad62ebc3d6fae8$var$i(o, e.fullPath)), o);\n }), $7aad62ebc3d6fae8$var$s = async (e)=>{\n let o = [], i = [];\n for (let t of e){\n if (\"file\" !== t.kind) continue;\n let e = t.getAsEntry ? t.getAsEntry() : t.webkitGetAsEntry();\n i.push(e);\n }\n for(; i.length > 0;){\n let e = i.shift();\n if (e) {\n if (e.isFile) {\n let i = await $7aad62ebc3d6fae8$var$n(e);\n -1 === $7aad62ebc3d6fae8$var$t.indexOf(i.name) && o.push(i);\n } else e.isDirectory && i.push(...await $7aad62ebc3d6fae8$var$a(e.createReader()));\n }\n }\n return o;\n}, $7aad62ebc3d6fae8$var$d = async (e)=>{\n let o = [];\n for (let r of e)-1 === $7aad62ebc3d6fae8$var$t.indexOf(r.name) && o.push($7aad62ebc3d6fae8$var$i(r));\n return o;\n}, $7aad62ebc3d6fae8$var$l = async (e)=>e.dataTransfer ? e.dataTransfer.items ? await $7aad62ebc3d6fae8$var$s(e.dataTransfer.items) : await $7aad62ebc3d6fae8$var$d(e.dataTransfer.files) : await $7aad62ebc3d6fae8$var$d(e.target.files), $7aad62ebc3d6fae8$var$p = \"files-dropzone\", $7aad62ebc3d6fae8$var$c = \"TOO_MANY_FILES\", $7aad62ebc3d6fae8$var$h = document.createElement(\"template\"), $7aad62ebc3d6fae8$var$u = `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n$7aad62ebc3d6fae8$var$h.innerHTML = `\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\nclass $7aad62ebc3d6fae8$export$6ccd1735166caad9 extends HTMLElement {\n #e = null;\n #t = null;\n constructor(){\n super(), this.shadowRoot || this.attachShadow({\n mode: \"open\"\n }).appendChild($7aad62ebc3d6fae8$var$h.content.cloneNode(!0)), this.shadowRoot && (this.#e = this.shadowRoot.getElementById(\"fileInput\"), this.#t = this.shadowRoot.getElementById(\"dropzoneEl\"));\n }\n static get observedAttributes() {\n return [\n \"accept\",\n \"disabled\",\n \"multiple\",\n \"no-keyboard\"\n ];\n }\n attributeChangedCallback(e, t, o) {\n \"accept\" === e && t !== o && this.#e && (this.#e.accept = this.accept), \"disabled\" === e && t !== o && this.#e && (this.#e.disabled = this.disabled, this.disabled ? this.#t?.removeAttribute(\"tabindex\") : this.#t?.setAttribute(\"tabindex\", \"0\")), \"multiple\" === e && t !== o && this.#e && (this.#e.multiple = this.multiple), \"no-keyboard\" === e && t !== o && this.#t && (this.noKeyboard ? this.#t.removeAttribute(\"tabindex\") : this.#t.setAttribute(\"tabindex\", \"0\"));\n }\n connectedCallback() {\n this.#o(\"accept\"), this.#o(\"disabled\"), this.#o(\"maxFiles\"), this.#o(\"maxSize\"), this.#o(\"minSize\"), this.#o(\"multiple\"), this.#o(\"noClick\"), this.#o(\"noDrag\"), this.#o(\"noKeyboard\"), this.#o(\"autoFocus\"), this.#o(\"noStyle\"), this.#e?.addEventListener(\"change\", this.#i), this.#t?.addEventListener(\"dragenter\", this.#r), this.#t?.addEventListener(\"dragover\", this.#a), this.#t?.addEventListener(\"dragleave\", this.#n), this.#t?.addEventListener(\"drop\", this.#s), this.#t?.addEventListener(\"click\", this.#d), this.#t?.addEventListener(\"keyup\", this.#l), this.autoFocus && this.#t?.focus();\n }\n disconnectedCallback() {\n this.#e?.removeEventListener(\"change\", this.#i), this.#t?.removeEventListener(\"dragenter\", this.#r), this.#t?.removeEventListener(\"dragover\", this.#a), this.#t?.removeEventListener(\"dragleave\", this.#n), this.#t?.removeEventListener(\"drop\", this.#s), this.#t?.removeEventListener(\"click\", this.#d), this.#t?.removeEventListener(\"keyup\", this.#l);\n }\n get accept() {\n return this.getAttribute(\"accept\") || \"\";\n }\n set accept(e) {\n this.setAttribute(\"accept\", null != e ? e.toString() : e);\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(e) {\n this.toggleAttribute(\"disabled\", !!e);\n }\n get maxFiles() {\n let e = Number(this.getAttribute(\"max-files\")) || 0;\n return e <= 0 ? 1 / 0 : Math.floor(Math.abs(e));\n }\n set maxFiles(e) {\n this.setAttribute(\"max-files\", null != e ? e.toString() : e);\n }\n get maxSize() {\n let e = this.getAttribute(\"max-size\");\n if (null === e) return 1 / 0;\n let t = Number(e);\n return Number.isNaN(t) ? 1 / 0 : t;\n }\n set maxSize(e) {\n this.setAttribute(\"max-size\", null != e ? e.toString() : e);\n }\n get minSize() {\n let e = this.getAttribute(\"min-size\");\n if (null === e) return 0;\n let t = Number(e);\n return Number.isNaN(t) ? 0 : t;\n }\n set minSize(e) {\n this.setAttribute(\"min-size\", null != e ? e.toString() : e);\n }\n get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(e) {\n this.toggleAttribute(\"multiple\", !!e);\n }\n get noClick() {\n return this.hasAttribute(\"no-click\");\n }\n set noClick(e) {\n this.toggleAttribute(\"no-click\", !!e);\n }\n get noDrag() {\n return this.hasAttribute(\"no-drag\");\n }\n set noDrag(e) {\n this.toggleAttribute(\"no-drag\", !!e);\n }\n get noKeyboard() {\n return this.hasAttribute(\"no-keyboard\");\n }\n set noKeyboard(e) {\n this.toggleAttribute(\"no-keyboard\", !!e);\n }\n get autoFocus() {\n return this.hasAttribute(\"auto-focus\");\n }\n set autoFocus(e) {\n this.toggleAttribute(\"auto-focus\", !!e);\n }\n get noStyle() {\n return this.hasAttribute(\"no-style\");\n }\n set noStyle(e) {\n this.toggleAttribute(\"no-style\", !!e);\n }\n #i = async (e)=>{\n try {\n this.#p(await $7aad62ebc3d6fae8$var$l(e));\n } catch (e) {\n this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: e\n }\n }));\n }\n };\n #r = ()=>{\n this.disabled || this.noDrag || this.dispatchEvent(new Event(`${$7aad62ebc3d6fae8$var$p}-dragenter`, {\n bubbles: !0,\n composed: !0\n }));\n };\n #a = (e)=>{\n if (e.preventDefault(), this.disabled || this.noDrag) {\n e.dataTransfer.dropEffect = \"none\";\n return;\n }\n e.dataTransfer.dropEffect = \"copy\", this.#t && (this.#t.classList.add(\"dropzone--dragover\"), this.#t.part.add(\"dropzone--dragover\")), this.dispatchEvent(new Event(`${$7aad62ebc3d6fae8$var$p}-dragover`, {\n bubbles: !0,\n composed: !0\n }));\n };\n #n = ()=>{\n this.disabled || this.noDrag || (this.#t && (this.#t.classList.remove(\"dropzone--dragover\"), this.#t.part.remove(\"dropzone--dragover\")), this.dispatchEvent(new Event(`${$7aad62ebc3d6fae8$var$p}-dragleave`, {\n bubbles: !0,\n composed: !0\n })));\n };\n #s = async (e)=>{\n if (!this.disabled && !this.noDrag) {\n e.preventDefault(), this.#t && (this.#t.classList.remove(\"dropzone--dragover\"), this.#t.part.remove(\"dropzone--dragover\"));\n try {\n this.#p(await $7aad62ebc3d6fae8$var$l(e));\n } catch (e) {\n this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: e\n }\n }));\n }\n }\n };\n #d = ()=>{\n this.disabled || this.noClick || this.#e?.click();\n };\n #l = (e)=>{\n this.disabled || this.noKeyboard || \" \" !== e.key && \"Enter\" !== e.key || this.#e?.click();\n };\n #p(e) {\n if (!Array.isArray(e) || !e.length) return;\n let t = [], o = [], i = e.length;\n if (!this.multiple && i > 1) for (let t of e)o.push({\n file: t,\n errors: [\n {\n code: $7aad62ebc3d6fae8$var$c,\n message: \"Too many files selected. Only 1 file is allowed.\"\n }\n ]\n });\n else if (this.multiple && i > this.maxFiles) for (let t of e)o.push({\n file: t,\n errors: [\n {\n code: $7aad62ebc3d6fae8$var$c,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? \"files are\" : \"file is\"} allowed.`\n }\n ]\n });\n else for (let i of e){\n let e = function(e, t = \"\") {\n if (!t) return !0;\n let o = [\n ...new Set(t.split(\",\").map((e)=>e.trim()).filter(Boolean))\n ], i = e.type, r = i.replace(/\\/.*$/, \"\");\n for (let t of o)if (\".\" === t.charAt(0)) {\n if (-1 !== e.name.toLowerCase().indexOf(t.toLowerCase(), e.name.length - t.length)) return !0;\n } else if (/\\/\\*$/.test(t)) {\n if (r === t.replace(/\\/.*$/, \"\")) return !0;\n } else if (i === t) return !0;\n return !1;\n }(i, this.accept), r = i.size > this.maxSize, a = i.size < this.minSize;\n if (!e || r || a) {\n let t = [];\n e || t.push({\n code: \"INVALID_MIME_TYPE\",\n message: `File type \"${i.type}\" is not accepted.`\n }), r && t.push({\n code: \"FILE_TOO_LARGE\",\n message: `File size ${i.size} exceeds the maximum size of ${this.maxSize}.`\n }), a && t.push({\n code: \"FILE_TOO_SMALL\",\n message: `File size ${i.size} is smaller than the minimum size of ${this.minSize}.`\n }), o.push({\n file: i,\n errors: t\n });\n } else t.push(i);\n }\n this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-drop`, {\n bubbles: !0,\n composed: !0,\n detail: {\n acceptedFiles: t,\n rejectedFiles: o\n }\n })), t.length > 0 && this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-drop-accepted`, {\n bubbles: !0,\n composed: !0,\n detail: {\n acceptedFiles: t\n }\n })), o.length > 0 && this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-drop-rejected`, {\n bubbles: !0,\n composed: !0,\n detail: {\n rejectedFiles: o\n }\n })), this.#e && (this.#e.value = this.#e.defaultValue);\n }\n openFileDialog() {\n this.disabled || this.#e?.click();\n }\n #o(e) {\n if (Object.prototype.hasOwnProperty.call(this, e)) {\n let t = this[e];\n delete this[e], this[e] = t;\n }\n }\n static defineCustomElement(e = $7aad62ebc3d6fae8$var$p) {\n \"undefined\" == typeof window || window.customElements.get(e) || window.customElements.define(e, $7aad62ebc3d6fae8$export$6ccd1735166caad9);\n }\n}\n$7aad62ebc3d6fae8$export$6ccd1735166caad9.defineCustomElement();\n\n\n\n\n/**\n * Removes one or more elements from an array at the specified index(es).\n *\n * @param {Array} array The initial array to remove elements from.\n * @param {Number} ...indexes The index(es) of the elements to be removed. Non numbers are ignored.\n * @throws {TypeError} If `array` is not array.\n * @returns {Array} The result array with the elements specified removed.\n * @example\n *\n * const arr = [1, 2, 3, 4, 5];\n *\n * remove(arr, 0);\n * // => [2, 3, 4, 5]\n *\n * remove(arr, 0, 1);\n * // => [3, 4, 5]\n *\n * remove(arr, 0, 4);\n * // => [2, 3, 4]\n *\n * remove(arr);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length - 1);\n * // => [1, 2, 3, 4]\n *\n * remove(arr, NaN);\n * // => [1, 2, 3, 4, 5]\n */ const $5742c9e143620cb1$export$30a014203d0d7e4f = (array, ...indexes)=>{\n if (!Array.isArray(array)) throw new TypeError(\"Expected an array for first argument\");\n return array.filter((_, i)=>indexes.indexOf(i) === -1);\n};\n\n\n/**\n * Generates a unique id of the form `${prefix}-${randomString}-${suffix}`.\n *\n * @param {string} [prefix=''] - The prefix to use for the id.\n * @param {string} [suffix=''] - The suffix to use for the id.\n * @returns {string} - The unique id.\n */ const $21c3f3a8dccfa4fd$export$e2a22331486dcca0 = (prefix = \"\", suffix = \"\")=>{\n const prefixString = typeof prefix === \"string\" && prefix !== \"\" ? prefix + \"-\" : \"\";\n const suffixString = typeof suffix === \"string\" && suffix !== \"\" ? \"-\" + suffix : \"\";\n const randomString = Math.random().toString(36).substring(2, 8); // Pseudo-random string of six alphanumeric characters.\n return `${prefixString}${randomString}${suffixString}`;\n};\n\n\nconst $33dea9d9a6da4c9a$export$63e7bed68b07a85c = [\n \"image/jpg\",\n \"image/jpeg\",\n \"image/png\",\n \"image/apng\",\n \"image/gif\",\n \"image/webp\",\n \"image/avif\"\n];\n\n\nvar $02ee0bedf4ff7ef0$exports = {};\n\n$02ee0bedf4ff7ef0$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Pressuru.684952ea.ttf\";\n\n\nvar $6f8f0ad93b4f4fec$exports = {};\n\n$6f8f0ad93b4f4fec$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Oswald-Regular.89ec7d89.ttf\";\n\n\nvar $60f12aeb358e1d01$exports = {};\n\n$60f12aeb358e1d01$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Oswald-Bold.0f6a7ca6.ttf\";\n\n\nvar $b312cc3e2ac443c7$exports = {};\n\n$b312cc3e2ac443c7$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Roboto-Regular.ca197847.ttf\";\n\n\nvar $481315e8ee95f8f9$exports = {};\n\n$481315e8ee95f8f9$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Roboto-Bold.fdb9b54a.ttf\";\n\n\nvar $7cee0a691e2711a6$exports = {};\n\n$7cee0a691e2711a6$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"RobotoCondensed-Regular.d585f5c7.ttf\";\n\n\nvar $12b7043e62e67366$exports = {};\n\n$12b7043e62e67366$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"RobotoCondensed-Bold.e1f96d4b.ttf\";\n\n\nvar $f224edc54658ebde$exports = {};\n\n$f224edc54658ebde$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"CourierPrime-Regular.3a25a501.ttf\";\n\n\nvar $33ce2f42587a9c55$exports = {};\n\n$33ce2f42587a9c55$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"CourierPrime-Bold.3d6bf689.ttf\";\n\n\nvar $1375393a097acb0e$exports = {};\n\n$1375393a097acb0e$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"OpenSans-Regular.edf9e01b.ttf\";\n\n\nvar $728f6ce83c7b6e27$exports = {};\n\n$728f6ce83c7b6e27$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"OpenSans-Bold.8fceb72b.ttf\";\n\n\nconst $055531bbd0af154c$export$6874249d87f2602a = [\n {\n name: \"Pressuru\",\n label: \"Pressuru\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($02ee0bedf4ff7ef0$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Oswald-Regular\",\n label: \"Oswald\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($6f8f0ad93b4f4fec$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Oswald-Bold\",\n label: \"Oswald Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($60f12aeb358e1d01$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"Roboto-Regular\",\n label: \"Roboto\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($b312cc3e2ac443c7$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Roboto-Bold\",\n label: \"Roboto Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($481315e8ee95f8f9$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"RobotoCondensed-Regular\",\n label: \"Roboto Condensed\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($7cee0a691e2711a6$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"RobotoCondensed-Bold\",\n label: \"Roboto Condensed Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($12b7043e62e67366$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"CourierPrime-Regular\",\n label: \"Courier Prime\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($f224edc54658ebde$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"CourierPrime-Bold\",\n label: \"Courier Prime Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($33ce2f42587a9c55$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"OpenSans-Regular\",\n label: \"Open Sans\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($1375393a097acb0e$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"OpenSans-Bold\",\n label: \"Open Sans Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($728f6ce83c7b6e27$exports))),\n style: \"normal\",\n weight: \"400\"\n }\n];\nconst $055531bbd0af154c$export$59eceaef0c7797b2 = async (name, path, options = {})=>{\n try {\n const font = new FontFace(name, `url(${path})`, {\n ...options\n });\n await font.load();\n document.fonts.add(font);\n } catch (err) {\n console.error(err);\n }\n};\n\n\n\nconst $008970865eefc93d$export$6539e087749cf9d3 = async (options = {})=>{\n const res = await fetch(options.url);\n const blob = await res.blob();\n const mimeType = options.mimeType || blob.type || \"\";\n if (!(0, $33dea9d9a6da4c9a$export$63e7bed68b07a85c).includes(mimeType)) throw new Error(`This is not an accepted image format. Accepted MIME types are: ${(0, $33dea9d9a6da4c9a$export$63e7bed68b07a85c).join(\", \")}`);\n return new File([\n blob\n ], options.filename || \"\", blob);\n};\n\n\nconst $166cfb2484b08c80$var$errorsContainer = document.getElementById(\"errorsContainer\");\nconst $166cfb2484b08c80$var$hideError = (evt)=>{\n const target = evt.currentTarget;\n target.removeEventListener(\"click\", $166cfb2484b08c80$var$hideError);\n $166cfb2484b08c80$var$errorsContainer.removeChild(target.parentNode);\n};\nconst $166cfb2484b08c80$export$af04143326425dbd = (message = \"\", type = \"info\")=>{\n const types = [\n \"info\",\n \"warning\",\n \"danger\"\n ];\n if (!types.includes(type)) type = \"info\";\n const template = /* html */ `\n ${message}\n \n `;\n const div = document.createElement(\"div\");\n div.className = `alert alert-${type} alert-dismissible text-break mb-2 fade`;\n div.innerHTML = template;\n div.querySelector(\"button\").addEventListener(\"click\", $166cfb2484b08c80$var$hideError);\n $166cfb2484b08c80$var$errorsContainer.appendChild(div);\n setTimeout(()=>div.classList.add(\"show\"), 100);\n};\n\n\n\nconst $50a37fdc18d479c2$export$293a4b86a6fe2398 = (index, data = {})=>{\n const inputTemplate = /* html */ `\n
\n \n\n \n\n
\n \n \n \n
\n
\n\n
\n
\n
\n \n\n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n
\n `;\n const fragment = document.createDocumentFragment();\n const div = document.createElement(\"div\");\n div.className = \"bg-light border shadow-sm mb-3 rounded\";\n div.setAttribute(\"data-section\", \"textBox\");\n div.setAttribute(\"data-index\", index);\n div.innerHTML = inputTemplate;\n div.querySelector('[data-input=\"font\"]').value = data.font;\n div.querySelector('[data-input=\"textAlign\"]').value = data.textAlign;\n div.querySelector('[data-input=\"allCaps\"]').checked = data.allCaps;\n return fragment.appendChild(div);\n};\n\n\nconst $d346fdc99aed49b3$export$e653a2de0f3a8b89 = (image, canvas, ctx, textOptions = [])=>{\n if (image == null) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n if (typeof image === \"string\") {\n ctx.fillStyle = image;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n textOptions.forEach(function(item, index) {\n ctx.save();\n ctx.font = `${item.fontWeight} ${item.fontSize}px ${item.font}`;\n ctx.fillStyle = item.fillColor;\n ctx.textAlign = item.textAlign;\n ctx.strokeStyle = item.shadowColor;\n const multiplier = index + 1;\n const lineHeight = ctx.measureText(\"M\").width + item.fontSize / 2;\n const xPos = canvas.width / 2;\n const shadowBlur = item.shadowBlur;\n const text = item.allCaps === true ? item.text.toUpperCase() : item.text;\n const textLines = text.split(\"\\n\");\n if (shadowBlur !== 0) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = item.shadowColor;\n }\n ctx.translate(xPos + item.offsetX, lineHeight * multiplier + item.offsetY);\n ctx.rotate(item.rotate * Math.PI / 180);\n // first draw each line with shadow\n textLines.forEach((text, index)=>ctx.fillText(text, 0, index * lineHeight));\n // since shadows of multiline text may be drawn over letters of neighbour lines\n // (when shadow blur is big enough), re-draw text without shadows.\n ctx.shadowBlur = 0;\n textLines.forEach((text, index)=>ctx.fillText(text, 0, index * lineHeight));\n if (item.borderWidth > 0) {\n ctx.lineWidth = item.borderWidth;\n textLines.forEach((text, index)=>ctx.strokeText(text, 0, index * lineHeight));\n }\n ctx.restore();\n });\n};\n\n\nconst $44ae6d9db4eaca0f$var$videoModal = document.getElementById(\"videoModal\");\nconst $44ae6d9db4eaca0f$var$downloadModal = document.getElementById(\"downloadModal\");\nconst $44ae6d9db4eaca0f$var$canvas = document.getElementById(\"canvas\");\nconst $44ae6d9db4eaca0f$var$dropzoneEl = document.querySelector(\"files-dropzone\");\nconst $44ae6d9db4eaca0f$var$instructionsEl = document.getElementById(\"instructions\");\nconst $44ae6d9db4eaca0f$var$ctx = $44ae6d9db4eaca0f$var$canvas.getContext(\"2d\");\nconst $44ae6d9db4eaca0f$var$imageUploadMethodSelect = document.getElementById(\"imageUploadMethodSelect\");\nconst $44ae6d9db4eaca0f$var$fileSelectBtn = document.getElementById(\"fileSelectBtn\");\nconst $44ae6d9db4eaca0f$var$imageUrlForm = document.getElementById(\"imageUrlForm\");\nconst $44ae6d9db4eaca0f$var$addTextboxBtn = document.getElementById(\"addTextboxBtn\");\nconst $44ae6d9db4eaca0f$var$inputsContainer = document.getElementById(\"inputsContainer\");\nconst $44ae6d9db4eaca0f$var$generateMemeBtn = document.getElementById(\"generateMemeBtn\");\nconst $44ae6d9db4eaca0f$var$openVideoModalBtn = document.getElementById(\"openVideoModalBtn\");\nconst $44ae6d9db4eaca0f$var$downloadMemeBtn = document.getElementById(\"downloadMemeBtn\");\nconst $44ae6d9db4eaca0f$var$downloadMemePreview = document.getElementById(\"downloadMemePreview\");\nconst $44ae6d9db4eaca0f$var$webShareComponent = document.querySelector(\"web-share\");\nconst $44ae6d9db4eaca0f$var$galleryEl = document.getElementById(\"gallery\");\nconst $44ae6d9db4eaca0f$var$gallerySearchEl = document.getElementById(\"gallerySearch\");\nconst $44ae6d9db4eaca0f$var$galleryNoResultsEl = $44ae6d9db4eaca0f$var$galleryEl.querySelector(\".gallery__no-results\");\nconst $44ae6d9db4eaca0f$var$solidColorForm = document.getElementById(\"solidColorForm\");\nconst $44ae6d9db4eaca0f$var$uploadMethodEls = document.querySelectorAll(\".upload-method\");\nlet $44ae6d9db4eaca0f$var$selectedImage = null;\nlet $44ae6d9db4eaca0f$var$reqAnimFrame = null;\nconst $44ae6d9db4eaca0f$var$defaultTextOptions = {\n _isSettingsOpen: false,\n text: \"\",\n fillColor: \"#ffffff\",\n shadowColor: \"#000000\",\n font: \"Pressuru\",\n fontSize: 40,\n fontWeight: \"normal\",\n textAlign: \"center\",\n shadowBlur: 3,\n borderWidth: 1,\n offsetY: 0,\n offsetX: 0,\n rotate: 0,\n allCaps: true\n};\nlet $44ae6d9db4eaca0f$var$textOptions = [\n {\n ...$44ae6d9db4eaca0f$var$defaultTextOptions\n }\n];\nconst $44ae6d9db4eaca0f$var$generateMeme = async ()=>{\n const dataUrl = $44ae6d9db4eaca0f$var$canvas.toDataURL(\"image/png\");\n // Prepare download link\n const downloadLink = dataUrl.replace(\"image/png\", \"image/octet-stream\");\n $44ae6d9db4eaca0f$var$downloadMemeBtn.download = `${(0, $21c3f3a8dccfa4fd$export$e2a22331486dcca0)(\"meme\")}.png`;\n $44ae6d9db4eaca0f$var$downloadMemeBtn.href = downloadLink;\n $44ae6d9db4eaca0f$var$downloadMemePreview.width = $44ae6d9db4eaca0f$var$canvas.width;\n $44ae6d9db4eaca0f$var$downloadMemePreview.height = $44ae6d9db4eaca0f$var$canvas.height;\n $44ae6d9db4eaca0f$var$downloadMemePreview.src = downloadLink;\n // Prepare for sharing file\n if ((0, $94933cc6427541bd$export$c37129e465f64ef0)()) try {\n const file = await (0, $008970865eefc93d$export$6539e087749cf9d3)({\n url: dataUrl,\n filename: `${(0, $21c3f3a8dccfa4fd$export$e2a22331486dcca0)(\"meme\")}.png`,\n mimeType: \"image/png\"\n }).catch((err)=>(0, $166cfb2484b08c80$export$af04143326425dbd)(err.message, \"danger\"));\n if (file && (0, $94933cc6427541bd$export$c37129e465f64ef0)({\n files: [\n file\n ]\n })) {\n $44ae6d9db4eaca0f$var$webShareComponent.shareFiles = [\n file\n ];\n $44ae6d9db4eaca0f$var$webShareComponent.hidden = false;\n }\n } catch (error) {\n console.error(error);\n }\n window.requestAnimationFrame(()=>{\n $44ae6d9db4eaca0f$var$downloadModal.open = true;\n });\n};\nconst $44ae6d9db4eaca0f$var$onImageLoaded = (evt)=>{\n const MAX_WIDTH = 4000;\n const MAX_HEIGHT = 3000;\n let width = evt.target.width;\n let height = evt.target.height;\n if (width > height) {\n if (width > MAX_WIDTH) {\n height *= MAX_WIDTH / width;\n width = MAX_WIDTH;\n }\n } else if (height > MAX_HEIGHT) {\n width *= MAX_HEIGHT / height;\n height = MAX_HEIGHT;\n }\n $44ae6d9db4eaca0f$var$canvas.width = width;\n $44ae6d9db4eaca0f$var$canvas.height = height;\n $44ae6d9db4eaca0f$var$selectedImage = evt.target;\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n $44ae6d9db4eaca0f$var$generateMemeBtn.disabled = false;\n $44ae6d9db4eaca0f$var$canvas.hidden = false;\n $44ae6d9db4eaca0f$var$instructionsEl.hidden = true;\n};\nconst $44ae6d9db4eaca0f$var$handleSolidColorFormInput = (evt)=>{\n const DEFAULT_WIDTH = 600;\n const DEFAULT_HEIGHT = 400;\n if (evt.target === $44ae6d9db4eaca0f$var$solidColorForm[\"canvasColor\"]) $44ae6d9db4eaca0f$var$selectedImage = evt.target.value;\n if (typeof $44ae6d9db4eaca0f$var$selectedImage === \"string\") {\n $44ae6d9db4eaca0f$var$canvas.width = Number($44ae6d9db4eaca0f$var$solidColorForm[\"canvasWidth\"].value) || DEFAULT_WIDTH;\n $44ae6d9db4eaca0f$var$canvas.height = Number($44ae6d9db4eaca0f$var$solidColorForm[\"canvasHeight\"].value) || DEFAULT_HEIGHT;\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n $44ae6d9db4eaca0f$var$generateMemeBtn.disabled = false;\n $44ae6d9db4eaca0f$var$canvas.hidden = false;\n $44ae6d9db4eaca0f$var$instructionsEl.hidden = true;\n }\n};\nconst $44ae6d9db4eaca0f$var$handleFileSelect = (file)=>{\n if (!file) return;\n const image = new Image();\n const reader = new FileReader();\n reader.addEventListener(\"load\", function(evt) {\n const data = evt.target.result;\n image.addEventListener(\"load\", $44ae6d9db4eaca0f$var$onImageLoaded);\n image.src = data;\n });\n reader.readAsDataURL(file);\n};\nconst $44ae6d9db4eaca0f$var$handleOpenVideoModalButtonClick = ()=>{\n $44ae6d9db4eaca0f$var$videoModal.open = true;\n};\nconst $44ae6d9db4eaca0f$var$handleTextPropChange = (element, index, prop)=>{\n if (element.type === \"checkbox\") $44ae6d9db4eaca0f$var$textOptions[index][prop] = element.checked;\n else if (element.type === \"number\") $44ae6d9db4eaca0f$var$textOptions[index][prop] = Number(element.value);\n else $44ae6d9db4eaca0f$var$textOptions[index][prop] = element.value;\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n};\nconst $44ae6d9db4eaca0f$var$handleAddTextboxBtnClick = ()=>{\n const textOptionsLength = $44ae6d9db4eaca0f$var$textOptions.length;\n const newTextBox = (0, $50a37fdc18d479c2$export$293a4b86a6fe2398)(textOptionsLength, $44ae6d9db4eaca0f$var$defaultTextOptions);\n $44ae6d9db4eaca0f$var$textOptions.push({\n ...$44ae6d9db4eaca0f$var$defaultTextOptions\n });\n $44ae6d9db4eaca0f$var$inputsContainer.appendChild(newTextBox);\n newTextBox.querySelector('[data-input=\"text\"]').focus();\n};\nconst $44ae6d9db4eaca0f$var$handleImageUploadFromURL = async (evt)=>{\n evt.preventDefault();\n const form = evt.target;\n const submitButton = form.querySelector('button[type=\"submit\"]');\n const imageUrl = form[\"imageUrl\"].value;\n if (!imageUrl.trim()) return;\n submitButton.disabled = true;\n submitButton.querySelector(\".spinner\").hidden = false;\n submitButton.querySelector(\".label\").hidden = true;\n try {\n const file = await (0, $008970865eefc93d$export$6539e087749cf9d3)({\n url: imageUrl\n }).catch((err)=>(0, $166cfb2484b08c80$export$af04143326425dbd)(err.message, \"danger\"));\n if (file) $44ae6d9db4eaca0f$var$handleFileSelect(file);\n } catch (err) {\n (0, $166cfb2484b08c80$export$af04143326425dbd)(`Failed to load image from \"${imageUrl}\".`, \"danger\");\n } finally{\n submitButton.disabled = false;\n submitButton.querySelector(\".spinner\").hidden = true;\n submitButton.querySelector(\".label\").hidden = false;\n }\n};\nconst $44ae6d9db4eaca0f$var$moveText = (offsetDir, sign, index)=>()=>{\n const textBoxSection = document.querySelectorAll('[data-section=\"textBox\"]')[index];\n const offsetYInput = textBoxSection.querySelector('[data-input=\"offsetY\"]');\n const offsetXInput = textBoxSection.querySelector('[data-input=\"offsetX\"]');\n if (offsetDir === \"offsetY\") {\n if (sign === \"-\") $44ae6d9db4eaca0f$var$textOptions[index].offsetY -= 1;\n if (sign === \"+\") $44ae6d9db4eaca0f$var$textOptions[index].offsetY += 1;\n offsetYInput.value = $44ae6d9db4eaca0f$var$textOptions[index].offsetY;\n }\n if (offsetDir === \"offsetX\") {\n if (sign === \"-\") $44ae6d9db4eaca0f$var$textOptions[index].offsetX -= 1;\n if (sign === \"+\") $44ae6d9db4eaca0f$var$textOptions[index].offsetX += 1;\n offsetXInput.value = $44ae6d9db4eaca0f$var$textOptions[index].offsetX;\n }\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n $44ae6d9db4eaca0f$var$reqAnimFrame = requestAnimationFrame($44ae6d9db4eaca0f$var$moveText(offsetDir, sign, index));\n };\nconst $44ae6d9db4eaca0f$var$handleUploadMethodChange = (evt)=>{\n $44ae6d9db4eaca0f$var$uploadMethodEls.forEach((el)=>el.hidden = el.id !== evt.target.value);\n};\nconst $44ae6d9db4eaca0f$var$handleFileSelectClick = ()=>{\n if (typeof $44ae6d9db4eaca0f$var$dropzoneEl.openFileDialog === \"function\") $44ae6d9db4eaca0f$var$dropzoneEl.openFileDialog();\n};\nconst $44ae6d9db4eaca0f$var$handleDropFilesAccepted = (evt)=>{\n const [file] = evt.detail.acceptedFiles;\n if (file) $44ae6d9db4eaca0f$var$handleFileSelect(file);\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerInput = (evt)=>{\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let prop;\n if (element.matches('[data-input=\"text\"]')) prop = \"text\";\n else if (element.matches('[data-input=\"fillColor\"]')) prop = \"fillColor\";\n else if (element.matches('[data-input=\"shadowColor\"]')) prop = \"shadowColor\";\n else if (element.matches('[data-input=\"font\"]')) prop = \"font\";\n else if (element.matches('[data-input=\"fontSize\"]')) prop = \"fontSize\";\n else if (element.matches('[data-input=\"fontWeight\"]')) prop = \"fontWeight\";\n else if (element.matches('[data-input=\"textAlign\"]')) prop = \"textAlign\";\n else if (element.matches('[data-input=\"shadowBlur\"]')) prop = \"shadowBlur\";\n else if (element.matches('[data-input=\"offsetY\"]')) prop = \"offsetY\";\n else if (element.matches('[data-input=\"offsetX\"]')) prop = \"offsetX\";\n else if (element.matches('[data-input=\"rotate\"]')) prop = \"rotate\";\n else if (element.matches('[data-input=\"borderWidth\"]')) prop = \"borderWidth\";\n if (prop) $44ae6d9db4eaca0f$var$handleTextPropChange(element, index, prop);\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerChange = (evt)=>{\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let prop;\n if (element.matches('[data-input=\"allCaps\"]')) prop = \"allCaps\";\n if (prop) $44ae6d9db4eaca0f$var$handleTextPropChange(element, index, prop);\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerClick = (evt)=>{\n const element = evt.target;\n if (element.matches('[data-button=\"settings\"]')) {\n const textBoxIndex = element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\");\n const textBoxEls = document.querySelectorAll('[data-section=\"textBox\"]');\n textBoxEls.forEach((el, index)=>{\n const settingsEl = el.querySelector('[data-section=\"settings\"]');\n if (el.getAttribute(\"data-index\") === textBoxIndex) {\n settingsEl.hidden = !settingsEl.hidden;\n $44ae6d9db4eaca0f$var$textOptions[index]._isSettingsOpen = !$44ae6d9db4eaca0f$var$textOptions[index]._isSettingsOpen;\n } else {\n settingsEl.hidden = true;\n $44ae6d9db4eaca0f$var$textOptions[index]._isSettingsOpen = false;\n }\n });\n }\n if (element.matches('[data-button=\"delete-text-box\"]')) {\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let confirm = true;\n if ($44ae6d9db4eaca0f$var$textOptions[index].text.trim()) confirm = window.confirm(\"Are you sure you want to remove this text box?\");\n if (confirm) {\n $44ae6d9db4eaca0f$var$textOptions = (0, $5742c9e143620cb1$export$30a014203d0d7e4f)($44ae6d9db4eaca0f$var$textOptions, index);\n $44ae6d9db4eaca0f$var$inputsContainer.querySelectorAll('[data-section=\"textBox\"]').forEach((el)=>el.remove());\n $44ae6d9db4eaca0f$var$textOptions.forEach((item, index)=>$44ae6d9db4eaca0f$var$inputsContainer.appendChild((0, $50a37fdc18d479c2$export$293a4b86a6fe2398)(index, item)));\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n }\n }\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerPointerdown = (evt)=>{\n const element = evt.target;\n const textBoxEl = element.closest('[data-section=\"textBox\"]');\n if (!textBoxEl) return;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton) return;\n const offsetDir = element.getAttribute(\"data-move\");\n const sign = element.getAttribute(\"data-sign\");\n $44ae6d9db4eaca0f$var$reqAnimFrame = requestAnimationFrame($44ae6d9db4eaca0f$var$moveText(offsetDir, sign, index));\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerPointerup = (evt)=>{\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton) return;\n cancelAnimationFrame($44ae6d9db4eaca0f$var$reqAnimFrame);\n $44ae6d9db4eaca0f$var$reqAnimFrame = null;\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerPointerout = (evt)=>{\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton || !$44ae6d9db4eaca0f$var$reqAnimFrame) return;\n cancelAnimationFrame($44ae6d9db4eaca0f$var$reqAnimFrame);\n $44ae6d9db4eaca0f$var$reqAnimFrame = null;\n};\nconst $44ae6d9db4eaca0f$var$handleGalleryClick = async (evt)=>{\n const button = evt.target.closest(\"button\");\n if (!button) return;\n const img = button.querySelector(\"img\");\n try {\n const file = await (0, $008970865eefc93d$export$6539e087749cf9d3)({\n url: img.src\n }).catch((err)=>(0, $166cfb2484b08c80$export$af04143326425dbd)(err.message, \"danger\"));\n if (file) $44ae6d9db4eaca0f$var$handleFileSelect(file);\n } catch (err) {\n (0, $166cfb2484b08c80$export$af04143326425dbd)(`Failed to load image: \"${img.alt}\".`, \"danger\");\n }\n};\nconst $44ae6d9db4eaca0f$var$handleGallerySearchInput = (evt)=>{\n const query = evt.target.value.toLowerCase().trim();\n const galleryItems = $44ae6d9db4eaca0f$var$galleryEl.querySelectorAll(\"button\");\n galleryItems.forEach((item)=>{\n const alt = (item.querySelector(\"img\").getAttribute(\"alt\") || \"\").toLowerCase();\n item.hidden = !alt.includes(query);\n });\n $44ae6d9db4eaca0f$var$galleryNoResultsEl.hidden = !!$44ae6d9db4eaca0f$var$galleryEl.querySelector(\"button:not([hidden])\");\n};\nconst $44ae6d9db4eaca0f$var$handleWebShareError = ()=>{\n $44ae6d9db4eaca0f$var$downloadModal.open = false;\n (0, $166cfb2484b08c80$export$af04143326425dbd)(\"There was an error while trying to share your meme.\", \"danger\");\n};\nconst $44ae6d9db4eaca0f$var$handleCapturePhotoError = (evt)=>{\n console.error(evt.detail.error);\n (0, $166cfb2484b08c80$export$af04143326425dbd)(evt.detail.error.message, \"danger\");\n};\nconst $44ae6d9db4eaca0f$var$handleCapturePhotoSuccess = (evt)=>{\n $44ae6d9db4eaca0f$var$videoModal.open = false;\n const image = new Image();\n image.addEventListener(\"load\", $44ae6d9db4eaca0f$var$onImageLoaded);\n image.src = evt.detail.dataURI;\n};\nconst $44ae6d9db4eaca0f$var$handleModalOpen = (evt)=>{\n if (evt.target.id === \"videoModal\") {\n const capturePhotoComponent = $44ae6d9db4eaca0f$var$videoModal.querySelector(\"capture-photo\");\n if (capturePhotoComponent && typeof capturePhotoComponent.startVideoStream === \"function\") capturePhotoComponent.startVideoStream();\n }\n};\nconst $44ae6d9db4eaca0f$var$handleModalClose = (evt)=>{\n if (evt.target.id === \"videoModal\") {\n const capturePhotoComponent = $44ae6d9db4eaca0f$var$videoModal.querySelector(\"capture-photo\");\n if (capturePhotoComponent && typeof capturePhotoComponent.stopVideoStream === \"function\") capturePhotoComponent.stopVideoStream();\n }\n};\n$44ae6d9db4eaca0f$var$fileSelectBtn.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleFileSelectClick);\n$44ae6d9db4eaca0f$var$openVideoModalBtn.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleOpenVideoModalButtonClick);\n$44ae6d9db4eaca0f$var$addTextboxBtn.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleAddTextboxBtnClick);\n$44ae6d9db4eaca0f$var$generateMemeBtn.addEventListener(\"click\", $44ae6d9db4eaca0f$var$generateMeme);\n$44ae6d9db4eaca0f$var$downloadMemeBtn.addEventListener(\"click\", ()=>$44ae6d9db4eaca0f$var$downloadModal.open = false);\n$44ae6d9db4eaca0f$var$imageUrlForm.addEventListener(\"submit\", $44ae6d9db4eaca0f$var$handleImageUploadFromURL);\n$44ae6d9db4eaca0f$var$dropzoneEl.addEventListener(\"files-dropzone-drop-accepted\", $44ae6d9db4eaca0f$var$handleDropFilesAccepted);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"input\", $44ae6d9db4eaca0f$var$handleInputsContainerInput);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"change\", $44ae6d9db4eaca0f$var$handleInputsContainerChange);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleInputsContainerClick);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"pointerdown\", $44ae6d9db4eaca0f$var$handleInputsContainerPointerdown);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"pointerup\", $44ae6d9db4eaca0f$var$handleInputsContainerPointerup);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"pointerout\", $44ae6d9db4eaca0f$var$handleInputsContainerPointerout);\n$44ae6d9db4eaca0f$var$imageUploadMethodSelect.addEventListener(\"change\", $44ae6d9db4eaca0f$var$handleUploadMethodChange);\n$44ae6d9db4eaca0f$var$galleryEl.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleGalleryClick);\n$44ae6d9db4eaca0f$var$gallerySearchEl.addEventListener(\"input\", $44ae6d9db4eaca0f$var$handleGallerySearchInput);\n$44ae6d9db4eaca0f$var$solidColorForm.addEventListener(\"input\", $44ae6d9db4eaca0f$var$handleSolidColorFormInput);\ndocument.addEventListener(\"web-share:error\", $44ae6d9db4eaca0f$var$handleWebShareError);\ndocument.addEventListener(\"capture-photo:error\", $44ae6d9db4eaca0f$var$handleCapturePhotoError);\ndocument.addEventListener(\"capture-photo:success\", $44ae6d9db4eaca0f$var$handleCapturePhotoSuccess);\ndocument.addEventListener(\"me-open\", $44ae6d9db4eaca0f$var$handleModalOpen);\ndocument.addEventListener(\"me-close\", $44ae6d9db4eaca0f$var$handleModalClose);\n$44ae6d9db4eaca0f$var$galleryEl.querySelectorAll(\"button > img\")?.forEach((image)=>{\n image.setAttribute(\"title\", image.getAttribute(\"alt\"));\n});\n$44ae6d9db4eaca0f$var$textOptions.forEach((item, index)=>{\n $44ae6d9db4eaca0f$var$inputsContainer.appendChild((0, $50a37fdc18d479c2$export$293a4b86a6fe2398)(index, item));\n});\n$44ae6d9db4eaca0f$var$dropzoneEl.accept = (0, $33dea9d9a6da4c9a$export$63e7bed68b07a85c);\n(0, $055531bbd0af154c$export$6874249d87f2602a).forEach(({ name: name, path: path, style: style, weight: weight })=>{\n (0, $055531bbd0af154c$export$59eceaef0c7797b2)(name, path, {\n style: style,\n weight: weight\n });\n});\n\n})();\n//# sourceMappingURL=index.4f090451.js.map\n","\"use strict\";\n\nvar mapping = new Map();\nfunction register(baseUrl, manifest) {\n for (var i = 0; i < manifest.length - 1; i += 2) {\n mapping.set(manifest[i], {\n baseUrl: baseUrl,\n path: manifest[i + 1]\n });\n }\n}\nfunction resolve(id) {\n var resolved = mapping.get(id);\n if (resolved == null) {\n throw new Error('Could not resolve bundle with id ' + id);\n }\n return new URL(resolved.path, resolved.baseUrl).toString();\n}\nmodule.exports.register = register;\nmodule.exports.resolve = resolve;","\"use strict\";\n\nvar bundleURL = {};\nfunction getBundleURLCached(id) {\n var value = bundleURL[id];\n if (!value) {\n value = getBundleURL();\n bundleURL[id] = value;\n }\n return value;\n}\nfunction getBundleURL() {\n try {\n throw new Error();\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g);\n if (matches) {\n // The first two stack frames will be this function and getBundleURLCached.\n // Use the 3rd one, which will be a runtime in the original bundle.\n return getBaseURL(matches[2]);\n }\n }\n return '/';\n}\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/.+)\\/[^/]+$/, '$1') + '/';\n}\n\n// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported.\nfunction getOrigin(url) {\n var matches = ('' + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^/]+/);\n if (!matches) {\n throw new Error('Origin not found');\n }\n return matches[0];\n}\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\nexports.getOrigin = getOrigin;","require('./helpers/bundle-manifest').register(require('./helpers/bundle-url').getBundleURL('8tAhj'),JSON.parse(\"[\\\"8tAhj\\\",\\\"index.4f090451.js\\\",\\\"cIoLp\\\",\\\"Pressuru.684952ea.ttf\\\",\\\"a9OJN\\\",\\\"Oswald-Regular.89ec7d89.ttf\\\",\\\"jOuj0\\\",\\\"Oswald-Bold.0f6a7ca6.ttf\\\",\\\"ePq3V\\\",\\\"Roboto-Regular.ca197847.ttf\\\",\\\"9WQUU\\\",\\\"Roboto-Bold.fdb9b54a.ttf\\\",\\\"hIywO\\\",\\\"RobotoCondensed-Regular.d585f5c7.ttf\\\",\\\"ab1rw\\\",\\\"RobotoCondensed-Bold.e1f96d4b.ttf\\\",\\\"j4ruO\\\",\\\"CourierPrime-Regular.3a25a501.ttf\\\",\\\"3nnD2\\\",\\\"CourierPrime-Bold.3d6bf689.ttf\\\",\\\"8fsWK\\\",\\\"OpenSans-Regular.edf9e01b.ttf\\\",\\\"5JXG6\\\",\\\"OpenSans-Bold.8fceb72b.ttf\\\",\\\"9FH7D\\\",\\\"index.4e55d6a2.css\\\"]\"));","import { isWebShareSupported } from '@georapbox/web-share-element/dist/is-web-share-supported.js';\nimport '@georapbox/web-share-element/dist/web-share-defined.js';\nimport '@georapbox/capture-photo-element/dist/capture-photo-defined.js';\nimport '@georapbox/modal-element/dist/modal-element-defined.js';\nimport '@georapbox/files-dropzone-element/dist/files-dropzone-defined.js';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport '../css/main.css';\nimport { arrayRemove } from './utils/array-remove.js';\nimport { uid } from './utils/uid.js';\nimport { ACCEPTED_MIME_TYPES } from './constants.js';\nimport { customFonts, loadCustomFont } from './custom-fonts.js';\nimport { fileFromUrl } from './file-from-url.js';\nimport { toastAlert } from './toast-alert.js';\nimport { createTextBox } from './create-text-box.js';\nimport { drawCanvas } from './draw-canvas.js';\n\nconst videoModal = document.getElementById('videoModal');\nconst downloadModal = document.getElementById('downloadModal');\nconst canvas = document.getElementById('canvas');\nconst dropzoneEl = document.querySelector('files-dropzone');\nconst instructionsEl = document.getElementById('instructions');\nconst ctx = canvas.getContext('2d');\nconst imageUploadMethodSelect = document.getElementById('imageUploadMethodSelect');\nconst fileSelectBtn = document.getElementById('fileSelectBtn');\nconst imageUrlForm = document.getElementById('imageUrlForm');\nconst addTextboxBtn = document.getElementById('addTextboxBtn');\nconst inputsContainer = document.getElementById('inputsContainer');\nconst generateMemeBtn = document.getElementById('generateMemeBtn');\nconst openVideoModalBtn = document.getElementById('openVideoModalBtn');\nconst downloadMemeBtn = document.getElementById('downloadMemeBtn');\nconst downloadMemePreview = document.getElementById('downloadMemePreview');\nconst webShareComponent = document.querySelector('web-share');\nconst galleryEl = document.getElementById('gallery');\nconst gallerySearchEl = document.getElementById('gallerySearch');\nconst galleryNoResultsEl = galleryEl.querySelector('.gallery__no-results');\nconst solidColorForm = document.getElementById('solidColorForm');\nconst uploadMethodEls = document.querySelectorAll('.upload-method');\nlet selectedImage = null;\nlet reqAnimFrame = null;\n\nconst defaultTextOptions = {\n _isSettingsOpen: false,\n text: '',\n fillColor: '#ffffff',\n shadowColor: '#000000',\n font: 'Pressuru',\n fontSize: 40,\n fontWeight: 'normal',\n textAlign: 'center',\n shadowBlur: 3,\n borderWidth: 1,\n offsetY: 0,\n offsetX: 0,\n rotate: 0,\n allCaps: true\n};\n\nlet textOptions = [\n { ...defaultTextOptions }\n];\n\nconst generateMeme = async () => {\n const dataUrl = canvas.toDataURL('image/png');\n\n // Prepare download link\n const downloadLink = dataUrl.replace('image/png', 'image/octet-stream');\n downloadMemeBtn.download = `${uid('meme')}.png`;\n downloadMemeBtn.href = downloadLink;\n downloadMemePreview.width = canvas.width;\n downloadMemePreview.height = canvas.height;\n downloadMemePreview.src = downloadLink;\n\n // Prepare for sharing file\n if (isWebShareSupported()) {\n try {\n const file = await fileFromUrl({\n url: dataUrl,\n filename: `${uid('meme')}.png`,\n mimeType: 'image/png'\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file && isWebShareSupported({ files: [file] })) {\n webShareComponent.shareFiles = [file];\n webShareComponent.hidden = false;\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n window.requestAnimationFrame(() => {\n downloadModal.open = true;\n });\n};\n\nconst onImageLoaded = evt => {\n const MAX_WIDTH = 4000;\n const MAX_HEIGHT = 3000;\n let width = evt.target.width;\n let height = evt.target.height;\n\n if (width > height) {\n if (width > MAX_WIDTH) {\n height *= MAX_WIDTH / width;\n width = MAX_WIDTH;\n }\n } else {\n if (height > MAX_HEIGHT) {\n width *= MAX_HEIGHT / height;\n height = MAX_HEIGHT;\n }\n }\n canvas.width = width;\n canvas.height = height;\n\n selectedImage = evt.target;\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n generateMemeBtn.disabled = false;\n canvas.hidden = false;\n instructionsEl.hidden = true;\n};\n\nconst handleSolidColorFormInput = evt => {\n const DEFAULT_WIDTH = 600;\n const DEFAULT_HEIGHT = 400;\n\n if (evt.target === solidColorForm['canvasColor']) {\n selectedImage = evt.target.value;\n }\n\n if (typeof selectedImage === 'string') {\n canvas.width = Number(solidColorForm['canvasWidth'].value) || DEFAULT_WIDTH;\n canvas.height = Number(solidColorForm['canvasHeight'].value) || DEFAULT_HEIGHT;\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n generateMemeBtn.disabled = false;\n canvas.hidden = false;\n instructionsEl.hidden = true;\n }\n};\n\nconst handleFileSelect = file => {\n if (!file) {\n return;\n }\n\n const image = new Image();\n const reader = new FileReader();\n\n reader.addEventListener('load', function (evt) {\n const data = evt.target.result;\n image.addEventListener('load', onImageLoaded);\n image.src = data;\n });\n\n reader.readAsDataURL(file);\n};\n\nconst handleOpenVideoModalButtonClick = () => {\n videoModal.open = true;\n};\n\nconst handleTextPropChange = (element, index, prop) => {\n if (element.type === 'checkbox') {\n textOptions[index][prop] = element.checked;\n } else if (element.type === 'number') {\n textOptions[index][prop] = Number(element.value);\n } else {\n textOptions[index][prop] = element.value;\n }\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n};\n\nconst handleAddTextboxBtnClick = () => {\n const textOptionsLength = textOptions.length;\n const newTextBox = createTextBox(textOptionsLength, defaultTextOptions);\n\n textOptions.push({ ...defaultTextOptions });\n inputsContainer.appendChild(newTextBox);\n newTextBox.querySelector('[data-input=\"text\"]').focus();\n};\n\nconst handleImageUploadFromURL = async evt => {\n evt.preventDefault();\n\n const form = evt.target;\n const submitButton = form.querySelector('button[type=\"submit\"]');\n const imageUrl = form['imageUrl'].value;\n\n if (!imageUrl.trim()) {\n return;\n }\n\n submitButton.disabled = true;\n submitButton.querySelector('.spinner').hidden = false;\n submitButton.querySelector('.label').hidden = true;\n\n try {\n const file = await fileFromUrl({\n url: imageUrl\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file) {\n handleFileSelect(file);\n }\n } catch (err) {\n toastAlert(`Failed to load image from \"${imageUrl}\".`, 'danger');\n } finally {\n submitButton.disabled = false;\n submitButton.querySelector('.spinner').hidden = true;\n submitButton.querySelector('.label').hidden = false;\n }\n};\n\nconst moveText = (offsetDir, sign, index) => () => {\n const textBoxSection = document.querySelectorAll('[data-section=\"textBox\"]')[index];\n const offsetYInput = textBoxSection.querySelector('[data-input=\"offsetY\"]');\n const offsetXInput = textBoxSection.querySelector('[data-input=\"offsetX\"]');\n\n if (offsetDir === 'offsetY') {\n if (sign === '-') {\n textOptions[index].offsetY -= 1;\n }\n\n if (sign === '+') {\n textOptions[index].offsetY += 1;\n }\n\n offsetYInput.value = textOptions[index].offsetY;\n }\n\n if (offsetDir === 'offsetX') {\n if (sign === '-') {\n textOptions[index].offsetX -= 1;\n }\n\n if (sign === '+') {\n textOptions[index].offsetX += 1;\n }\n\n offsetXInput.value = textOptions[index].offsetX;\n }\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n reqAnimFrame = requestAnimationFrame(moveText(offsetDir, sign, index));\n};\n\nconst handleUploadMethodChange = evt => {\n uploadMethodEls.forEach(el => el.hidden = el.id !== evt.target.value);\n};\n\nconst handleFileSelectClick = () => {\n if (typeof dropzoneEl.openFileDialog === 'function') {\n dropzoneEl.openFileDialog();\n }\n};\n\nconst handleDropFilesAccepted = evt => {\n const [file] = evt.detail.acceptedFiles;\n\n if (file) {\n handleFileSelect(file);\n }\n};\n\nconst handleInputsContainerInput = evt => {\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let prop;\n\n if (element.matches('[data-input=\"text\"]')) {\n prop = 'text';\n } else if (element.matches('[data-input=\"fillColor\"]')) {\n prop = 'fillColor';\n } else if (element.matches('[data-input=\"shadowColor\"]')) {\n prop = 'shadowColor';\n } else if (element.matches('[data-input=\"font\"]')) {\n prop = 'font';\n } else if (element.matches('[data-input=\"fontSize\"]')) {\n prop = 'fontSize';\n } else if (element.matches('[data-input=\"fontWeight\"]')) {\n prop = 'fontWeight';\n } else if (element.matches('[data-input=\"textAlign\"]')) {\n prop = 'textAlign';\n } else if (element.matches('[data-input=\"shadowBlur\"]')) {\n prop = 'shadowBlur';\n } else if (element.matches('[data-input=\"offsetY\"]')) {\n prop = 'offsetY';\n } else if (element.matches('[data-input=\"offsetX\"]')) {\n prop = 'offsetX';\n } else if (element.matches('[data-input=\"rotate\"]')) {\n prop = 'rotate';\n } else if (element.matches('[data-input=\"borderWidth\"]')) {\n prop = 'borderWidth';\n }\n\n if (prop) {\n handleTextPropChange(element, index, prop);\n }\n};\n\nconst handleInputsContainerChange = evt => {\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let prop;\n\n if (element.matches('[data-input=\"allCaps\"]')) {\n prop = 'allCaps';\n }\n\n if (prop) {\n handleTextPropChange(element, index, prop);\n }\n};\n\nconst handleInputsContainerClick = evt => {\n const element = evt.target;\n\n if (element.matches('[data-button=\"settings\"]')) {\n const textBoxIndex = element.closest('[data-section=\"textBox\"]').getAttribute('data-index');\n const textBoxEls = document.querySelectorAll('[data-section=\"textBox\"]');\n\n textBoxEls.forEach((el, index) => {\n const settingsEl = el.querySelector('[data-section=\"settings\"]');\n\n if (el.getAttribute('data-index') === textBoxIndex) {\n settingsEl.hidden = !settingsEl.hidden;\n textOptions[index]._isSettingsOpen = !textOptions[index]._isSettingsOpen;\n } else {\n settingsEl.hidden = true;\n textOptions[index]._isSettingsOpen = false;\n }\n });\n }\n\n if (element.matches('[data-button=\"delete-text-box\"]')) {\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let confirm = true;\n\n if (textOptions[index].text.trim()) {\n confirm = window.confirm('Are you sure you want to remove this text box?');\n }\n\n if (confirm) {\n textOptions = arrayRemove(textOptions, index);\n inputsContainer.querySelectorAll('[data-section=\"textBox\"]').forEach(el => el.remove());\n textOptions.forEach((item, index) => inputsContainer.appendChild(createTextBox(index, item)));\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n }\n }\n};\n\nconst handleInputsContainerPointerdown = evt => {\n const element = evt.target;\n const textBoxEl = element.closest('[data-section=\"textBox\"]');\n\n if (!textBoxEl) {\n return;\n }\n\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton) {\n return;\n }\n\n const offsetDir = element.getAttribute('data-move');\n const sign = element.getAttribute('data-sign');\n\n reqAnimFrame = requestAnimationFrame(moveText(offsetDir, sign, index));\n};\n\nconst handleInputsContainerPointerup = evt => {\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton) {\n return;\n }\n\n cancelAnimationFrame(reqAnimFrame);\n reqAnimFrame = null;\n};\n\nconst handleInputsContainerPointerout = evt => {\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton || !reqAnimFrame) {\n return;\n }\n\n cancelAnimationFrame(reqAnimFrame);\n reqAnimFrame = null;\n};\n\nconst handleGalleryClick = async evt => {\n const button = evt.target.closest('button');\n\n if (!button) {\n return;\n }\n\n const img = button.querySelector('img');\n\n try {\n const file = await fileFromUrl({\n url: img.src\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file) {\n handleFileSelect(file);\n }\n } catch (err) {\n toastAlert(`Failed to load image: \"${img.alt}\".`, 'danger');\n }\n};\n\nconst handleGallerySearchInput = evt => {\n const query = evt.target.value.toLowerCase().trim();\n const galleryItems = galleryEl.querySelectorAll('button');\n\n galleryItems.forEach(item => {\n const alt = (item.querySelector('img').getAttribute('alt') || '').toLowerCase();\n item.hidden = !alt.includes(query);\n });\n\n galleryNoResultsEl.hidden = !!galleryEl.querySelector('button:not([hidden])');\n};\n\nconst handleWebShareError = () => {\n downloadModal.open = false;\n toastAlert('There was an error while trying to share your meme.', 'danger');\n};\n\nconst handleCapturePhotoError = evt => {\n console.error(evt.detail.error);\n toastAlert(evt.detail.error.message, 'danger');\n};\n\nconst handleCapturePhotoSuccess = evt => {\n videoModal.open = false;\n const image = new Image();\n image.addEventListener('load', onImageLoaded);\n image.src = evt.detail.dataURI;\n};\n\nconst handleModalOpen = evt => {\n if (evt.target.id === 'videoModal') {\n const capturePhotoComponent = videoModal.querySelector('capture-photo');\n\n if (capturePhotoComponent && typeof capturePhotoComponent.startVideoStream === 'function') {\n capturePhotoComponent.startVideoStream();\n }\n }\n};\n\nconst handleModalClose = evt => {\n if (evt.target.id === 'videoModal') {\n const capturePhotoComponent = videoModal.querySelector('capture-photo');\n\n if (capturePhotoComponent && typeof capturePhotoComponent.stopVideoStream === 'function') {\n capturePhotoComponent.stopVideoStream();\n }\n }\n};\n\nfileSelectBtn.addEventListener('click', handleFileSelectClick);\nopenVideoModalBtn.addEventListener('click', handleOpenVideoModalButtonClick);\naddTextboxBtn.addEventListener('click', handleAddTextboxBtnClick);\ngenerateMemeBtn.addEventListener('click', generateMeme);\ndownloadMemeBtn.addEventListener('click', () => downloadModal.open = false);\nimageUrlForm.addEventListener('submit', handleImageUploadFromURL);\ndropzoneEl.addEventListener('files-dropzone-drop-accepted', handleDropFilesAccepted);\ninputsContainer.addEventListener('input', handleInputsContainerInput);\ninputsContainer.addEventListener('change', handleInputsContainerChange);\ninputsContainer.addEventListener('click', handleInputsContainerClick);\ninputsContainer.addEventListener('pointerdown', handleInputsContainerPointerdown);\ninputsContainer.addEventListener('pointerup', handleInputsContainerPointerup);\ninputsContainer.addEventListener('pointerout', handleInputsContainerPointerout);\nimageUploadMethodSelect.addEventListener('change', handleUploadMethodChange);\ngalleryEl.addEventListener('click', handleGalleryClick);\ngallerySearchEl.addEventListener('input', handleGallerySearchInput);\nsolidColorForm.addEventListener('input', handleSolidColorFormInput);\ndocument.addEventListener('web-share:error', handleWebShareError);\ndocument.addEventListener('capture-photo:error', handleCapturePhotoError);\ndocument.addEventListener('capture-photo:success', handleCapturePhotoSuccess);\ndocument.addEventListener('me-open', handleModalOpen);\ndocument.addEventListener('me-close', handleModalClose);\n\ngalleryEl.querySelectorAll('button > img')?.forEach(image => {\n image.setAttribute('title', image.getAttribute('alt'));\n});\n\ntextOptions.forEach((item, index) => {\n inputsContainer.appendChild(createTextBox(index, item));\n});\n\ndropzoneEl.accept = ACCEPTED_MIME_TYPES;\n\ncustomFonts.forEach(({ name, path, style, weight }) => {\n loadCustomFont(name, path, { style, weight });\n});\n","function a(a){return null!==a&&\"object\"==typeof a?\"share\"in navigator&&\"canShare\"in navigator&&navigator.canShare(a):\"share\"in navigator}export{a as isWebShareSupported};\n//# sourceMappingURL=is-web-share-supported.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $e179325634270afd$exports = {};\n\n$parcel$export($e179325634270afd$exports, \"WebShare\", function () { return $e179325634270afd$export$30b344bef3e55b67; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ /**\n * Represents the data to share.\n *\n * @typedef {Object} ShareData\n * @property {string} [url] - The URL to share.\n * @property {string} [title] - The title to share.\n * @property {string} [text] - The text to share.\n * @property {File[]} [files] - The files to share.\n */ const $e179325634270afd$var$styles = /* css */ `\n :host {\n display: inline-block;\n }\n`;\nconst $e179325634270afd$var$template = document.createElement(\"template\");\n$e179325634270afd$var$template.innerHTML = /* html */ `\n \n \n`;\n/**\n * @summary A custom element that provides a button to share content.\n * @documentation https://github.com/georapbox/web-share-element\n *\n * @tagname web-share - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {boolean} disabled - Indicates whether the button is disabled.\n * @property {string} shareUrl - The URL to share.\n * @property {string} shareTitle - The title to share.\n * @property {string} shareText - The text to share.\n * @property {File[]} shareFiles - The files to share.\n *\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {string} share-url - Reflects the shareUrl property.\n * @attribute {string} share-title - Reflects the shareTitle property.\n * @attribute {string} share-text - Reflects the shareText property.\n *\n * @slot button - The button to share content.\n * @slot button-content - The content of the button to share content.\n *\n * @csspart button - The button to share content.\n * @csspart button--disabled - The button to share content when disabled.\n *\n * @event web-share:success - Fired when the share operation is successful.\n * @event web-share:abort - Fired when the share operation is aborted.\n * @event web-share:error - Fired when the share operation fails.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method share - Instance method. Shares the shareable data taken from the element's properties.\n */ class $e179325634270afd$export$30b344bef3e55b67 extends HTMLElement {\n /** @type {Nullable} */ #buttonSlot;\n /** @type {Nullable} */ #buttonEl;\n /** @type {File[]} */ #files = [];\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\",\n delegatesFocus: true\n });\n shadowRoot.appendChild($e179325634270afd$var$template.content.cloneNode(true));\n }\n this.#buttonSlot = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null;\n this.#buttonEl = this.#getButton();\n }\n static get observedAttributes() {\n return [\n \"disabled\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"disabled\" && oldValue !== newValue && this.#buttonEl) {\n this.#buttonEl.toggleAttribute(\"disabled\", this.disabled);\n this.#buttonEl.setAttribute(\"aria-disabled\", this.disabled.toString());\n if (this.#buttonEl.part && this.#buttonEl.part.contains(\"button\")) this.#buttonEl.part.toggle(\"button--disabled\", this.disabled);\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"shareUrl\");\n this.#upgradeProperty(\"shareTitle\");\n this.#upgradeProperty(\"shareText\");\n this.#upgradeProperty(\"shareFiles\");\n this.#upgradeProperty(\"disabled\");\n this.#buttonSlot?.addEventListener(\"slotchange\", this.#handleSlotChange);\n this.#buttonEl?.addEventListener(\"click\", this.#handleClick);\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#buttonSlot?.removeEventListener(\"slotchange\", this.#handleSlotChange);\n this.#buttonEl?.removeEventListener(\"click\", this.#handleClick);\n }\n /**\n * @type {boolean} - Indicates whether the button is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */ get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n this.toggleAttribute(\"disabled\", !!value);\n }\n /**\n * @type {string} - The URL to share.\n * @attribute share-url - Reflects the shareUrl property.\n */ get shareUrl() {\n return this.getAttribute(\"share-url\") || \"\";\n }\n set shareUrl(value) {\n this.setAttribute(\"share-url\", value);\n }\n /**\n * @type {string} - The title to share.\n * @attribute share-title - Reflects the shareTitle property.\n */ get shareTitle() {\n return this.getAttribute(\"share-title\") || \"\";\n }\n set shareTitle(value) {\n this.setAttribute(\"share-title\", value);\n }\n /**\n * @type {string} - The text to share.\n * @attribute share-text - Reflects the shareText property.\n */ get shareText() {\n return this.getAttribute(\"share-text\") || \"\";\n }\n set shareText(value) {\n this.setAttribute(\"share-text\", value);\n }\n /**\n * @type {File[]} - The files to share.\n */ get shareFiles() {\n return this.#files;\n }\n set shareFiles(value) {\n if (Array.isArray(value) && value.length > 0) this.#files = value;\n }\n /**\n * Shares the shareable data taken from the element's properties.\n *\n * @returns {Promise} - A promise that resolves when the share operation is complete.\n */ async share() {\n if (this.disabled) return;\n try {\n /** @type {ShareData} */ const shareData = {};\n if (this.shareUrl) shareData.url = this.shareUrl;\n if (this.shareTitle) shareData.title = this.shareTitle;\n if (this.shareText) shareData.text = this.shareText;\n if (Array.isArray(this.shareFiles) && this.shareFiles.length > 0 && navigator.canShare && navigator.canShare({\n files: this.shareFiles\n })) shareData.files = this.shareFiles;\n await navigator.share(shareData);\n this.dispatchEvent(new CustomEvent(\"web-share:success\", {\n bubbles: true,\n composed: true,\n detail: {\n shareData: shareData\n }\n }));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n this.dispatchEvent(new CustomEvent(\"web-share:abort\", {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n return;\n }\n this.dispatchEvent(new CustomEvent(\"web-share:error\", {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n }\n /**\n * Handles the click event on the button.\n *\n * @param {any} evt - The event object.\n */ #handleClick = (evt)=>{\n evt.preventDefault();\n if (this.disabled) return;\n this.share();\n };\n /**\n * Handles the slotchange event on the button slot.\n *\n * @param {any} evt - The event object.\n */ #handleSlotChange = (evt)=>{\n if (evt.target && evt.target.name === \"button\") {\n this.#buttonEl?.removeEventListener(\"click\", this.#handleClick);\n this.#buttonEl = this.#getButton();\n if (this.#buttonEl) {\n this.#buttonEl.addEventListener(\"click\", this.#handleClick);\n if (this.#buttonEl.nodeName !== \"BUTTON\" && !this.#buttonEl.hasAttribute(\"role\")) this.#buttonEl.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Returns the button element from the button slot.\n *\n * @returns {Nullable} - The button element.\n */ #getButton() {\n if (!this.#buttonSlot) return null;\n return this.#buttonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"button\";\n }) || null;\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'shareUrl' | 'shareTitle' | 'shareText' | 'shareFiles' | 'disabled'} prop - The property name to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n static defineCustomElement(elementName = \"web-share\") {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $e179325634270afd$export$30b344bef3e55b67);\n }\n}\n\n\n(0, $e179325634270afd$export$30b344bef3e55b67).defineCustomElement();\n\n\nexport {$e179325634270afd$export$30b344bef3e55b67 as WebShare};\n//# sourceMappingURL=web-share-defined.js.map\n","// @ts-check\n\n/**\n * Check if Web Share API is supported by the platform.\n *\n * @param {import('./web-share').ShareData} [options]\n * @returns {boolean} Returns `true` if Web Share API is supported; otherwise `false`.\n */\nfunction isWebShareSupported(options) {\n if (options !== null && typeof options === 'object') {\n return 'share' in navigator && 'canShare' in navigator && navigator.canShare(options);\n }\n\n return 'share' in navigator;\n}\n\nexport { isWebShareSupported };\n","Object.defineProperty({},\"WebShare\",{get:function(){return s},set:void 0,enumerable:!0,configurable:!0});let t=`\n :host {\n display: inline-block;\n }\n`,e=document.createElement(\"template\");e.innerHTML=`\n \n \n`;class s extends HTMLElement{#t;#e;#s=[];constructor(){super(),this.shadowRoot||this.attachShadow({mode:\"open\",delegatesFocus:!0}).appendChild(e.content.cloneNode(!0)),this.#t=this.shadowRoot?.querySelector('slot[name=\"button\"]')||null,this.#e=this.#i()}static get observedAttributes(){return[\"disabled\"]}attributeChangedCallback(t,e,s){\"disabled\"===t&&e!==s&&this.#e&&(this.#e.toggleAttribute(\"disabled\",this.disabled),this.#e.setAttribute(\"aria-disabled\",this.disabled.toString()),this.#e.part&&this.#e.part.contains(\"button\")&&this.#e.part.toggle(\"button--disabled\",this.disabled))}connectedCallback(){this.#r(\"shareUrl\"),this.#r(\"shareTitle\"),this.#r(\"shareText\"),this.#r(\"shareFiles\"),this.#r(\"disabled\"),this.#t?.addEventListener(\"slotchange\",this.#a),this.#e?.addEventListener(\"click\",this.#n)}disconnectedCallback(){this.#t?.removeEventListener(\"slotchange\",this.#a),this.#e?.removeEventListener(\"click\",this.#n)}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(t){this.toggleAttribute(\"disabled\",!!t)}get shareUrl(){return this.getAttribute(\"share-url\")||\"\"}set shareUrl(t){this.setAttribute(\"share-url\",t)}get shareTitle(){return this.getAttribute(\"share-title\")||\"\"}set shareTitle(t){this.setAttribute(\"share-title\",t)}get shareText(){return this.getAttribute(\"share-text\")||\"\"}set shareText(t){this.setAttribute(\"share-text\",t)}get shareFiles(){return this.#s}set shareFiles(t){Array.isArray(t)&&t.length>0&&(this.#s=t)}async share(){if(!this.disabled)try{let t={};this.shareUrl&&(t.url=this.shareUrl),this.shareTitle&&(t.title=this.shareTitle),this.shareText&&(t.text=this.shareText),Array.isArray(this.shareFiles)&&this.shareFiles.length>0&&navigator.canShare&&navigator.canShare({files:this.shareFiles})&&(t.files=this.shareFiles),await navigator.share(t),this.dispatchEvent(new CustomEvent(\"web-share:success\",{bubbles:!0,composed:!0,detail:{shareData:t}}))}catch(t){if(t instanceof Error&&\"AbortError\"===t.name){this.dispatchEvent(new CustomEvent(\"web-share:abort\",{bubbles:!0,composed:!0,detail:{error:t}}));return}this.dispatchEvent(new CustomEvent(\"web-share:error\",{bubbles:!0,composed:!0,detail:{error:t}}))}}#n=t=>{t.preventDefault(),this.disabled||this.share()};#a=t=>{t.target&&\"button\"===t.target.name&&(this.#e?.removeEventListener(\"click\",this.#n),this.#e=this.#i(),this.#e&&(this.#e.addEventListener(\"click\",this.#n),\"BUTTON\"===this.#e.nodeName||this.#e.hasAttribute(\"role\")||this.#e.setAttribute(\"role\",\"button\")))};#i(){return this.#t&&this.#t.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"button\"===t.getAttribute(\"slot\"))||null}#r(t){if(Object.prototype.hasOwnProperty.call(this,t)){let e=this[t];delete this[t],this[t]=e}}static defineCustomElement(t=\"web-share\"){\"undefined\"==typeof window||window.customElements.get(t)||window.customElements.define(t,s)}}s.defineCustomElement();export{s as WebShare};\n//# sourceMappingURL=web-share-defined.js.map\n","import { WebShare } from './web-share.js';\n\nWebShare.defineCustomElement();\n\nexport { WebShare };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\n/**\n * Represents the data to share.\n *\n * @typedef {Object} ShareData\n * @property {string} [url] - The URL to share.\n * @property {string} [title] - The title to share.\n * @property {string} [text] - The text to share.\n * @property {File[]} [files] - The files to share.\n */\n\nconst styles = /* css */`\n :host {\n display: inline-block;\n }\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */ `\n \n \n`;\n\n/**\n * @summary A custom element that provides a button to share content.\n * @documentation https://github.com/georapbox/web-share-element\n *\n * @tagname web-share - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {boolean} disabled - Indicates whether the button is disabled.\n * @property {string} shareUrl - The URL to share.\n * @property {string} shareTitle - The title to share.\n * @property {string} shareText - The text to share.\n * @property {File[]} shareFiles - The files to share.\n *\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {string} share-url - Reflects the shareUrl property.\n * @attribute {string} share-title - Reflects the shareTitle property.\n * @attribute {string} share-text - Reflects the shareText property.\n *\n * @slot button - The button to share content.\n * @slot button-content - The content of the button to share content.\n *\n * @csspart button - The button to share content.\n * @csspart button--disabled - The button to share content when disabled.\n *\n * @event web-share:success - Fired when the share operation is successful.\n * @event web-share:abort - Fired when the share operation is aborted.\n * @event web-share:error - Fired when the share operation fails.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method share - Instance method. Shares the shareable data taken from the element's properties.\n */\nclass WebShare extends HTMLElement {\n /** @type {Nullable} */\n #buttonSlot;\n\n /** @type {Nullable} */\n #buttonEl;\n\n /** @type {File[]} */\n #files = [];\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open', delegatesFocus: true });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n this.#buttonSlot = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null;\n this.#buttonEl = this.#getButton();\n }\n\n static get observedAttributes() {\n return ['disabled'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'disabled' && oldValue !== newValue && this.#buttonEl) {\n this.#buttonEl.toggleAttribute('disabled', this.disabled);\n this.#buttonEl.setAttribute('aria-disabled', this.disabled.toString());\n\n if (this.#buttonEl.part && this.#buttonEl.part.contains('button')) {\n this.#buttonEl.part.toggle('button--disabled', this.disabled);\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('shareUrl');\n this.#upgradeProperty('shareTitle');\n this.#upgradeProperty('shareText');\n this.#upgradeProperty('shareFiles');\n this.#upgradeProperty('disabled');\n\n this.#buttonSlot?.addEventListener('slotchange', this.#handleSlotChange);\n this.#buttonEl?.addEventListener('click', this.#handleClick);\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#buttonSlot?.removeEventListener('slotchange', this.#handleSlotChange);\n this.#buttonEl?.removeEventListener('click', this.#handleClick);\n }\n\n /**\n * @type {boolean} - Indicates whether the button is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n set disabled(value) {\n this.toggleAttribute('disabled', !!value);\n }\n\n /**\n * @type {string} - The URL to share.\n * @attribute share-url - Reflects the shareUrl property.\n */\n get shareUrl() {\n return this.getAttribute('share-url') || '';\n }\n\n set shareUrl(value) {\n this.setAttribute('share-url', value);\n }\n\n /**\n * @type {string} - The title to share.\n * @attribute share-title - Reflects the shareTitle property.\n */\n get shareTitle() {\n return this.getAttribute('share-title') || '';\n }\n\n set shareTitle(value) {\n this.setAttribute('share-title', value);\n }\n\n /**\n * @type {string} - The text to share.\n * @attribute share-text - Reflects the shareText property.\n */\n get shareText() {\n return this.getAttribute('share-text') || '';\n }\n\n set shareText(value) {\n this.setAttribute('share-text', value);\n }\n\n /**\n * @type {File[]} - The files to share.\n */\n get shareFiles() {\n return this.#files;\n }\n\n set shareFiles(value) {\n if (Array.isArray(value) && value.length > 0) {\n this.#files = value;\n }\n }\n\n /**\n * Shares the shareable data taken from the element's properties.\n *\n * @returns {Promise} - A promise that resolves when the share operation is complete.\n */\n async share() {\n if (this.disabled) {\n return;\n }\n\n try {\n /** @type {ShareData} */\n const shareData = {};\n\n if (this.shareUrl) {\n shareData.url = this.shareUrl;\n }\n\n if (this.shareTitle) {\n shareData.title = this.shareTitle;\n }\n\n if (this.shareText) {\n shareData.text = this.shareText;\n }\n\n if (\n Array.isArray(this.shareFiles)\n && this.shareFiles.length > 0\n && navigator.canShare\n && navigator.canShare({ files: this.shareFiles })\n ) {\n shareData.files = this.shareFiles;\n }\n\n await navigator.share(shareData);\n\n this.dispatchEvent(new CustomEvent('web-share:success', {\n bubbles: true,\n composed: true,\n detail: { shareData }\n }));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.dispatchEvent(new CustomEvent('web-share:abort', {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n\n return;\n }\n\n this.dispatchEvent(new CustomEvent('web-share:error', {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n }\n\n /**\n * Handles the click event on the button.\n *\n * @param {any} evt - The event object.\n */\n #handleClick = evt => {\n evt.preventDefault();\n\n if (this.disabled) {\n return;\n }\n\n this.share();\n };\n\n /**\n * Handles the slotchange event on the button slot.\n *\n * @param {any} evt - The event object.\n */\n #handleSlotChange = evt => {\n if (evt.target && evt.target.name === 'button') {\n this.#buttonEl?.removeEventListener('click', this.#handleClick);\n this.#buttonEl = this.#getButton();\n\n if (this.#buttonEl) {\n this.#buttonEl.addEventListener('click', this.#handleClick);\n\n if (this.#buttonEl.nodeName !== 'BUTTON' && !this.#buttonEl.hasAttribute('role')) {\n this.#buttonEl.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Returns the button element from the button slot.\n *\n * @returns {Nullable} - The button element.\n */\n #getButton() {\n if (!this.#buttonSlot) {\n return null;\n }\n\n return this.#buttonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'button';\n }) || null;\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'shareUrl' | 'shareTitle' | 'shareText' | 'shareFiles' | 'disabled'} prop - The property name to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n static defineCustomElement(elementName = 'web-share') {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, WebShare);\n }\n }\n}\n\nexport { WebShare };\n","Object.defineProperty({},\"CapturePhoto\",{get:function(){return n},set:void 0,enumerable:!0,configurable:!0});let t=(t,e,i)=>(Number.isNaN(e)&&(e=0),Number.isNaN(i)&&(i=0),Math.min(Math.max(t,Math.min(e,i)),Math.max(e,i))),e=\"capture-photo\",i=`\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`,o=document.createElement(\"template\");o.innerHTML=`\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;class n extends HTMLElement{#t={};#e=null;#i=null;#o=null;#n=null;#a=null;#s=null;#r=null;#l=null;constructor(){super(),this.#t=this.getSupportedConstraints(),this.shadowRoot||this.attachShadow({mode:\"open\"}).appendChild(o.content.cloneNode(!0))}static get observedAttributes(){return[\"no-image\",\"facing-mode\",\"camera-resolution\",\"pan\",\"tilt\",\"zoom\"]}attributeChangedCallback(t,e,i){if(!this.isConnected)return;let o=this.getTrackCapabilities(),n=this.getTrackSettings();if(\"no-image\"===t&&e!==i&&this.#u(),\"facing-mode\"===t&&e!==i&&\"facingMode\"in this.#t){let t=[\"user\",\"environment\"].includes(this.facingMode||\"\");\"facingMode\"in n&&t&&(this.stopVideoStream(),this.startVideoStream())}if(\"camera-resolution\"===t&&e!==i&&\"string\"==typeof this.cameraResolution&&this.cameraResolution.trim().length>0){let[t=0,e=0]=this.cameraResolution.split(\"x\").map(t=>Number(t));if(t>0&&e>0&&\"width\"in o&&\"height\"in o){let i=!!(o.width?.min&&o.width?.max)&&t>=o?.width?.min&&t<=o?.width?.max,a=!!(o.height?.min&&o.height?.max)&&e>=o?.height?.min&&e<=o?.height?.max;\"width\"in n&&\"height\"in n&&i&&a&&(this.stopVideoStream(),this.startVideoStream())}}if(\"pan\"===t&&e!==i&&\"pan\"in this.#t){let t=!!(\"pan\"in o&&o.pan?.min&&o.pan?.max)&&this.pan>=o.pan.min&&this.pan<=o.pan.max;\"pan\"in n&&\"number\"==typeof this.pan&&t&&this.#h(\"pan\",this.pan)}if(\"tilt\"===t&&e!==i&&\"tilt\"in this.#t){let t=!!(\"tilt\"in o&&o.tilt?.min&&o.tilt?.max)&&this.tilt>=o.tilt.min&&this.tilt<=o.tilt.max;\"tilt\"in n&&\"number\"==typeof this.tilt&&t&&this.#h(\"tilt\",this.tilt)}if(\"zoom\"===t&&e!==i&&\"zoom\"in this.#t){let t=!!(\"zoom\"in o&&o.zoom?.min&&o.zoom?.max)&&this.zoom>=o.zoom.min&&this.zoom<=o.zoom.max;\"zoom\"in n&&\"number\"==typeof this.zoom&&t&&this.#h(\"zoom\",this.zoom)}}connectedCallback(){if(this.#d(\"autpoPlay\"),this.#d(\"noImage\"),this.#d(\"facingMode\"),this.#d(\"cameraResolution\"),this.#d(\"pan\"),this.#d(\"tilt\"),this.#d(\"zoom\"),this.#d(\"calculateFileSize\"),this.#i=this.shadowRoot?.querySelector(\"canvas\")||null,this.#o=this.shadowRoot?.getElementById(\"output\")||null,this.#n=this.shadowRoot?.querySelector(\"video\")||null,this.#a=this.shadowRoot?.querySelector('slot[name=\"capture-button\"]')||null,this.#s=this.#c(),this.#r=this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]')||null,this.#l=this.#m(),this.#n?.addEventListener(\"loadedmetadata\",this.#p),this.#a?.addEventListener(\"slotchange\",this.#g),this.#s?.addEventListener(\"click\",this.#b),this.#r?.addEventListener(\"slotchange\",this.#f),this.#l?.addEventListener(\"click\",this.#v),!n.isSupported())return this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:{name:\"NotSupportedError\",message:\"Not supported\"}}}));this.autoPlay&&this.startVideoStream()}disconnectedCallback(){this.stopVideoStream(),this.#l?.removeEventListener(\"click\",this.#v),this.#s?.removeEventListener(\"click\",this.#b),this.#n?.removeEventListener(\"canplay\",this.#p),this.#a?.removeEventListener(\"slotchange\",this.#g),this.#r?.removeEventListener(\"slotchange\",this.#f)}get autoPlay(){return this.hasAttribute(\"auto-play\")}set autoPlay(t){this.toggleAttribute(\"auto-play\",!!t)}get noImage(){return this.hasAttribute(\"no-image\")}set noImage(t){this.toggleAttribute(\"no-image\",!!t)}get facingMode(){return this.getAttribute(\"facing-mode\")||\"user\"}set facingMode(t){this.setAttribute(\"facing-mode\",t)}get cameraResolution(){return this.getAttribute(\"camera-resolution\")||\"\"}set cameraResolution(t){this.setAttribute(\"camera-resolution\",t)}get pan(){return Number(this.getAttribute(\"pan\"))||0}set pan(t){this.setAttribute(\"pan\",null!=t?t.toString():t)}get tilt(){return Number(this.getAttribute(\"tilt\"))||0}set tilt(t){this.setAttribute(\"tilt\",null!=t?t.toString():t)}get zoom(){return Number(this.getAttribute(\"zoom\"))||1}set zoom(t){this.setAttribute(\"zoom\",null!=t?t.toString():t)}get loading(){return this.hasAttribute(\"loading\")}get calculateFileSize(){return this.hasAttribute(\"calculate-file-size\")}set calculateFileSize(t){this.toggleAttribute(\"calculate-file-size\",!!t)}#v=t=>{t.preventDefault(),this.loading||(this.facingMode=\"user\"!==this.facingMode&&this.facingMode?\"user\":\"environment\")};#b=t=>{t.preventDefault(),this.capture()};#p=t=>{let i=t.target;i.play().then(()=>{this.dispatchEvent(new CustomEvent(`${e}:video-play`,{bubbles:!0,composed:!0,detail:{video:i}}))}).catch(t=>{this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}).finally(()=>{this.removeAttribute(\"loading\")})};#u(){this.#o&&Array.from(this.#o.childNodes).forEach(t=>t.remove())}#h(e,i){if(!this.#e||!e||!i)return;let[o]=this.#e.getVideoTracks(),n=this.getTrackCapabilities();e in this.getTrackSettings()&&o.applyConstraints({advanced:[{[e]:t(Number(i),n[e]?.min||1,n[e]?.max||1)}]})}#g=t=>{t.target?.name===\"capture-button\"&&(this.#s?.removeEventListener(\"click\",this.#b),this.#s=this.#c(),this.#s&&(this.#s.addEventListener(\"click\",this.#b),\"BUTTON\"===this.#s.nodeName||this.#s.hasAttribute(\"role\")||this.#s.setAttribute(\"role\",\"button\")))};#f=t=>{t.target?.name===\"facing-mode-button\"&&(this.#l?.removeEventListener(\"click\",this.#v),this.#l=this.#m(),this.#l&&(this.#l.addEventListener(\"click\",this.#v),\"BUTTON\"===this.#l.nodeName||this.#l.hasAttribute(\"role\")||this.#l.setAttribute(\"role\",\"button\")))};#m(){return this.#r&&this.#r.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"facing-mode-button\"===t.getAttribute(\"slot\"))||null}#c(){return this.#a&&this.#a.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"capture-button\"===t.getAttribute(\"slot\"))||null}#d(t){if(Object.prototype.hasOwnProperty.call(this,t)){let e=this[t];delete this[t],this[t]=e}}async startVideoStream(){if(!n.isSupported()||this.#e)return;this.setAttribute(\"loading\",\"\");let t={video:{facingMode:{ideal:this.facingMode||\"user\"},pan:!0,tilt:!0,zoom:!0},audio:!1};if(\"string\"==typeof this.cameraResolution&&this.cameraResolution.trim().length>0){let[e=0,i=0]=this.cameraResolution.split(\"x\").map(t=>Number(t));e>0&&i>0&&(t.video.width=e,t.video.height=i)}try{this.#e=await navigator.mediaDevices.getUserMedia(t),this.#n&&(this.#n.srcObject=this.#e),this.#h(\"pan\",this.pan),this.#h(\"tilt\",this.tilt),this.#h(\"zoom\",this.zoom);let e=this.getTrackSettings();\"facingMode\"in e&&this.#r&&(this.#r.hidden=!1)}catch(t){this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}finally{this.removeAttribute(\"loading\")}}stopVideoStream(){if(!this.#n||!this.#e)return;let[t]=this.#e.getVideoTracks();t?.stop(),this.#n.srcObject=null,this.#e=null}async capture(){if(!this.loading&&this.#i&&this.#n)try{let t=this.#i.getContext(\"2d\"),i=this.#n.videoWidth,o=this.#n.videoHeight;this.#i.width=i,this.#i.height=o,t?.drawImage(this.#n,0,0,i,o);let n=this.#i.toDataURL(\"image/png\");if(\"string\"==typeof n&&n.includes(\"data:image\")){if(!this.noImage){let t=new Image;t.src=n,t.width=i,t.height=o,t.setAttribute(\"part\",\"output-image\"),this.#u(),this.#o?.appendChild(t)}let t={dataURI:n,width:i,height:o};if(this.calculateFileSize)try{let e=await fetch(n),i=(await e.blob()).size;i&&(t.size=i)}catch(t){}this.dispatchEvent(new CustomEvent(`${e}:success`,{bubbles:!0,composed:!0,detail:t}))}}catch(t){this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}}getSupportedConstraints(){return n.isSupported()&&navigator.mediaDevices.getSupportedConstraints()||{}}getTrackCapabilities(){if(!this.#e)return{};let[t]=this.#e.getVideoTracks();return t&&\"function\"==typeof t.getCapabilities&&t.getCapabilities()||{}}getTrackSettings(){if(!this.#e)return{};let[t]=this.#e.getVideoTracks();return t&&\"function\"==typeof t.getSettings&&t.getSettings()||{}}static isSupported(){return!!navigator.mediaDevices?.getUserMedia}static defineCustomElement(t=e){\"undefined\"==typeof window||window.customElements.get(t)||window.customElements.define(t,n)}}n.defineCustomElement();export{n as CapturePhoto};\n//# sourceMappingURL=capture-photo-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $c290816263f90981$exports = {};\n\n$parcel$export($c290816263f90981$exports, \"CapturePhoto\", function () { return $c290816263f90981$export$cc30a98fe3890794; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ /**\n * @typedef {Object} ExtendedMediaTrackCapabilities\n * @property {ULongRange} [width] - The width of the video track.\n * @property {ULongRange} [height] - The height of the video track.\n * @property {ULongRange} [pan] - The pan level of the camera.\n * @property {ULongRange} [tilt] - The tilt level of the camera.\n * @property {ULongRange} [zoom] - The zoom level of the camera.\n * @property {MediaTrackCapabilities} [nativeMediaTrackCapabilities] - The native track capabilities.\n */ /**\n * @typedef {Object} ExtendedMediaTrackConstraints\n * @property {MediaTrackConstraints & {pan: boolean, tilt: boolean, zoom: boolean}} video - The video constraints.\n * @property {MediaTrackConstraints | boolean} audio - The audio constraints.\n */ // @ts-check\n/**\n * Clamps number within the inclusive `min` and `max` bounds,\n * making sure it does not go beyond them on either side.\n * If `min` is greater than `max` the parameters are swapped to support inverted ranges.\n *\n * @param {number} value - The number to clamp.\n * @param {number} lower - The lower bound.\n * @param {number} upper - The upper bound.\n * @throws {TypeError} - If one or more of the arguments passed is not a number.\n * @returns {number} - The clamped number.\n * @example\n *\n * clamp(10, -5, 5);\n * // => 5\n *\n * clamp(-10, -5, 5);\n * // => -5\n *\n * clamp(-15, 0, 100);\n * // => 0\n *\n * clamp(120, 0, 100);\n * // => 100\n *\n * clamp(-5, NaN, 5); // If any of lower or upper bound are `NaN`, they will be converted to `0`.\n * // => 0\n *\n * clamp(120, 100, 0); // The order of lower and upper bounds is reversed (100 > 0)\n * // => 100\n */ const $02ad8beec419df62$export$7d15b64cf5a3a4c4 = (value, lower, upper)=>{\n if (Number.isNaN(lower)) lower = 0;\n if (Number.isNaN(upper)) upper = 0;\n return Math.min(Math.max(value, Math.min(lower, upper)), Math.max(lower, upper));\n};\n\n\nconst $c290816263f90981$var$COMPONENT_NAME = \"capture-photo\";\nconst $c290816263f90981$var$styles = /* css */ `\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`;\nconst $c290816263f90981$var$template = document.createElement(\"template\");\n$c290816263f90981$var$template.innerHTML = /* html */ `\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\n/**\n * @summary A custom element that implements the MediaDevices.getUserMedia() method of the MediaDevices interface to capture a photo in the browser.\n * @documentation https://github.com/georapbox/capture-photo-element\n *\n * @tagname capture-photo This is the default tag name, unless overridden by the `defineCustomElement` method.\n * @extends HTMLElement\n *\n * @property {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @property {boolean} noImage - Whether or not to show the captured image.\n * @property {string} facingMode - The facing mode of the camera.\n * @property {string} cameraResolution - The resolution of the camera.\n * @property {number} pan - The pan value of the camera.\n * @property {number} tilt - The tilt value of the camera.\n * @property {number} zoom - The zoom value of the camera.\n * @property {boolean} loading - Whether or not the video stream is loading.\n * @property {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n *\n * @atttribute {boolean} auto-play - Reflects the autoPlay property.\n * @atttribute {boolean} no-image - Reflects the noImage property.\n * @atttribute {string} facing-mode - Reflects the facingMode property.\n * @atttribute {string} camera-resolution - Reflects the cameraResolution property.\n * @atttribute {number} pan - Reflects the pan property.\n * @atttribute {number} tilt - Reflects the tilt property.\n * @atttribute {number} zoom - Reflects the zoom property.\n * @atttribute {boolean} loading - Reflects the loading property.\n * @atttribute {boolean} calculate-file-size - Reflects the calculateFileSize property.\n *\n * @slot capture-button - The capture button.\n * @slot capture-button-content - The capture button content.\n * @slot facing-mode-button - The facing mode button.\n * @slot facing-mode-button-content - The facing mode button content.\n * @slot actions - The actions container.\n * @slot - A default un-named slot to add content inside the component.\n *\n * @csspart video - The video element.\n * @csspart actions-container - The actions container.\n * @csspart capture-button - The capture button.\n * @csspart facing-mode-button - The facing mode button.\n * @csspart output-container - The output container.\n * @csspart output-image - The output image.\n *\n * @event capture-photo:video-play - Fires when the video stream is successfully playing.\n * @event capture-photo:success - Fires when the photo is successfully captured.\n * @event capture-photo:error - Fires when an error occurs.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method isSupported - Static method. Checks if the MediaDevices.getUserMedia() method is supported.\n * @method startVideoStream - Instance method. Starts the video stream.\n * @method stopVideoStream - Instance method. Stops the video stream.\n * @method capture - Instance method. Captures a photo.\n * @method getSupportedConstraints - Instance method. Gets the supported constraints.\n * @method getTrackCapabilities - Instance method. Gets the track capabilities.\n * @method getTrackSettings - Instance method. Gets the track settings.\n */ class $c290816263f90981$export$cc30a98fe3890794 extends HTMLElement {\n /** @type {MediaTrackSupportedConstraints | {}}*/ #supportedConstraints = {};\n /** @type {Nullable} */ #stream = null;\n /** @type {Nullable} */ #canvasElement = null;\n /** @type {Nullable} */ #outputElement = null;\n /** @type {Nullable} */ #videoElement = null;\n /** @type {Nullable} */ #captureButtonSlot = null;\n /** @type {Nullable} */ #captureButton = null;\n /** @type {Nullable} */ #facingModeButtonSlot = null;\n /** @type {Nullable} */ #facingModeButton = null;\n constructor(){\n super();\n this.#supportedConstraints = this.getSupportedConstraints();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($c290816263f90981$var$template.content.cloneNode(true));\n }\n }\n static get observedAttributes() {\n return [\n \"no-image\",\n \"facing-mode\",\n \"camera-resolution\",\n \"pan\",\n \"tilt\",\n \"zoom\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (!this.isConnected) return;\n /** @type {ExtendedMediaTrackCapabilities} */ const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n if (name === \"no-image\" && oldValue !== newValue) this.#emptyOutputElement();\n if (name === \"facing-mode\" && oldValue !== newValue && \"facingMode\" in this.#supportedConstraints) {\n const isValidFacingMode = [\n \"user\",\n \"environment\"\n ].includes(this.facingMode || \"\");\n if (\"facingMode\" in trackSettings && isValidFacingMode) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n if (name === \"camera-resolution\" && oldValue !== newValue) {\n if (typeof this.cameraResolution === \"string\" && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split(\"x\").map((x)=>Number(x));\n if (width > 0 && height > 0 && \"width\" in trackCapabilities && \"height\" in trackCapabilities) {\n const widthInAllowedRange = trackCapabilities.width?.min && trackCapabilities.width?.max ? width >= trackCapabilities?.width?.min && width <= trackCapabilities?.width?.max : false;\n const heightInAllowedRange = trackCapabilities.height?.min && trackCapabilities.height?.max ? height >= trackCapabilities?.height?.min && height <= trackCapabilities?.height?.max : false;\n if (\"width\" in trackSettings && \"height\" in trackSettings && widthInAllowedRange && heightInAllowedRange) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n }\n }\n if (name === \"pan\" && oldValue !== newValue && \"pan\" in this.#supportedConstraints) {\n const panInAllowedRange = \"pan\" in trackCapabilities && trackCapabilities.pan?.min && trackCapabilities.pan?.max ? this.pan >= trackCapabilities.pan.min && this.pan <= trackCapabilities.pan.max : false;\n if (\"pan\" in trackSettings && typeof this.pan === \"number\" && panInAllowedRange) this.#applyPTZ(\"pan\", this.pan);\n }\n if (name === \"tilt\" && oldValue !== newValue && \"tilt\" in this.#supportedConstraints) {\n const tiltInAllowedRange = \"tilt\" in trackCapabilities && trackCapabilities.tilt?.min && trackCapabilities.tilt?.max ? this.tilt >= trackCapabilities.tilt.min && this.tilt <= trackCapabilities.tilt.max : false;\n if (\"tilt\" in trackSettings && typeof this.tilt === \"number\" && tiltInAllowedRange) this.#applyPTZ(\"tilt\", this.tilt);\n }\n if (name === \"zoom\" && oldValue !== newValue && \"zoom\" in this.#supportedConstraints) {\n const zoomInAllowedRange = \"zoom\" in trackCapabilities && trackCapabilities.zoom?.min && trackCapabilities.zoom?.max ? this.zoom >= trackCapabilities.zoom.min && this.zoom <= trackCapabilities.zoom.max : false;\n if (\"zoom\" in trackSettings && typeof this.zoom === \"number\" && zoomInAllowedRange) this.#applyPTZ(\"zoom\", this.zoom);\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"autpoPlay\");\n this.#upgradeProperty(\"noImage\");\n this.#upgradeProperty(\"facingMode\");\n this.#upgradeProperty(\"cameraResolution\");\n this.#upgradeProperty(\"pan\");\n this.#upgradeProperty(\"tilt\");\n this.#upgradeProperty(\"zoom\");\n this.#upgradeProperty(\"calculateFileSize\");\n this.#canvasElement = this.shadowRoot?.querySelector(\"canvas\") || null;\n this.#outputElement = this.shadowRoot?.getElementById(\"output\") || null;\n this.#videoElement = this.shadowRoot?.querySelector(\"video\") || null;\n this.#captureButtonSlot = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null;\n this.#captureButton = this.#getCaptureButton();\n this.#facingModeButtonSlot = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null;\n this.#facingModeButton = this.#getFacingModeButton();\n this.#videoElement?.addEventListener(\"loadedmetadata\", this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.addEventListener(\"slotchange\", this.#onCaptureButtonSlotChange);\n this.#captureButton?.addEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#facingModeButtonSlot?.addEventListener(\"slotchange\", this.#onFacingModeButtonSlotChange);\n this.#facingModeButton?.addEventListener(\"click\", this.#onFacingModeButtonClick);\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported()) return this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: {\n name: \"NotSupportedError\",\n message: \"Not supported\"\n }\n }\n }));\n if (this.autoPlay) this.startVideoStream();\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.stopVideoStream();\n this.#facingModeButton?.removeEventListener(\"click\", this.#onFacingModeButtonClick);\n this.#captureButton?.removeEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#videoElement?.removeEventListener(\"canplay\", this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.removeEventListener(\"slotchange\", this.#onCaptureButtonSlotChange);\n this.#facingModeButtonSlot?.removeEventListener(\"slotchange\", this.#onFacingModeButtonSlotChange);\n }\n /**\n * @type {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @attribute auto-play - Reflects the autoPlay attribute.\n */ get autoPlay() {\n return this.hasAttribute(\"auto-play\");\n }\n set autoPlay(value) {\n this.toggleAttribute(\"auto-play\", !!value);\n }\n /**\n * @type {boolean} noImage - Whether or not to show the captured image.\n * @attribute no-image - Reflects the noImage attribute.\n */ get noImage() {\n return this.hasAttribute(\"no-image\");\n }\n set noImage(value) {\n this.toggleAttribute(\"no-image\", !!value);\n }\n /**\n * @type {string} facingMode - The facing mode of the camera.\n * @attribute facing-mode - Reflects the facingMode attribute.\n */ get facingMode() {\n return this.getAttribute(\"facing-mode\") || \"user\";\n }\n set facingMode(value) {\n this.setAttribute(\"facing-mode\", value);\n }\n /**\n * @type {string} cameraResolution - The resolution of the camera.\n * @attribute camera-resolution - Reflects the cameraResolution attribute.\n */ get cameraResolution() {\n return this.getAttribute(\"camera-resolution\") || \"\";\n }\n set cameraResolution(value) {\n this.setAttribute(\"camera-resolution\", value);\n }\n /**\n * @type {number} pan - The pan value of the camera.\n * @attribute pan - Reflects the pan attribute.\n */ get pan() {\n return Number(this.getAttribute(\"pan\")) || 0;\n }\n set pan(value) {\n this.setAttribute(\"pan\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} tilt - The tilt value of the camera.\n * @attribute tilt - Reflects the tilt attribute.\n */ get tilt() {\n return Number(this.getAttribute(\"tilt\")) || 0;\n }\n set tilt(value) {\n this.setAttribute(\"tilt\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} zoom - The zoom value of the camera.\n * @attribute zoom - Reflects the zoom attribute.\n */ get zoom() {\n return Number(this.getAttribute(\"zoom\")) || 1;\n }\n set zoom(value) {\n this.setAttribute(\"zoom\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} loading - Whether or not the video stream is loading.\n * @attribute loading - Reflects the loading attribute.\n */ get loading() {\n return this.hasAttribute(\"loading\");\n }\n /**\n * @type {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n * @attribute calculate-file-size - Reflects the calculateFileSize attribute.\n */ get calculateFileSize() {\n return this.hasAttribute(\"calculate-file-size\");\n }\n set calculateFileSize(value) {\n this.toggleAttribute(\"calculate-file-size\", !!value);\n }\n /**\n * Handles the click event of the facing mode button.\n *\n * @param {*} evt - The click event.\n */ #onFacingModeButtonClick = (evt)=>{\n evt.preventDefault();\n if (this.loading) return;\n this.facingMode = this.facingMode === \"user\" || !this.facingMode ? \"environment\" : \"user\";\n };\n /**\n * Handles the click event of the capture button.\n *\n * @param {*} evt - The click event.\n */ #onCapturePhotoButtonClick = (evt)=>{\n evt.preventDefault();\n this.capture();\n };\n /**\n * Handles the loadedmetadata event of the video element.\n *\n * @param {*} evt - The loadedmetadata event.\n */ #onVideoLoadedMetaData = (evt)=>{\n const video = evt.target;\n video.play().then(()=>{\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:video-play`, {\n bubbles: true,\n composed: true,\n detail: {\n video: video\n }\n }));\n }).catch(/** @param {Error} error */ (error)=>{\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }).finally(()=>{\n this.removeAttribute(\"loading\");\n });\n };\n /**\n * Removes all child nodes from the output element.\n */ #emptyOutputElement() {\n if (!this.#outputElement) return;\n Array.from(this.#outputElement.childNodes).forEach((node)=>node.remove());\n }\n /**\n * Applies the pan, tilt or zoom constraint.\n *\n * @param {'pan' | 'tilt' | 'zoom'} constraintName - The name of the constraint.\n * @param {number} constraintValue - The value of the constraint.\n */ #applyPTZ(constraintName, constraintValue) {\n if (!this.#stream || !constraintName || !constraintValue) return;\n const [track] = this.#stream.getVideoTracks();\n /** @type {ExtendedMediaTrackCapabilities} */ const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n if (constraintName in trackSettings) track.applyConstraints({\n advanced: [\n {\n [constraintName]: (0, $02ad8beec419df62$export$7d15b64cf5a3a4c4)(Number(constraintValue), trackCapabilities[constraintName]?.min || 1, trackCapabilities[constraintName]?.max || 1)\n }\n ]\n });\n }\n /**\n * Handles the slotchange event of the capture button slot.\n *\n * @param {*} evt - The slotchange event.\n */ #onCaptureButtonSlotChange = (evt)=>{\n if (evt.target?.name === \"capture-button\") {\n this.#captureButton?.removeEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#captureButton = this.#getCaptureButton();\n if (this.#captureButton) {\n this.#captureButton.addEventListener(\"click\", this.#onCapturePhotoButtonClick);\n if (this.#captureButton.nodeName !== \"BUTTON\" && !this.#captureButton.hasAttribute(\"role\")) this.#captureButton.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Handles the slotchange event of the facing mode button slot.\n *\n * @param {*} evt - The slotchange event.\n */ #onFacingModeButtonSlotChange = (evt)=>{\n if (evt.target?.name === \"facing-mode-button\") {\n this.#facingModeButton?.removeEventListener(\"click\", this.#onFacingModeButtonClick);\n this.#facingModeButton = this.#getFacingModeButton();\n if (this.#facingModeButton) {\n this.#facingModeButton.addEventListener(\"click\", this.#onFacingModeButtonClick);\n if (this.#facingModeButton.nodeName !== \"BUTTON\" && !this.#facingModeButton.hasAttribute(\"role\")) this.#facingModeButton.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Returns the facing mode button.\n *\n * @returns {Nullable}\n */ #getFacingModeButton() {\n if (!this.#facingModeButtonSlot) return null;\n return this.#facingModeButtonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"facing-mode-button\";\n }) || null;\n }\n /**\n * Returns the capture button.\n *\n * @returns {Nullable}\n */ #getCaptureButton() {\n if (!this.#captureButtonSlot) return null;\n return this.#captureButtonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"capture-button\";\n }) || null;\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and\n * set a value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would\n * miss that property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'autpoPlay' | 'noImage' | 'facingMode' | 'cameraResolution' | 'pan' | 'tilt' | 'zoom' | 'calculateFileSize'} prop\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Starts the video stream.\n *\n * @returns Promise\n */ async startVideoStream() {\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported() || this.#stream) return;\n this.setAttribute(\"loading\", \"\");\n /** @type {ExtendedMediaTrackConstraints} */ const constraints = {\n video: {\n facingMode: {\n ideal: this.facingMode || \"user\"\n },\n pan: true,\n tilt: true,\n zoom: true\n },\n audio: false\n };\n if (typeof this.cameraResolution === \"string\" && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split(\"x\").map((x)=>Number(x));\n if (width > 0 && height > 0) {\n constraints.video.width = width;\n constraints.video.height = height;\n }\n }\n try {\n this.#stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (this.#videoElement) this.#videoElement.srcObject = this.#stream;\n this.#applyPTZ(\"pan\", this.pan);\n this.#applyPTZ(\"tilt\", this.tilt);\n this.#applyPTZ(\"zoom\", this.zoom);\n const trackSettings = this.getTrackSettings();\n if (\"facingMode\" in trackSettings && this.#facingModeButtonSlot) this.#facingModeButtonSlot.hidden = false;\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n } finally{\n this.removeAttribute(\"loading\");\n }\n }\n /**\n * Stops the video stream.\n */ stopVideoStream() {\n if (!this.#videoElement || !this.#stream) return;\n const [track] = this.#stream.getVideoTracks();\n track?.stop();\n this.#videoElement.srcObject = null;\n this.#stream = null;\n }\n /**\n * Captures a photo using the element's properties.\n *\n * @returns Promise\n */ async capture() {\n if (this.loading || !this.#canvasElement || !this.#videoElement) return;\n try {\n const ctx = this.#canvasElement.getContext(\"2d\");\n const width = this.#videoElement.videoWidth;\n const height = this.#videoElement.videoHeight;\n this.#canvasElement.width = width;\n this.#canvasElement.height = height;\n ctx?.drawImage(this.#videoElement, 0, 0, width, height);\n const dataURI = this.#canvasElement.toDataURL(\"image/png\");\n if (typeof dataURI === \"string\" && dataURI.includes(\"data:image\")) {\n if (!this.noImage) {\n const image = new Image();\n image.src = dataURI;\n image.width = width;\n image.height = height;\n image.setAttribute(\"part\", \"output-image\");\n this.#emptyOutputElement();\n this.#outputElement?.appendChild(image);\n }\n /** @type {{ dataURI: string, width: number, height: number, size?: number }} */ const eventDetail = {\n dataURI: dataURI,\n width: width,\n height: height\n };\n if (this.calculateFileSize) try {\n const file = await fetch(dataURI);\n const blob = await file.blob();\n const size = blob.size;\n if (size) eventDetail.size = size;\n } catch (err) {\n // Fail silently...\n }\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:success`, {\n bubbles: true,\n composed: true,\n detail: eventDetail\n }));\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n }\n /**\n * Returns an object based on the `MediaTrackSupportedConstraints` dictionary,\n * whose member fields each specify one ofthe constrainable properties the user agent understands.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaDevices/getSupportedConstraints\n * @returns {MediaTrackSupportedConstraints | {}}\n */ getSupportedConstraints() {\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported()) return {};\n return navigator.mediaDevices.getSupportedConstraints() || {};\n }\n /**\n * Returns a `MediaTrackCapabilities` object which specifies the values or range of values\n * which each constrainable property, based upon the platform and user agent.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getCapabilities\n * @returns {MediaTrackCapabilities | {}}\n */ getTrackCapabilities() {\n if (!this.#stream) return {};\n const [track] = this.#stream.getVideoTracks();\n if (track && typeof track.getCapabilities === \"function\") return track.getCapabilities() || {};\n return {};\n }\n /**\n * Returns a `MediaTrackSettings` object containing the current values of each of\n * the constrainable properties for the current MediaStreamTrack.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getSettings\n * @returns {MediaTrackSettings | {}}\n */ getTrackSettings() {\n if (!this.#stream) return {};\n const [track] = this.#stream.getVideoTracks();\n if (track && typeof track.getSettings === \"function\") return track.getSettings() || {};\n return {};\n }\n /**\n * Checks if the `MediaDevices.getUserMedia()` method is supported.\n *\n * @returns {boolean}\n */ static isSupported() {\n return Boolean(navigator.mediaDevices?.getUserMedia);\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='capture-photo'] - The name of the custom element.\n * @example\n *\n * CapturePhoto.defineCustomElement('my-capture-photo');\n */ static defineCustomElement(elementName = $c290816263f90981$var$COMPONENT_NAME) {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $c290816263f90981$export$cc30a98fe3890794);\n }\n}\n\n\n(0, $c290816263f90981$export$cc30a98fe3890794).defineCustomElement();\n\n\nexport {$c290816263f90981$export$cc30a98fe3890794 as CapturePhoto};\n//# sourceMappingURL=capture-photo-defined.js.map\n","import { CapturePhoto } from './capture-photo.js';\n\nCapturePhoto.defineCustomElement();\n\nexport { CapturePhoto };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\n/**\n * @typedef {Object} ExtendedMediaTrackCapabilities\n * @property {ULongRange} [width] - The width of the video track.\n * @property {ULongRange} [height] - The height of the video track.\n * @property {ULongRange} [pan] - The pan level of the camera.\n * @property {ULongRange} [tilt] - The tilt level of the camera.\n * @property {ULongRange} [zoom] - The zoom level of the camera.\n * @property {MediaTrackCapabilities} [nativeMediaTrackCapabilities] - The native track capabilities.\n */\n\n/**\n * @typedef {Object} ExtendedMediaTrackConstraints\n * @property {MediaTrackConstraints & {pan: boolean, tilt: boolean, zoom: boolean}} video - The video constraints.\n * @property {MediaTrackConstraints | boolean} audio - The audio constraints.\n */\n\nimport { clamp } from './utils/clamp.js';\n\nconst COMPONENT_NAME = 'capture-photo';\n\nconst styles = /* css */`\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */`\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\n\n/**\n * @summary A custom element that implements the MediaDevices.getUserMedia() method of the MediaDevices interface to capture a photo in the browser.\n * @documentation https://github.com/georapbox/capture-photo-element\n *\n * @tagname capture-photo This is the default tag name, unless overridden by the `defineCustomElement` method.\n * @extends HTMLElement\n *\n * @property {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @property {boolean} noImage - Whether or not to show the captured image.\n * @property {string} facingMode - The facing mode of the camera.\n * @property {string} cameraResolution - The resolution of the camera.\n * @property {number} pan - The pan value of the camera.\n * @property {number} tilt - The tilt value of the camera.\n * @property {number} zoom - The zoom value of the camera.\n * @property {boolean} loading - Whether or not the video stream is loading.\n * @property {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n *\n * @atttribute {boolean} auto-play - Reflects the autoPlay property.\n * @atttribute {boolean} no-image - Reflects the noImage property.\n * @atttribute {string} facing-mode - Reflects the facingMode property.\n * @atttribute {string} camera-resolution - Reflects the cameraResolution property.\n * @atttribute {number} pan - Reflects the pan property.\n * @atttribute {number} tilt - Reflects the tilt property.\n * @atttribute {number} zoom - Reflects the zoom property.\n * @atttribute {boolean} loading - Reflects the loading property.\n * @atttribute {boolean} calculate-file-size - Reflects the calculateFileSize property.\n *\n * @slot capture-button - The capture button.\n * @slot capture-button-content - The capture button content.\n * @slot facing-mode-button - The facing mode button.\n * @slot facing-mode-button-content - The facing mode button content.\n * @slot actions - The actions container.\n * @slot - A default un-named slot to add content inside the component.\n *\n * @csspart video - The video element.\n * @csspart actions-container - The actions container.\n * @csspart capture-button - The capture button.\n * @csspart facing-mode-button - The facing mode button.\n * @csspart output-container - The output container.\n * @csspart output-image - The output image.\n *\n * @event capture-photo:video-play - Fires when the video stream is successfully playing.\n * @event capture-photo:success - Fires when the photo is successfully captured.\n * @event capture-photo:error - Fires when an error occurs.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method isSupported - Static method. Checks if the MediaDevices.getUserMedia() method is supported.\n * @method startVideoStream - Instance method. Starts the video stream.\n * @method stopVideoStream - Instance method. Stops the video stream.\n * @method capture - Instance method. Captures a photo.\n * @method getSupportedConstraints - Instance method. Gets the supported constraints.\n * @method getTrackCapabilities - Instance method. Gets the track capabilities.\n * @method getTrackSettings - Instance method. Gets the track settings.\n */\nclass CapturePhoto extends HTMLElement {\n /** @type {MediaTrackSupportedConstraints | {}}*/\n #supportedConstraints = {};\n\n /** @type {Nullable} */\n #stream = null;\n\n /** @type {Nullable} */\n #canvasElement = null;\n\n /** @type {Nullable} */\n #outputElement = null;\n\n /** @type {Nullable} */\n #videoElement = null;\n\n /** @type {Nullable} */\n #captureButtonSlot = null;\n\n /** @type {Nullable} */\n #captureButton = null;\n\n /** @type {Nullable} */\n #facingModeButtonSlot = null;\n\n /** @type {Nullable} */\n #facingModeButton = null;\n\n constructor() {\n super();\n\n this.#supportedConstraints = this.getSupportedConstraints();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n }\n\n static get observedAttributes() {\n return ['no-image', 'facing-mode', 'camera-resolution', 'pan', 'tilt', 'zoom'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (!this.isConnected) {\n return;\n }\n\n /** @type {ExtendedMediaTrackCapabilities} */\n const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n\n if (name === 'no-image' && oldValue !== newValue) {\n this.#emptyOutputElement();\n }\n\n if (name === 'facing-mode' && oldValue !== newValue && 'facingMode' in this.#supportedConstraints) {\n const isValidFacingMode = ['user', 'environment'].includes(this.facingMode || '');\n\n if ('facingMode' in trackSettings && isValidFacingMode) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n\n if (name === 'camera-resolution' && oldValue !== newValue) {\n if (typeof this.cameraResolution === 'string' && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split('x').map(x => Number(x));\n\n if (width > 0 && height > 0 && 'width' in trackCapabilities && 'height' in trackCapabilities) {\n const widthInAllowedRange = trackCapabilities.width?.min && trackCapabilities.width?.max\n ? width >= trackCapabilities?.width?.min && width <= trackCapabilities?.width?.max\n : false;\n\n const heightInAllowedRange = trackCapabilities.height?.min && trackCapabilities.height?.max\n ? height >= trackCapabilities?.height?.min && height <= trackCapabilities?.height?.max\n : false;\n\n if ('width' in trackSettings && 'height' in trackSettings && widthInAllowedRange && heightInAllowedRange) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n }\n }\n\n if (name === 'pan' && oldValue !== newValue && 'pan' in this.#supportedConstraints) {\n const panInAllowedRange = 'pan' in trackCapabilities && trackCapabilities.pan?.min && trackCapabilities.pan?.max\n ? this.pan >= trackCapabilities.pan.min && this.pan <= trackCapabilities.pan.max\n : false;\n\n if ('pan' in trackSettings && typeof this.pan === 'number' && panInAllowedRange) {\n this.#applyPTZ('pan', this.pan);\n }\n }\n\n if (name === 'tilt' && oldValue !== newValue && 'tilt' in this.#supportedConstraints) {\n const tiltInAllowedRange = 'tilt' in trackCapabilities && trackCapabilities.tilt?.min && trackCapabilities.tilt?.max\n ? this.tilt >= trackCapabilities.tilt.min && this.tilt <= trackCapabilities.tilt.max\n : false;\n\n if ('tilt' in trackSettings && typeof this.tilt === 'number' && tiltInAllowedRange) {\n this.#applyPTZ('tilt', this.tilt);\n }\n }\n\n if (name === 'zoom' && oldValue !== newValue && 'zoom' in this.#supportedConstraints) {\n const zoomInAllowedRange = 'zoom' in trackCapabilities && trackCapabilities.zoom?.min && trackCapabilities.zoom?.max\n ? this.zoom >= trackCapabilities.zoom.min && this.zoom <= trackCapabilities.zoom.max\n : false;\n\n if ('zoom' in trackSettings && typeof this.zoom === 'number' && zoomInAllowedRange) {\n this.#applyPTZ('zoom', this.zoom);\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('autpoPlay');\n this.#upgradeProperty('noImage');\n this.#upgradeProperty('facingMode');\n this.#upgradeProperty('cameraResolution');\n this.#upgradeProperty('pan');\n this.#upgradeProperty('tilt');\n this.#upgradeProperty('zoom');\n this.#upgradeProperty('calculateFileSize');\n\n this.#canvasElement = this.shadowRoot?.querySelector('canvas') || null;\n this.#outputElement = this.shadowRoot?.getElementById('output') || null;\n this.#videoElement = this.shadowRoot?.querySelector('video') || null;\n this.#captureButtonSlot = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null;\n this.#captureButton = this.#getCaptureButton();\n this.#facingModeButtonSlot = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null;\n this.#facingModeButton = this.#getFacingModeButton();\n\n this.#videoElement?.addEventListener('loadedmetadata', this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.addEventListener('slotchange', this.#onCaptureButtonSlotChange);\n this.#captureButton?.addEventListener('click', this.#onCapturePhotoButtonClick);\n this.#facingModeButtonSlot?.addEventListener('slotchange', this.#onFacingModeButtonSlotChange);\n this.#facingModeButton?.addEventListener('click', this.#onFacingModeButtonClick);\n\n if (!CapturePhoto.isSupported()) {\n return this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: {\n name: 'NotSupportedError',\n message: 'Not supported'\n }\n }\n }));\n }\n\n if (this.autoPlay) {\n this.startVideoStream();\n }\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.stopVideoStream();\n this.#facingModeButton?.removeEventListener('click', this.#onFacingModeButtonClick);\n this.#captureButton?.removeEventListener('click', this.#onCapturePhotoButtonClick);\n this.#videoElement?.removeEventListener('canplay', this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.removeEventListener('slotchange', this.#onCaptureButtonSlotChange);\n this.#facingModeButtonSlot?.removeEventListener('slotchange', this.#onFacingModeButtonSlotChange);\n }\n\n /**\n * @type {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @attribute auto-play - Reflects the autoPlay attribute.\n */\n get autoPlay() {\n return this.hasAttribute('auto-play');\n }\n\n set autoPlay(value) {\n this.toggleAttribute('auto-play', !!value);\n }\n\n /**\n * @type {boolean} noImage - Whether or not to show the captured image.\n * @attribute no-image - Reflects the noImage attribute.\n */\n get noImage() {\n return this.hasAttribute('no-image');\n }\n\n set noImage(value) {\n this.toggleAttribute('no-image', !!value);\n }\n\n /**\n * @type {string} facingMode - The facing mode of the camera.\n * @attribute facing-mode - Reflects the facingMode attribute.\n */\n get facingMode() {\n return this.getAttribute('facing-mode') || 'user';\n }\n\n set facingMode(value) {\n this.setAttribute('facing-mode', value);\n }\n\n /**\n * @type {string} cameraResolution - The resolution of the camera.\n * @attribute camera-resolution - Reflects the cameraResolution attribute.\n */\n get cameraResolution() {\n return this.getAttribute('camera-resolution') || '';\n }\n\n set cameraResolution(value) {\n this.setAttribute('camera-resolution', value);\n }\n\n /**\n * @type {number} pan - The pan value of the camera.\n * @attribute pan - Reflects the pan attribute.\n */\n get pan() {\n return Number(this.getAttribute('pan')) || 0;\n }\n\n set pan(value) {\n this.setAttribute('pan', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} tilt - The tilt value of the camera.\n * @attribute tilt - Reflects the tilt attribute.\n */\n get tilt() {\n return Number(this.getAttribute('tilt')) || 0;\n }\n\n set tilt(value) {\n this.setAttribute('tilt', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} zoom - The zoom value of the camera.\n * @attribute zoom - Reflects the zoom attribute.\n */\n get zoom() {\n return Number(this.getAttribute('zoom')) || 1;\n }\n\n set zoom(value) {\n this.setAttribute('zoom', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} loading - Whether or not the video stream is loading.\n * @attribute loading - Reflects the loading attribute.\n */\n get loading() {\n return this.hasAttribute('loading');\n }\n\n /**\n * @type {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n * @attribute calculate-file-size - Reflects the calculateFileSize attribute.\n */\n get calculateFileSize() {\n return this.hasAttribute('calculate-file-size');\n }\n\n set calculateFileSize(value) {\n this.toggleAttribute('calculate-file-size', !!value);\n }\n\n /**\n * Handles the click event of the facing mode button.\n *\n * @param {*} evt - The click event.\n */\n #onFacingModeButtonClick = evt => {\n evt.preventDefault();\n\n if (this.loading) {\n return;\n }\n\n this.facingMode = this.facingMode === 'user' || !this.facingMode ? 'environment' : 'user';\n };\n\n /**\n * Handles the click event of the capture button.\n *\n * @param {*} evt - The click event.\n */\n #onCapturePhotoButtonClick = evt => {\n evt.preventDefault();\n this.capture();\n };\n\n /**\n * Handles the loadedmetadata event of the video element.\n *\n * @param {*} evt - The loadedmetadata event.\n */\n #onVideoLoadedMetaData = evt => {\n const video = evt.target;\n\n video.play().then(() => {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:video-play`, {\n bubbles: true,\n composed: true,\n detail: { video }\n }));\n }).catch(/** @param {Error} error */error => {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }).finally(() => {\n this.removeAttribute('loading');\n });\n };\n\n /**\n * Removes all child nodes from the output element.\n */\n #emptyOutputElement() {\n if (!this.#outputElement) {\n return;\n }\n\n Array.from(this.#outputElement.childNodes).forEach(node => node.remove());\n }\n\n /**\n * Applies the pan, tilt or zoom constraint.\n *\n * @param {'pan' | 'tilt' | 'zoom'} constraintName - The name of the constraint.\n * @param {number} constraintValue - The value of the constraint.\n */\n #applyPTZ(constraintName, constraintValue) {\n if (!this.#stream || !constraintName || !constraintValue) {\n return;\n }\n\n const [track] = this.#stream.getVideoTracks();\n /** @type {ExtendedMediaTrackCapabilities} */\n const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n\n if (constraintName in trackSettings) {\n track.applyConstraints({\n advanced: [{\n [constraintName]: clamp(Number(constraintValue), trackCapabilities[constraintName]?.min || 1, trackCapabilities[constraintName]?.max || 1)\n }]\n });\n }\n }\n\n /**\n * Handles the slotchange event of the capture button slot.\n *\n * @param {*} evt - The slotchange event.\n */\n #onCaptureButtonSlotChange = evt => {\n if (evt.target?.name === 'capture-button') {\n this.#captureButton?.removeEventListener('click', this.#onCapturePhotoButtonClick);\n this.#captureButton = this.#getCaptureButton();\n\n if (this.#captureButton) {\n this.#captureButton.addEventListener('click', this.#onCapturePhotoButtonClick);\n\n if (this.#captureButton.nodeName !== 'BUTTON' && !this.#captureButton.hasAttribute('role')) {\n this.#captureButton.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Handles the slotchange event of the facing mode button slot.\n *\n * @param {*} evt - The slotchange event.\n */\n #onFacingModeButtonSlotChange = evt => {\n if (evt.target?.name === 'facing-mode-button') {\n this.#facingModeButton?.removeEventListener('click', this.#onFacingModeButtonClick);\n this.#facingModeButton = this.#getFacingModeButton();\n\n if (this.#facingModeButton) {\n this.#facingModeButton.addEventListener('click', this.#onFacingModeButtonClick);\n\n if (this.#facingModeButton.nodeName !== 'BUTTON' && !this.#facingModeButton.hasAttribute('role')) {\n this.#facingModeButton.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Returns the facing mode button.\n *\n * @returns {Nullable}\n */\n #getFacingModeButton() {\n if (!this.#facingModeButtonSlot) {\n return null;\n }\n\n return this.#facingModeButtonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'facing-mode-button';\n }) || null;\n }\n\n /**\n * Returns the capture button.\n *\n * @returns {Nullable}\n */\n #getCaptureButton() {\n if (!this.#captureButtonSlot) {\n return null;\n }\n\n return this.#captureButtonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'capture-button';\n }) || null;\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and\n * set a value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would\n * miss that property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'autpoPlay' | 'noImage' | 'facingMode' | 'cameraResolution' | 'pan' | 'tilt' | 'zoom' | 'calculateFileSize'} prop\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Starts the video stream.\n *\n * @returns Promise\n */\n async startVideoStream() {\n if (!CapturePhoto.isSupported() || this.#stream) {\n return;\n }\n\n this.setAttribute('loading', '');\n\n /** @type {ExtendedMediaTrackConstraints} */\n const constraints = {\n video: {\n facingMode: {\n ideal: this.facingMode || 'user'\n },\n pan: true,\n tilt: true,\n zoom: true\n },\n audio: false\n };\n\n if (typeof this.cameraResolution === 'string' && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split('x').map(x => Number(x));\n\n if (width > 0 && height > 0) {\n constraints.video.width = width;\n constraints.video.height = height;\n }\n }\n\n try {\n this.#stream = await navigator.mediaDevices.getUserMedia(constraints);\n\n if (this.#videoElement) {\n this.#videoElement.srcObject = this.#stream;\n }\n\n this.#applyPTZ('pan', this.pan);\n this.#applyPTZ('tilt', this.tilt);\n this.#applyPTZ('zoom', this.zoom);\n\n const trackSettings = this.getTrackSettings();\n\n if ('facingMode' in trackSettings && this.#facingModeButtonSlot) {\n this.#facingModeButtonSlot.hidden = false;\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n } finally {\n this.removeAttribute('loading');\n }\n }\n\n /**\n * Stops the video stream.\n */\n stopVideoStream() {\n if (!this.#videoElement || !this.#stream) {\n return;\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n track?.stop();\n this.#videoElement.srcObject = null;\n this.#stream = null;\n }\n\n /**\n * Captures a photo using the element's properties.\n *\n * @returns Promise\n */\n async capture() {\n if (this.loading || !this.#canvasElement || !this.#videoElement) {\n return;\n }\n\n try {\n const ctx = this.#canvasElement.getContext('2d');\n const width = this.#videoElement.videoWidth;\n const height = this.#videoElement.videoHeight;\n this.#canvasElement.width = width;\n this.#canvasElement.height = height;\n ctx?.drawImage(this.#videoElement, 0, 0, width, height);\n const dataURI = this.#canvasElement.toDataURL('image/png');\n\n if (typeof dataURI === 'string' && dataURI.includes('data:image')) {\n if (!this.noImage) {\n const image = new Image();\n image.src = dataURI;\n image.width = width;\n image.height = height;\n image.setAttribute('part', 'output-image');\n this.#emptyOutputElement();\n this.#outputElement?.appendChild(image);\n }\n\n /** @type {{ dataURI: string, width: number, height: number, size?: number }} */\n const eventDetail = { dataURI, width, height };\n\n if (this.calculateFileSize) {\n try {\n const file = await fetch(dataURI);\n const blob = await file.blob();\n const size = blob.size;\n\n if (size) {\n eventDetail.size = size;\n }\n } catch (err) {\n // Fail silently...\n }\n }\n\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:success`, {\n bubbles: true,\n composed: true,\n detail: eventDetail\n }));\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n }\n\n /**\n * Returns an object based on the `MediaTrackSupportedConstraints` dictionary,\n * whose member fields each specify one ofthe constrainable properties the user agent understands.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaDevices/getSupportedConstraints\n * @returns {MediaTrackSupportedConstraints | {}}\n */\n getSupportedConstraints() {\n if (!CapturePhoto.isSupported()) {\n return {};\n }\n\n return navigator.mediaDevices.getSupportedConstraints() || {};\n }\n\n /**\n * Returns a `MediaTrackCapabilities` object which specifies the values or range of values\n * which each constrainable property, based upon the platform and user agent.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getCapabilities\n * @returns {MediaTrackCapabilities | {}}\n */\n getTrackCapabilities() {\n if (!this.#stream) {\n return {};\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n if (track && typeof track.getCapabilities === 'function') {\n return track.getCapabilities() || {};\n }\n\n return {};\n }\n\n /**\n * Returns a `MediaTrackSettings` object containing the current values of each of\n * the constrainable properties for the current MediaStreamTrack.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getSettings\n * @returns {MediaTrackSettings | {}}\n */\n getTrackSettings() {\n if (!this.#stream) {\n return {};\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n if (track && typeof track.getSettings === 'function') {\n return track.getSettings() || {};\n }\n\n return {};\n }\n\n /**\n * Checks if the `MediaDevices.getUserMedia()` method is supported.\n *\n * @returns {boolean}\n */\n static isSupported() {\n return Boolean(navigator.mediaDevices?.getUserMedia);\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='capture-photo'] - The name of the custom element.\n * @example\n *\n * CapturePhoto.defineCustomElement('my-capture-photo');\n */\n static defineCustomElement(elementName = COMPONENT_NAME) {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, CapturePhoto);\n }\n }\n}\n\nexport { CapturePhoto };\n","// @ts-check\n\n/**\n * Clamps number within the inclusive `min` and `max` bounds,\n * making sure it does not go beyond them on either side.\n * If `min` is greater than `max` the parameters are swapped to support inverted ranges.\n *\n * @param {number} value - The number to clamp.\n * @param {number} lower - The lower bound.\n * @param {number} upper - The upper bound.\n * @throws {TypeError} - If one or more of the arguments passed is not a number.\n * @returns {number} - The clamped number.\n * @example\n *\n * clamp(10, -5, 5);\n * // => 5\n *\n * clamp(-10, -5, 5);\n * // => -5\n *\n * clamp(-15, 0, 100);\n * // => 0\n *\n * clamp(120, 0, 100);\n * // => 100\n *\n * clamp(-5, NaN, 5); // If any of lower or upper bound are `NaN`, they will be converted to `0`.\n * // => 0\n *\n * clamp(120, 100, 0); // The order of lower and upper bounds is reversed (100 > 0)\n * // => 100\n */\nexport const clamp = (value, lower, upper) => {\n if (Number.isNaN(lower)) {\n lower = 0;\n }\n\n if (Number.isNaN(upper)) {\n upper = 0;\n }\n\n return Math.min(Math.max(value, Math.min(lower, upper)), Math.max(lower, upper));\n};\n","Object.defineProperty({},\"ModalElement\",{get:function(){return t},set:void 0,enumerable:!0,configurable:!0});let e=document.createElement(\"template\");e.innerHTML=/* html */`\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */class t extends HTMLElement{/** @type {Nullable} */#e=null;/** @type {Nullable} */#t=null;/** @type {ReturnType | undefined} */#o=void 0;constructor(){if(super(),!this.shadowRoot){let t=this.attachShadow({mode:\"open\"});t.appendChild(e.content.cloneNode(!0))}this.shadowRoot&&(this.#e=this.shadowRoot.querySelector(\"dialog\"),this.#t=this.shadowRoot.querySelector('slot[name=\"footer\"]'))}static get observedAttributes(){return[\"open\",\"no-header\",\"no-animations\",\"no-close-button\"]}/**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */attributeChangedCallback(e,t,o){if(null!==this.#e){if(\"open\"===e&&t!==o&&(this.open?(this.#e.showModal(),document.body&&(document.body.style.overflowY=\"hidden\"),this.dispatchEvent(new CustomEvent(\"me-open\",{bubbles:!0,composed:!0,detail:{element:this}}))):this.#e.close()),\"no-header\"===e&&t!==o){/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__header\");null!==e&&(e.hidden=this.noHeader)}if(\"no-animations\"===e&&t!==o&&this.#e.classList.toggle(\"dialog--no-animations\",this.noAnimations),\"no-close-button\"===e&&t!==o){/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__close\");null!==e&&(e.hidden=this.noCloseButton)}}}/**\n * Lifecycle method that is called when the element is added to the DOM.\n */connectedCallback(){this.#i(\"open\"),this.#i(\"staticBackdrop\"),this.#i(\"noHeader\"),this.#i(\"noAnimations\"),this.#i(\"noCloseButton\"),this.#i(\"fullscreen\"),this.#e?.addEventListener(\"click\",this.#a),this.#e?.addEventListener(\"close\",this.#l),this.#e?.addEventListener(\"cancel\",this.#s),this.#e?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\",this.#n),this.#t?.addEventListener(\"slotchange\",this.#r)}/**\n * Lifecycle method that is called when the element is removed from the DOM.\n */disconnectedCallback(){this.#o&&clearTimeout(this.#o),this.#e?.addEventListener(\"click\",this.#a),this.#e?.removeEventListener(\"close\",this.#l),this.#e?.removeEventListener(\"cancel\",this.#s),this.#e?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\",this.#n),this.#t?.removeEventListener(\"slotchange\",this.#r)}/**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */get open(){return this.hasAttribute(\"open\")}set open(e){e?this.setAttribute(\"open\",\"\"):this.removeAttribute(\"open\")}/**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */get staticBackdrop(){return this.hasAttribute(\"static-backdrop\")}set staticBackdrop(e){e?this.setAttribute(\"static-backdrop\",\"\"):this.removeAttribute(\"static-backdrop\")}/**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */get noHeader(){return this.hasAttribute(\"no-header\")}set noHeader(e){e?this.setAttribute(\"no-header\",\"\"):this.removeAttribute(\"no-header\")}/**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */get noAnimations(){return this.hasAttribute(\"no-animations\")}set noAnimations(e){e?this.setAttribute(\"no-animations\",\"\"):this.removeAttribute(\"no-animations\")}/**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */get noCloseButton(){return this.hasAttribute(\"no-close-button\")}set noCloseButton(e){e?this.setAttribute(\"no-close-button\",\"\"):this.removeAttribute(\"no-close-button\")}/**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */get fullscreen(){return this.hasAttribute(\"fullscreen\")}set fullscreen(e){e?this.setAttribute(\"fullscreen\",\"\"):this.removeAttribute(\"fullscreen\")}/**\n * Applies a pulse effect on the dialog.\n */#d(){this.#o||(this.#e?.classList.add(\"dialog--pulse\"),this.#o=setTimeout(()=>{this.#e?.classList.remove(\"dialog--pulse\"),clearTimeout(this.#o),this.#o=void 0},300))}/**\n * Handles the close event of the dialog.\n */#l=()=>{// This is needed because the dialog element does not reset\n// the open property when the dialog is closed by the user.\nthis.open=!1,document.body&&(document.body.style.overflowY=\"\"),this.dispatchEvent(new CustomEvent(\"me-close\",{bubbles:!0,composed:!0,detail:{element:this}}))};/**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */#s=e=>{let t=this.#c(\"escape-key\");this.dispatchEvent(t),t.defaultPrevented&&(e.preventDefault(),this.noAnimations||this.#d())};/**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */#n=e=>{let t=this.#c(\"close-button\");this.dispatchEvent(t),t.defaultPrevented&&(e.preventDefault(),this.noAnimations||this.#d())};/**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */#a=e=>{if(e.target!==e.currentTarget)return;let t=this.#c(\"backdrop-click\");if(this.dispatchEvent(t),t.defaultPrevented||this.staticBackdrop){this.noAnimations||this.#d();return}this.#e?.close()};/**\n * Handles the slotchange event of the footer slot.\n */#r=()=>{if(null===this.#e)return;/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__footer\");if(null===e)return;let t=this.#t?.assignedNodes(),o=!!t&&t.length>0;e.hidden=!o};/**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */#c(e){return new CustomEvent(\"me-request-close\",{bubbles:!0,composed:!0,cancelable:!0,detail:{reason:e,element:this}})}/**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */#i(e){if(Object.prototype.hasOwnProperty.call(this,e)){let t=this[e];delete this[e],this[e]=t}}/**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */show(){this.open||(this.open=!0)}/**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */hide(){this.open&&(this.open=!1)}/**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */static defineCustomElement(e=\"modal-element\"){\"undefined\"==typeof window||window.customElements.get(e)||window.customElements.define(e,t)}}t.defineCustomElement();export{t as ModalElement};//# sourceMappingURL=modal-element-defined.js.map\n\n//# sourceMappingURL=modal-element-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $180b6dcf923bafc7$exports = {};\n\n$parcel$export($180b6dcf923bafc7$exports, \"ModalElement\", function () { return $180b6dcf923bafc7$export$32589115725b904b; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ const $180b6dcf923bafc7$var$PULSE_ANIMATION_DURATION = 300;\nconst $180b6dcf923bafc7$var$template = document.createElement(\"template\");\n$180b6dcf923bafc7$var$template.innerHTML = /* html */ `\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;\n/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */ class $180b6dcf923bafc7$export$32589115725b904b extends HTMLElement {\n /** @type {Nullable} */ #dialogEl = null;\n /** @type {Nullable} */ #footerSlotEl = null;\n /** @type {ReturnType | undefined} */ #pulseAnimationTimeout = void 0;\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($180b6dcf923bafc7$var$template.content.cloneNode(true));\n }\n if (this.shadowRoot) {\n this.#dialogEl = this.shadowRoot.querySelector(\"dialog\");\n this.#footerSlotEl = this.shadowRoot.querySelector('slot[name=\"footer\"]');\n }\n }\n static get observedAttributes() {\n return [\n \"open\",\n \"no-header\",\n \"no-animations\",\n \"no-close-button\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (this.#dialogEl === null) return;\n if (name === \"open\" && oldValue !== newValue) {\n if (this.open) {\n this.#dialogEl.showModal();\n if (document.body) document.body.style.overflowY = \"hidden\";\n this.dispatchEvent(new CustomEvent(\"me-open\", {\n bubbles: true,\n composed: true,\n detail: {\n element: this\n }\n }));\n } else this.#dialogEl.close();\n }\n if (name === \"no-header\" && oldValue !== newValue) {\n /** @type {Nullable} */ const headerEl = this.#dialogEl.querySelector(\".dialog__header\");\n if (headerEl !== null) headerEl.hidden = this.noHeader;\n }\n if (name === \"no-animations\" && oldValue !== newValue) this.#dialogEl.classList.toggle(\"dialog--no-animations\", this.noAnimations);\n if (name === \"no-close-button\" && oldValue !== newValue) {\n /** @type {Nullable} */ const closeBtnEl = this.#dialogEl.querySelector(\".dialog__close\");\n if (closeBtnEl !== null) closeBtnEl.hidden = this.noCloseButton;\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"open\");\n this.#upgradeProperty(\"staticBackdrop\");\n this.#upgradeProperty(\"noHeader\");\n this.#upgradeProperty(\"noAnimations\");\n this.#upgradeProperty(\"noCloseButton\");\n this.#upgradeProperty(\"fullscreen\");\n this.#dialogEl?.addEventListener(\"click\", this.#handleDialogClick);\n this.#dialogEl?.addEventListener(\"close\", this.#handleDialogClose);\n this.#dialogEl?.addEventListener(\"cancel\", this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\", this.#handleCloseButtonClick);\n this.#footerSlotEl?.addEventListener(\"slotchange\", this.#handleFooterSlotChange);\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#pulseAnimationTimeout && clearTimeout(this.#pulseAnimationTimeout);\n this.#dialogEl?.addEventListener(\"click\", this.#handleDialogClick);\n this.#dialogEl?.removeEventListener(\"close\", this.#handleDialogClose);\n this.#dialogEl?.removeEventListener(\"cancel\", this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\", this.#handleCloseButtonClick);\n this.#footerSlotEl?.removeEventListener(\"slotchange\", this.#handleFooterSlotChange);\n }\n /**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */ get open() {\n return this.hasAttribute(\"open\");\n }\n set open(value) {\n if (value) this.setAttribute(\"open\", \"\");\n else this.removeAttribute(\"open\");\n }\n /**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */ get staticBackdrop() {\n return this.hasAttribute(\"static-backdrop\");\n }\n set staticBackdrop(value) {\n if (value) this.setAttribute(\"static-backdrop\", \"\");\n else this.removeAttribute(\"static-backdrop\");\n }\n /**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */ get noHeader() {\n return this.hasAttribute(\"no-header\");\n }\n set noHeader(value) {\n if (value) this.setAttribute(\"no-header\", \"\");\n else this.removeAttribute(\"no-header\");\n }\n /**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */ get noAnimations() {\n return this.hasAttribute(\"no-animations\");\n }\n set noAnimations(value) {\n if (value) this.setAttribute(\"no-animations\", \"\");\n else this.removeAttribute(\"no-animations\");\n }\n /**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */ get noCloseButton() {\n return this.hasAttribute(\"no-close-button\");\n }\n set noCloseButton(value) {\n if (value) this.setAttribute(\"no-close-button\", \"\");\n else this.removeAttribute(\"no-close-button\");\n }\n /**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */ get fullscreen() {\n return this.hasAttribute(\"fullscreen\");\n }\n set fullscreen(value) {\n if (value) this.setAttribute(\"fullscreen\", \"\");\n else this.removeAttribute(\"fullscreen\");\n }\n /**\n * Applies a pulse effect on the dialog.\n */ #applyPulseEffectOnDialog() {\n if (this.#pulseAnimationTimeout) return;\n this.#dialogEl?.classList.add(\"dialog--pulse\");\n this.#pulseAnimationTimeout = setTimeout(()=>{\n this.#dialogEl?.classList.remove(\"dialog--pulse\");\n clearTimeout(this.#pulseAnimationTimeout);\n this.#pulseAnimationTimeout = void 0;\n }, $180b6dcf923bafc7$var$PULSE_ANIMATION_DURATION);\n }\n /**\n * Handles the close event of the dialog.\n */ #handleDialogClose = ()=>{\n // This is needed because the dialog element does not reset\n // the open property when the dialog is closed by the user.\n this.open = false;\n if (document.body) document.body.style.overflowY = \"\";\n this.dispatchEvent(new CustomEvent(\"me-close\", {\n bubbles: true,\n composed: true,\n detail: {\n element: this\n }\n }));\n };\n /**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */ #handleDialogCancel = (evt)=>{\n const requestCloseEvent = this.#createRequestCloseEvent(\"escape-key\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n /**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */ #handleCloseButtonClick = (evt)=>{\n const requestCloseEvent = this.#createRequestCloseEvent(\"close-button\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n /**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */ #handleDialogClick = (evt)=>{\n if (evt.target !== evt.currentTarget) return;\n const requestCloseEvent = this.#createRequestCloseEvent(\"backdrop-click\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented || this.staticBackdrop) {\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n return;\n }\n this.#dialogEl?.close();\n };\n /**\n * Handles the slotchange event of the footer slot.\n */ #handleFooterSlotChange = ()=>{\n if (this.#dialogEl === null) return;\n /** @type {Nullable} */ const footerEl = this.#dialogEl.querySelector(\".dialog__footer\");\n if (footerEl === null) return;\n const footerSlotNodes = this.#footerSlotEl?.assignedNodes();\n const hasFooterSlotNodes = footerSlotNodes ? footerSlotNodes.length > 0 : false;\n footerEl.hidden = !hasFooterSlotNodes;\n };\n /**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */ #createRequestCloseEvent(reason) {\n return new CustomEvent(\"me-request-close\", {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n reason: reason,\n element: this\n }\n });\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */ show() {\n if (this.open) return;\n this.open = true;\n }\n /**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */ hide() {\n if (!this.open) return;\n this.open = false;\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */ static defineCustomElement(elementName = \"modal-element\") {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $180b6dcf923bafc7$export$32589115725b904b);\n }\n}\n\n\n(0, $180b6dcf923bafc7$export$32589115725b904b).defineCustomElement();\n\n\nexport {$180b6dcf923bafc7$export$32589115725b904b as ModalElement};\n//# sourceMappingURL=modal-element-defined.js.map\n","import { ModalElement } from './modal-element.js';\n\nModalElement.defineCustomElement();\n\nexport { ModalElement };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\nconst PULSE_ANIMATION_DURATION = 300;\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */`\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;\n\n/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */\nclass ModalElement extends HTMLElement {\n /** @type {Nullable} */\n #dialogEl = null;\n\n /** @type {Nullable} */\n #footerSlotEl = null;\n\n /** @type {ReturnType | undefined} */\n #pulseAnimationTimeout = void 0;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n if (this.shadowRoot) {\n this.#dialogEl = this.shadowRoot.querySelector('dialog');\n this.#footerSlotEl = this.shadowRoot.querySelector('slot[name=\"footer\"]');\n }\n }\n\n static get observedAttributes() {\n return ['open', 'no-header', 'no-animations', 'no-close-button'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (this.#dialogEl === null) {\n return;\n }\n\n if (name === 'open' && oldValue !== newValue) {\n if (this.open) {\n this.#dialogEl.showModal();\n\n if (document.body) {\n document.body.style.overflowY = 'hidden';\n }\n\n this.dispatchEvent(new CustomEvent('me-open', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n }));\n } else {\n this.#dialogEl.close();\n }\n }\n\n if (name === 'no-header' && oldValue !== newValue) {\n /** @type {Nullable} */\n const headerEl = this.#dialogEl.querySelector('.dialog__header');\n\n if (headerEl !== null) {\n headerEl.hidden = this.noHeader;\n }\n }\n\n if (name === 'no-animations' && oldValue !== newValue) {\n this.#dialogEl.classList.toggle('dialog--no-animations', this.noAnimations);\n }\n\n if (name === 'no-close-button' && oldValue !== newValue) {\n /** @type {Nullable} */\n const closeBtnEl = this.#dialogEl.querySelector('.dialog__close');\n\n if (closeBtnEl !== null) {\n closeBtnEl.hidden = this.noCloseButton;\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('open');\n this.#upgradeProperty('staticBackdrop');\n this.#upgradeProperty('noHeader');\n this.#upgradeProperty('noAnimations');\n this.#upgradeProperty('noCloseButton');\n this.#upgradeProperty('fullscreen');\n\n this.#dialogEl?.addEventListener('click', this.#handleDialogClick);\n this.#dialogEl?.addEventListener('close', this.#handleDialogClose);\n this.#dialogEl?.addEventListener('cancel', this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.addEventListener('submit', this.#handleCloseButtonClick);\n this.#footerSlotEl?.addEventListener('slotchange', this.#handleFooterSlotChange);\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#pulseAnimationTimeout && clearTimeout(this.#pulseAnimationTimeout);\n this.#dialogEl?.addEventListener('click', this.#handleDialogClick);\n this.#dialogEl?.removeEventListener('close', this.#handleDialogClose);\n this.#dialogEl?.removeEventListener('cancel', this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.removeEventListener('submit', this.#handleCloseButtonClick);\n this.#footerSlotEl?.removeEventListener('slotchange', this.#handleFooterSlotChange);\n }\n\n /**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */\n get open() {\n return this.hasAttribute('open');\n }\n\n set open(value) {\n if (value) {\n this.setAttribute('open', '');\n } else {\n this.removeAttribute('open');\n }\n }\n\n /**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */\n get staticBackdrop() {\n return this.hasAttribute('static-backdrop');\n }\n\n set staticBackdrop(value) {\n if (value) {\n this.setAttribute('static-backdrop', '');\n } else {\n this.removeAttribute('static-backdrop');\n }\n }\n\n /**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */\n get noHeader() {\n return this.hasAttribute('no-header');\n }\n\n set noHeader(value) {\n if (value) {\n this.setAttribute('no-header', '');\n } else {\n this.removeAttribute('no-header');\n }\n }\n\n /**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */\n get noAnimations() {\n return this.hasAttribute('no-animations');\n }\n\n set noAnimations(value) {\n if (value) {\n this.setAttribute('no-animations', '');\n } else {\n this.removeAttribute('no-animations');\n }\n }\n\n /**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */\n get noCloseButton() {\n return this.hasAttribute('no-close-button');\n }\n\n set noCloseButton(value) {\n if (value) {\n this.setAttribute('no-close-button', '');\n } else {\n this.removeAttribute('no-close-button');\n }\n }\n\n /**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */\n get fullscreen() {\n return this.hasAttribute('fullscreen');\n }\n\n set fullscreen(value) {\n if (value) {\n this.setAttribute('fullscreen', '');\n } else {\n this.removeAttribute('fullscreen');\n }\n }\n\n /**\n * Applies a pulse effect on the dialog.\n */\n #applyPulseEffectOnDialog() {\n if (this.#pulseAnimationTimeout) {\n return;\n }\n\n this.#dialogEl?.classList.add('dialog--pulse');\n\n this.#pulseAnimationTimeout = setTimeout(() => {\n this.#dialogEl?.classList.remove('dialog--pulse');\n clearTimeout(this.#pulseAnimationTimeout);\n this.#pulseAnimationTimeout = void 0;\n }, PULSE_ANIMATION_DURATION);\n }\n\n /**\n * Handles the close event of the dialog.\n */\n #handleDialogClose = () => {\n // This is needed because the dialog element does not reset\n // the open property when the dialog is closed by the user.\n this.open = false;\n\n if (document.body) {\n document.body.style.overflowY = '';\n }\n\n this.dispatchEvent(new CustomEvent('me-close', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n }));\n };\n\n /**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */\n #handleDialogCancel = evt => {\n const requestCloseEvent = this.#createRequestCloseEvent('escape-key');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n\n /**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */\n #handleCloseButtonClick = evt => {\n const requestCloseEvent = this.#createRequestCloseEvent('close-button');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n\n /**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */\n #handleDialogClick = evt => {\n if (evt.target !== evt.currentTarget) {\n return;\n }\n\n const requestCloseEvent = this.#createRequestCloseEvent('backdrop-click');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented || this.staticBackdrop) {\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n return;\n }\n\n this.#dialogEl?.close();\n };\n\n /**\n * Handles the slotchange event of the footer slot.\n */\n #handleFooterSlotChange = () => {\n if (this.#dialogEl === null) {\n return;\n }\n\n /** @type {Nullable} */\n const footerEl = this.#dialogEl.querySelector('.dialog__footer');\n\n if (footerEl === null) {\n return;\n }\n\n const footerSlotNodes = this.#footerSlotEl?.assignedNodes();\n const hasFooterSlotNodes = footerSlotNodes ? footerSlotNodes.length > 0 : false;\n\n footerEl.hidden = !hasFooterSlotNodes;\n };\n\n /**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */\n #createRequestCloseEvent(reason) {\n return new CustomEvent('me-request-close', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n reason,\n element: this\n }\n });\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */\n show() {\n if (this.open) {\n return;\n }\n\n this.open = true;\n }\n\n /**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */\n hide() {\n if (!this.open) {\n return;\n }\n\n this.open = false;\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */\n static defineCustomElement(elementName = 'modal-element') {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, ModalElement);\n }\n }\n}\n\nexport { ModalElement };\n","Object.defineProperty({},\"FilesDropzone\",{get:function(){return m},set:void 0,enumerable:!0,configurable:!0});let e=new Map([[\"aac\",\"audio/aac\"],[\"abw\",\"application/x-abiword\"],[\"arc\",\"application/x-freearc\"],[\"avif\",\"image/avif\"],[\"avi\",\"video/x-msvideo\"],[\"azw\",\"application/vnd.amazon.ebook\"],[\"bin\",\"application/octet-stream\"],[\"bmp\",\"image/bmp\"],[\"bz\",\"application/x-bzip\"],[\"bz2\",\"application/x-bzip2\"],[\"cda\",\"application/x-cdf\"],[\"csh\",\"application/x-csh\"],[\"css\",\"text/css\"],[\"csv\",\"text/csv\"],[\"doc\",\"application/msword\"],[\"docx\",\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"],[\"eot\",\"application/vnd.ms-fontobject\"],[\"epub\",\"application/epub+zip\"],[\"gz\",\"application/gzip\"],[\"gif\",\"image/gif\"],[\"heic\",\"image/heic\"],[\"heif\",\"image/heif\"],[\"htm\",\"text/html\"],[\"html\",\"text/html\"],[\"ico\",\"image/vnd.microsoft.icon\"],[\"ics\",\"text/calendar\"],[\"jar\",\"application/java-archive\"],[\"jpeg\",\"image/jpeg\"],[\"jpg\",\"image/jpeg\"],[\"jxl\",\"image/jxl\"],[\"js\",\"text/javascript\"],[\"json\",\"application/json\"],[\"jsonld\",\"application/ld+json\"],[\"markdown\",\"text/markdown\"],[\"md\",\"text/markdown\"],[\"mid\",\"audio/midi\"],[\"midi\",\"audio/midi\"],[\"mjs\",\"text/javascript\"],[\"mp3\",\"audio/mpeg\"],[\"mp4\",\"video/mp4\"],[\"mpeg\",\"video/mpeg\"],[\"mpkg\",\"application/vnd.apple.installer+xml\"],[\"odp\",\"application/vnd.oasis.opendocument.presentation\"],[\"ods\",\"application/vnd.oasis.opendocument.spreadsheet\"],[\"odt\",\"application/vnd.oasis.opendocument.text\"],[\"oga\",\"audio/ogg\"],[\"ogv\",\"video/ogg\"],[\"ogx\",\"application/ogg\"],[\"opus\",\"audio/opus\"],[\"otf\",\"font/otf\"],[\"png\",\"image/png\"],[\"pdf\",\"application/pdf\"],[\"php\",\"application/x-httpd-php\"],[\"ppt\",\"application/vnd.ms-powerpoint\"],[\"pptx\",\"application/vnd.openxmlformats-officedocument.presentationml.presentation\"],[\"rar\",\"application/vnd.rar\"],[\"rtf\",\"application/rtf\"],[\"sh\",\"application/x-sh\"],[\"svg\",\"image/svg+xml\"],[\"swf\",\"application/x-shockwave-flash\"],[\"tar\",\"application/x-tar\"],[\"tif\",\"image/tiff\"],[\"tiff\",\"image/tiff\"],[\"ts\",\"video/mp2t\"],[\"ttf\",\"font/ttf\"],[\"txt\",\"text/plain\"],[\"vsd\",\"application/vnd.visio\"],[\"wav\",\"audio/wav\"],[\"weba\",\"audio/webm\"],[\"webm\",\"video/webm\"],[\"webp\",\"image/webp\"],[\"woff\",\"font/woff\"],[\"woff2\",\"font/woff2\"],[\"xhtml\",\"application/xhtml+xml\"],[\"xls\",\"application/vnd.ms-excel\"],[\"xlsx\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],[\"xml\",\"application/xml\"],[\"xul\",\"application/vnd.mozilla.xul+xml\"],[\"zip\",\"application/zip\"],[\"7z\",\"application/x-7z-compressed\"],[\"mkv\",\"video/x-matroska\"],[\"mov\",\"video/quicktime\"],[\"msg\",\"application/vnd.ms-outlook\"]]),t=[\".DS_Store\",\"Thumbs.db\"],o=t=>{let{name:o}=t;if(o&&-1!==o.lastIndexOf(\".\")&&!t.type){let i=(o.split(\".\").pop()||\"\").toLowerCase(),r=e.get(i);r&&Object.defineProperty(t,\"type\",{value:r,writable:!1,configurable:!1,enumerable:!0})}return t},i=(e,t)=>{let i=o(e);if(\"string\"!=typeof i.path){let{webkitRelativePath:o}=e;Object.defineProperty(i,\"path\",{value:\"string\"==typeof t?t:o||e.name,writable:!1,configurable:!1,enumerable:!0})}return i},r=async e=>await new Promise((t,o)=>{e.readEntries(t,o)}),a=async e=>{let t=[],o=await r(e);for(;o.length>0;)t.push(...o),o=await r(e);return t},n=e=>new Promise((t,o)=>{e.file(o=>t(i(o,e.fullPath)),o)}),s=async e=>{let o=[],i=[];for(let t of e){if(\"file\"!==t.kind)continue;let e=t.getAsEntry?t.getAsEntry():t.webkitGetAsEntry();i.push(e)}for(;i.length>0;){let e=i.shift();if(e){if(e.isFile){let i=await n(e);-1===t.indexOf(i.name)&&o.push(i)}else e.isDirectory&&i.push(...await a(e.createReader()))}}return o},d=async e=>{let o=[];for(let r of e)-1===t.indexOf(r.name)&&o.push(i(r));return o},l=async e=>e.dataTransfer?e.dataTransfer.items?await s(e.dataTransfer.items):await d(e.dataTransfer.files):await d(e.target.files),p=\"files-dropzone\",c=\"TOO_MANY_FILES\",h=document.createElement(\"template\"),u=`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;h.innerHTML=`\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;class m extends HTMLElement{#e=null;#t=null;constructor(){super(),this.shadowRoot||this.attachShadow({mode:\"open\"}).appendChild(h.content.cloneNode(!0)),this.shadowRoot&&(this.#e=this.shadowRoot.getElementById(\"fileInput\"),this.#t=this.shadowRoot.getElementById(\"dropzoneEl\"))}static get observedAttributes(){return[\"accept\",\"disabled\",\"multiple\",\"no-keyboard\"]}attributeChangedCallback(e,t,o){\"accept\"===e&&t!==o&&this.#e&&(this.#e.accept=this.accept),\"disabled\"===e&&t!==o&&this.#e&&(this.#e.disabled=this.disabled,this.disabled?this.#t?.removeAttribute(\"tabindex\"):this.#t?.setAttribute(\"tabindex\",\"0\")),\"multiple\"===e&&t!==o&&this.#e&&(this.#e.multiple=this.multiple),\"no-keyboard\"===e&&t!==o&&this.#t&&(this.noKeyboard?this.#t.removeAttribute(\"tabindex\"):this.#t.setAttribute(\"tabindex\",\"0\"))}connectedCallback(){this.#o(\"accept\"),this.#o(\"disabled\"),this.#o(\"maxFiles\"),this.#o(\"maxSize\"),this.#o(\"minSize\"),this.#o(\"multiple\"),this.#o(\"noClick\"),this.#o(\"noDrag\"),this.#o(\"noKeyboard\"),this.#o(\"autoFocus\"),this.#o(\"noStyle\"),this.#e?.addEventListener(\"change\",this.#i),this.#t?.addEventListener(\"dragenter\",this.#r),this.#t?.addEventListener(\"dragover\",this.#a),this.#t?.addEventListener(\"dragleave\",this.#n),this.#t?.addEventListener(\"drop\",this.#s),this.#t?.addEventListener(\"click\",this.#d),this.#t?.addEventListener(\"keyup\",this.#l),this.autoFocus&&this.#t?.focus()}disconnectedCallback(){this.#e?.removeEventListener(\"change\",this.#i),this.#t?.removeEventListener(\"dragenter\",this.#r),this.#t?.removeEventListener(\"dragover\",this.#a),this.#t?.removeEventListener(\"dragleave\",this.#n),this.#t?.removeEventListener(\"drop\",this.#s),this.#t?.removeEventListener(\"click\",this.#d),this.#t?.removeEventListener(\"keyup\",this.#l)}get accept(){return this.getAttribute(\"accept\")||\"\"}set accept(e){this.setAttribute(\"accept\",null!=e?e.toString():e)}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(e){this.toggleAttribute(\"disabled\",!!e)}get maxFiles(){let e=Number(this.getAttribute(\"max-files\"))||0;return e<=0?1/0:Math.floor(Math.abs(e))}set maxFiles(e){this.setAttribute(\"max-files\",null!=e?e.toString():e)}get maxSize(){let e=this.getAttribute(\"max-size\");if(null===e)return 1/0;let t=Number(e);return Number.isNaN(t)?1/0:t}set maxSize(e){this.setAttribute(\"max-size\",null!=e?e.toString():e)}get minSize(){let e=this.getAttribute(\"min-size\");if(null===e)return 0;let t=Number(e);return Number.isNaN(t)?0:t}set minSize(e){this.setAttribute(\"min-size\",null!=e?e.toString():e)}get multiple(){return this.hasAttribute(\"multiple\")}set multiple(e){this.toggleAttribute(\"multiple\",!!e)}get noClick(){return this.hasAttribute(\"no-click\")}set noClick(e){this.toggleAttribute(\"no-click\",!!e)}get noDrag(){return this.hasAttribute(\"no-drag\")}set noDrag(e){this.toggleAttribute(\"no-drag\",!!e)}get noKeyboard(){return this.hasAttribute(\"no-keyboard\")}set noKeyboard(e){this.toggleAttribute(\"no-keyboard\",!!e)}get autoFocus(){return this.hasAttribute(\"auto-focus\")}set autoFocus(e){this.toggleAttribute(\"auto-focus\",!!e)}get noStyle(){return this.hasAttribute(\"no-style\")}set noStyle(e){this.toggleAttribute(\"no-style\",!!e)}#i=async e=>{try{this.#p(await l(e))}catch(e){this.dispatchEvent(new CustomEvent(`${p}-error`,{bubbles:!0,composed:!0,detail:{error:e}}))}};#r=()=>{this.disabled||this.noDrag||this.dispatchEvent(new Event(`${p}-dragenter`,{bubbles:!0,composed:!0}))};#a=e=>{if(e.preventDefault(),this.disabled||this.noDrag){e.dataTransfer.dropEffect=\"none\";return}e.dataTransfer.dropEffect=\"copy\",this.#t&&(this.#t.classList.add(\"dropzone--dragover\"),this.#t.part.add(\"dropzone--dragover\")),this.dispatchEvent(new Event(`${p}-dragover`,{bubbles:!0,composed:!0}))};#n=()=>{this.disabled||this.noDrag||(this.#t&&(this.#t.classList.remove(\"dropzone--dragover\"),this.#t.part.remove(\"dropzone--dragover\")),this.dispatchEvent(new Event(`${p}-dragleave`,{bubbles:!0,composed:!0})))};#s=async e=>{if(!this.disabled&&!this.noDrag){e.preventDefault(),this.#t&&(this.#t.classList.remove(\"dropzone--dragover\"),this.#t.part.remove(\"dropzone--dragover\"));try{this.#p(await l(e))}catch(e){this.dispatchEvent(new CustomEvent(`${p}-error`,{bubbles:!0,composed:!0,detail:{error:e}}))}}};#d=()=>{this.disabled||this.noClick||this.#e?.click()};#l=e=>{this.disabled||this.noKeyboard||\" \"!==e.key&&\"Enter\"!==e.key||this.#e?.click()};#p(e){if(!Array.isArray(e)||!e.length)return;let t=[],o=[],i=e.length;if(!this.multiple&&i>1)for(let t of e)o.push({file:t,errors:[{code:c,message:\"Too many files selected. Only 1 file is allowed.\"}]});else if(this.multiple&&i>this.maxFiles)for(let t of e)o.push({file:t,errors:[{code:c,message:`Too many files selected. Only ${this.maxFiles} ${this.maxFiles>1?\"files are\":\"file is\"} allowed.`}]});else for(let i of e){let e=function(e,t=\"\"){if(!t)return!0;let o=[...new Set(t.split(\",\").map(e=>e.trim()).filter(Boolean))],i=e.type,r=i.replace(/\\/.*$/,\"\");for(let t of o)if(\".\"===t.charAt(0)){if(-1!==e.name.toLowerCase().indexOf(t.toLowerCase(),e.name.length-t.length))return!0}else if(/\\/\\*$/.test(t)){if(r===t.replace(/\\/.*$/,\"\"))return!0}else if(i===t)return!0;return!1}(i,this.accept),r=i.size>this.maxSize,a=i.size0&&this.dispatchEvent(new CustomEvent(`${p}-drop-accepted`,{bubbles:!0,composed:!0,detail:{acceptedFiles:t}})),o.length>0&&this.dispatchEvent(new CustomEvent(`${p}-drop-rejected`,{bubbles:!0,composed:!0,detail:{rejectedFiles:o}})),this.#e&&(this.#e.value=this.#e.defaultValue)}openFileDialog(){this.disabled||this.#e?.click()}#o(e){if(Object.prototype.hasOwnProperty.call(this,e)){let t=this[e];delete this[e],this[e]=t}}static defineCustomElement(e=p){\"undefined\"==typeof window||window.customElements.get(e)||window.customElements.define(e,m)}}m.defineCustomElement();export{m as FilesDropzone};\n//# sourceMappingURL=files-dropzone-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $862aa3736b0514bc$exports = {};\n\n$parcel$export($862aa3736b0514bc$exports, \"FilesDropzone\", function () { return $862aa3736b0514bc$export$6ccd1735166caad9; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ // @ts-check\n/**\n * Checks if a file is valid based on the accepted file type specifiers.\n *\n * @param {File} file - The File object to validate.\n * @param {string} [acceptedTypeSpecifiers=''] - The accepted file type specifiers.\n * @returns {boolean} - True if the file is valid, false otherwise.\n */ function $38f222170fd4d21a$export$7c47054fed488f80(file, acceptedTypeSpecifiers = \"\") {\n if (!acceptedTypeSpecifiers) return true;\n const acceptedMimeTypesList = [\n ...new Set(acceptedTypeSpecifiers.split(\",\").map((v)=>v.trim()).filter(Boolean))\n ];\n const fileMimeType = file.type;\n const baseMimeType = fileMimeType.replace(/\\/.*$/, \"\");\n for (const validType of acceptedMimeTypesList){\n if (validType.charAt(0) === \".\") {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) return true;\n } else if (/\\/\\*$/.test(validType)) {\n // Check for mime type that looks like \"image/*\" or similar.\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) return true;\n } else {\n if (fileMimeType === validType) return true;\n }\n }\n return false;\n}\n\n\n// @ts-check\n/**\n * A map of common file extensions and their associated MIME types.\n */ const $f31161edf38949e9$var$COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n [\n \"aac\",\n \"audio/aac\"\n ],\n [\n \"abw\",\n \"application/x-abiword\"\n ],\n [\n \"arc\",\n \"application/x-freearc\"\n ],\n [\n \"avif\",\n \"image/avif\"\n ],\n [\n \"avi\",\n \"video/x-msvideo\"\n ],\n [\n \"azw\",\n \"application/vnd.amazon.ebook\"\n ],\n [\n \"bin\",\n \"application/octet-stream\"\n ],\n [\n \"bmp\",\n \"image/bmp\"\n ],\n [\n \"bz\",\n \"application/x-bzip\"\n ],\n [\n \"bz2\",\n \"application/x-bzip2\"\n ],\n [\n \"cda\",\n \"application/x-cdf\"\n ],\n [\n \"csh\",\n \"application/x-csh\"\n ],\n [\n \"css\",\n \"text/css\"\n ],\n [\n \"csv\",\n \"text/csv\"\n ],\n [\n \"doc\",\n \"application/msword\"\n ],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ],\n [\n \"eot\",\n \"application/vnd.ms-fontobject\"\n ],\n [\n \"epub\",\n \"application/epub+zip\"\n ],\n [\n \"gz\",\n \"application/gzip\"\n ],\n [\n \"gif\",\n \"image/gif\"\n ],\n [\n \"heic\",\n \"image/heic\"\n ],\n [\n \"heif\",\n \"image/heif\"\n ],\n [\n \"htm\",\n \"text/html\"\n ],\n [\n \"html\",\n \"text/html\"\n ],\n [\n \"ico\",\n \"image/vnd.microsoft.icon\"\n ],\n [\n \"ics\",\n \"text/calendar\"\n ],\n [\n \"jar\",\n \"application/java-archive\"\n ],\n [\n \"jpeg\",\n \"image/jpeg\"\n ],\n [\n \"jpg\",\n \"image/jpeg\"\n ],\n [\n \"jxl\",\n \"image/jxl\"\n ],\n [\n \"js\",\n \"text/javascript\"\n ],\n [\n \"json\",\n \"application/json\"\n ],\n [\n \"jsonld\",\n \"application/ld+json\"\n ],\n [\n \"markdown\",\n \"text/markdown\"\n ],\n [\n \"md\",\n \"text/markdown\"\n ],\n [\n \"mid\",\n \"audio/midi\"\n ],\n [\n \"midi\",\n \"audio/midi\"\n ],\n [\n \"mjs\",\n \"text/javascript\"\n ],\n [\n \"mp3\",\n \"audio/mpeg\"\n ],\n [\n \"mp4\",\n \"video/mp4\"\n ],\n [\n \"mpeg\",\n \"video/mpeg\"\n ],\n [\n \"mpkg\",\n \"application/vnd.apple.installer+xml\"\n ],\n [\n \"odp\",\n \"application/vnd.oasis.opendocument.presentation\"\n ],\n [\n \"ods\",\n \"application/vnd.oasis.opendocument.spreadsheet\"\n ],\n [\n \"odt\",\n \"application/vnd.oasis.opendocument.text\"\n ],\n [\n \"oga\",\n \"audio/ogg\"\n ],\n [\n \"ogv\",\n \"video/ogg\"\n ],\n [\n \"ogx\",\n \"application/ogg\"\n ],\n [\n \"opus\",\n \"audio/opus\"\n ],\n [\n \"otf\",\n \"font/otf\"\n ],\n [\n \"png\",\n \"image/png\"\n ],\n [\n \"pdf\",\n \"application/pdf\"\n ],\n [\n \"php\",\n \"application/x-httpd-php\"\n ],\n [\n \"ppt\",\n \"application/vnd.ms-powerpoint\"\n ],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n ],\n [\n \"rar\",\n \"application/vnd.rar\"\n ],\n [\n \"rtf\",\n \"application/rtf\"\n ],\n [\n \"sh\",\n \"application/x-sh\"\n ],\n [\n \"svg\",\n \"image/svg+xml\"\n ],\n [\n \"swf\",\n \"application/x-shockwave-flash\"\n ],\n [\n \"tar\",\n \"application/x-tar\"\n ],\n [\n \"tif\",\n \"image/tiff\"\n ],\n [\n \"tiff\",\n \"image/tiff\"\n ],\n [\n \"ts\",\n \"video/mp2t\"\n ],\n [\n \"ttf\",\n \"font/ttf\"\n ],\n [\n \"txt\",\n \"text/plain\"\n ],\n [\n \"vsd\",\n \"application/vnd.visio\"\n ],\n [\n \"wav\",\n \"audio/wav\"\n ],\n [\n \"weba\",\n \"audio/webm\"\n ],\n [\n \"webm\",\n \"video/webm\"\n ],\n [\n \"webp\",\n \"image/webp\"\n ],\n [\n \"woff\",\n \"font/woff\"\n ],\n [\n \"woff2\",\n \"font/woff2\"\n ],\n [\n \"xhtml\",\n \"application/xhtml+xml\"\n ],\n [\n \"xls\",\n \"application/vnd.ms-excel\"\n ],\n [\n \"xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ],\n [\n \"xml\",\n \"application/xml\"\n ],\n [\n \"xul\",\n \"application/vnd.mozilla.xul+xml\"\n ],\n [\n \"zip\",\n \"application/zip\"\n ],\n [\n \"7z\",\n \"application/x-7z-compressed\"\n ],\n // Others\n [\n \"mkv\",\n \"video/x-matroska\"\n ],\n [\n \"mov\",\n \"video/quicktime\"\n ],\n [\n \"msg\",\n \"application/vnd.ms-outlook\"\n ]\n]);\nconst $f31161edf38949e9$var$FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n \".DS_Store\",\n \"Thumbs.db\" // Windows\n];\n/**\n * Adds a `type` property to the file object if it doesn't have one and the file has an extension.\n * This is needed because Firefox doesn't add a type property to files dragged from the desktop.\n * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=1424689\n *\n * @param {File} file - The file object to add the type property to.\n * @returns {File} - The file object with the type property added.\n */ const $f31161edf38949e9$var$toFileWithMimeType = (file)=>{\n const { name: name } = file;\n const hasExtension = name && name.lastIndexOf(\".\") !== -1;\n if (hasExtension && !file.type) {\n const extension = (name.split(\".\").pop() || \"\").toLowerCase();\n const type = $f31161edf38949e9$var$COMMON_MIME_TYPES.get(extension);\n if (type) Object.defineProperty(file, \"type\", {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return file;\n};\n/**\n * Adds a `path` property to the file object if it doesn't have one.\n * If `path` is not provided, the `webkitRelativePath` property of the file will be used\n * or the file's name if `webkitRelativePath` is not available.\n *\n * @param {File} file - The file object to add the path property to.\n * @param {string} [path] - The path to set on the file object.\n * @returns {File} - The file object with the path property added.\n */ const $f31161edf38949e9$var$toFileWithPath = (file, path)=>{\n const fileWithMimeType = $f31161edf38949e9$var$toFileWithMimeType(file);\n // @ts-ignore\n if (typeof fileWithMimeType.path !== \"string\") {\n const { webkitRelativePath: webkitRelativePath } = file;\n Object.defineProperty(fileWithMimeType, \"path\", {\n value: typeof path === \"string\" ? path : webkitRelativePath || file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return fileWithMimeType;\n};\n/**\n * Wrap `FileSystemDirectoryReader.readEntries` in a promise to make working with read entries easier.\n * https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */ const $f31161edf38949e9$var$readEntriesPromise = async (directoryReader)=>{\n return await new Promise((resolve, reject)=>{\n directoryReader.readEntries(resolve, reject);\n });\n};\n/**\n * Read all entries in a directory or sub-directory\n * by calling `readEntries` until it returns an empty array.\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */ const $f31161edf38949e9$var$readAllDirectoryEntries = async (directoryReader)=>{\n const entries = [];\n let readEntries = await $f31161edf38949e9$var$readEntriesPromise(directoryReader);\n while(readEntries.length > 0){\n entries.push(...readEntries);\n readEntries = await $f31161edf38949e9$var$readEntriesPromise(directoryReader);\n }\n return entries;\n};\n/**\n * Get a `File` object from a `FileSystemFileEntry` object.\n *\n * @param {FileSystemFileEntry} fileEntry - The file entry to get a `File` object from.\n * @returns {Promise} - A promise that resolves with a `File` object.\n */ const $f31161edf38949e9$var$getFileFromFileEntry = (fileEntry)=>{\n return new Promise((resolve, reject)=>{\n fileEntry.file((file)=>resolve($f31161edf38949e9$var$toFileWithPath(file, fileEntry.fullPath)), reject);\n });\n};\n/**\n * Get an array of `File` objects from a `DataTransferItemList` object.\n *\n * @param {DataTransferItemList} dataTransferItemList - The item list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */ const $f31161edf38949e9$var$getFilesFromDataTransferItemList = async (dataTransferItemList)=>{\n const files = [];\n // Chromium browsers read only 100 files at a time as per the spec, so we need to use\n // BFS (Breadth-first search) to traverse the entire directory/file structure.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#javascript_content\n const queue = [];\n for (const item of dataTransferItemList){\n if (item.kind !== \"file\") continue;\n // https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry\n // This function is implemented as `webkitGetAsEntry()` in non-WebKit browsers\n // including Firefox at this time but it may be renamed to `getAsEntry()` in the future.\n // @ts-ignore\n const entry = item.getAsEntry ? item.getAsEntry() : item.webkitGetAsEntry();\n queue.push(entry);\n }\n while(queue.length > 0){\n const entry = queue.shift();\n if (!entry) continue;\n else if (entry.isFile) {\n const file = await $f31161edf38949e9$var$getFileFromFileEntry(entry);\n if ($f31161edf38949e9$var$FILES_TO_IGNORE.indexOf(file.name) === -1) files.push(file);\n } else if (entry.isDirectory) queue.push(...await $f31161edf38949e9$var$readAllDirectoryEntries(entry.createReader()));\n }\n return files;\n};\n/**\n * Get an array of `File` objects from a `FileList` object.\n *\n * @param {FileList} fileList - The file list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */ const $f31161edf38949e9$var$getFilesFromFileList = async (fileList)=>{\n const files = [];\n for (const file of fileList)if ($f31161edf38949e9$var$FILES_TO_IGNORE.indexOf(file.name) === -1) files.push($f31161edf38949e9$var$toFileWithPath(file));\n return files;\n};\nconst $f31161edf38949e9$export$6d52664cd15c442 = async (evt)=>{\n if (evt.dataTransfer) return evt.dataTransfer.items ? await $f31161edf38949e9$var$getFilesFromDataTransferItemList(evt.dataTransfer.items) : await $f31161edf38949e9$var$getFilesFromFileList(evt.dataTransfer.files);\n return await $f31161edf38949e9$var$getFilesFromFileList(evt.target.files);\n};\n\n\nconst $862aa3736b0514bc$var$COMPONENT_NAME = \"files-dropzone\";\nconst $862aa3736b0514bc$var$TOO_MANY_FILES = \"TOO_MANY_FILES\";\nconst $862aa3736b0514bc$var$FILE_TOO_LARGE = \"FILE_TOO_LARGE\";\nconst $862aa3736b0514bc$var$FILE_TOO_SMALL = \"FILE_TOO_SMALL\";\nconst $862aa3736b0514bc$var$INVALID_MIME_TYPE = \"INVALID_MIME_TYPE\";\nconst $862aa3736b0514bc$var$template = document.createElement(\"template\");\nconst $862aa3736b0514bc$var$styles = /* css */ `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n$862aa3736b0514bc$var$template.innerHTML = /* html */ `\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\n/**\n * @summary A custom element that allows users to drag and drop files into it.\n * @documentation https://github.com/georapbox/files-dropzone-element\n *\n * @tagname files-dropzone - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {string} accept - A comma-separated list of unique file type specifiers describing file types to allow.\n * @property {boolean} disabled - Determines whether the dropzone is disabled.\n * @property {number} maxFiles - The maximum number of files allowed to be dropped.\n * @property {number} maxSize - The maximum file size allowed in bytes.\n * @property {number} minSize - The minimum file size allowed in bytes.\n * @property {boolean} multiple - Allows multiple files to be dropped.\n * @property {boolean} noClick - Prevents the file dialog from opening when the dropzone is clicked.\n * @property {boolean} noDrag - Prevents the dropzone from reacting to drag events.\n * @property {boolean} noKeyboard - Prevents the dropzone from reacting to keyboard events.\n * @property {boolean} autoFocus - Automatically focuses the dropzone when it's connected to the DOM.\n * @property {boolean} noStyle - Prevents the dropzone from applying any styling.\n *\n * @attribute {string} accept - Reflects the accept property.\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {number} max-files - Reflects the maxFiles property.\n * @attribute {number} max-size - Reflects the maxSize property.\n * @attribute {number} min-size - Reflects the minSize property.\n * @attribute {boolean} multiple - Reflects the multiple property.\n * @attribute {boolean} no-click - Reflects the noClick property.\n * @attribute {boolean} no-drag - Reflects the noDrag property.\n * @attribute {boolean} no-keyboard - Reflects the noKeyboard property.\n * @attribute {boolean} auto-focus - Reflects the autoFocus property.\n * @attribute {boolean} no-style - Reflects the noStyle property.\n *\n * @slot - The default slot content of the dropzone.\n *\n * @csspart dropzone - The dropzone element.\n * @csspart dropzone--dragover - The state of the dropzone when dragging over it.\n *\n * @cssproperty --dropzone-border-width - The border width of the dropzone.\n * @cssproperty --dropzone-border-style - The border style of the dropzone.\n * @cssproperty --dropzone-border-radius - The border radius of the dropzone.\n * @cssproperty --dropzone-border-color - The border color of the dropzone.\n * @cssproperty --dropzone-border-color-dragover - The border color of the dropzone when dragging over it.\n * @cssproperty --dropzone-border-color-hover - The border color of the dropzone when hovering over it.\n * @cssproperty --dropzone-background-color - The background color of the dropzone.\n * @cssproperty --dropzone-background-color-dragover - The background color of the dropzone when dragging over it.\n * @cssproperty --dropzone-background-color-hover - The background color of the dropzone when hovering over it.\n * @cssproperty --dropzone-body-color - The text color of the dropzone.\n * @cssproperty --dropzone-body-color-dragover - The text color of the dropzone when dragging over it.\n * @cssproperty --dropzone-body-color-hover - The text color of the dropzone when hovering over it.\n * @cssproperty --dropzone-focus-shadow-rgb - The RGB value of the dropzone's focus shadow.\n * @cssproperty --dropzone-focus-box-shadow - The box shadow of the dropzone when focused.\n * @cssproperty --dropzone-transition-duration - The transition's duration for the dropzone area.\n *\n * @event files-dropzone-drop - Fired when files are dropped.\n * @event files-dropzone-drop-accepted - Fired when files dropped files are accepted.\n * @event files-dropzone-drop-rejected - Fired when files dropped files are rejected.\n * @event files-dropzone-dragenter - Fired when files are dragged into the dropzone.\n * @event files-dropzone-dragover - Fired when files are dragged over the dropzone.\n * @event files-dropzone-dragleave - Fired when files are dragged out of the dropzone.\n * @event files-dropzone-error - Fired when there is any error in the process of reading dropped files or directories.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method openFileDialog - Instance method. Opens the file dialog programmatically.\n */ class $862aa3736b0514bc$export$6ccd1735166caad9 extends HTMLElement {\n /** @type {Nullable} */ #fileInput = null;\n /** @type {Nullable} */ #dropzoneEl = null;\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($862aa3736b0514bc$var$template.content.cloneNode(true));\n }\n if (this.shadowRoot) {\n this.#fileInput = /** @type {Nullable} */ this.shadowRoot.getElementById(\"fileInput\");\n this.#dropzoneEl = this.shadowRoot.getElementById(\"dropzoneEl\");\n }\n }\n static get observedAttributes() {\n return [\n \"accept\",\n \"disabled\",\n \"multiple\",\n \"no-keyboard\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"accept\" && oldValue !== newValue && this.#fileInput) this.#fileInput.accept = this.accept;\n if (name === \"disabled\" && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.disabled = this.disabled;\n if (this.disabled) this.#dropzoneEl?.removeAttribute(\"tabindex\");\n else this.#dropzoneEl?.setAttribute(\"tabindex\", \"0\");\n }\n if (name === \"multiple\" && oldValue !== newValue && this.#fileInput) this.#fileInput.multiple = this.multiple;\n if (name === \"no-keyboard\" && oldValue !== newValue && this.#dropzoneEl) {\n if (this.noKeyboard) this.#dropzoneEl.removeAttribute(\"tabindex\");\n else this.#dropzoneEl.setAttribute(\"tabindex\", \"0\");\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"accept\");\n this.#upgradeProperty(\"disabled\");\n this.#upgradeProperty(\"maxFiles\");\n this.#upgradeProperty(\"maxSize\");\n this.#upgradeProperty(\"minSize\");\n this.#upgradeProperty(\"multiple\");\n this.#upgradeProperty(\"noClick\");\n this.#upgradeProperty(\"noDrag\");\n this.#upgradeProperty(\"noKeyboard\");\n this.#upgradeProperty(\"autoFocus\");\n this.#upgradeProperty(\"noStyle\");\n this.#fileInput?.addEventListener(\"change\", this.#handleFileInputChange);\n this.#dropzoneEl?.addEventListener(\"dragenter\", this.#handleDragEnter);\n this.#dropzoneEl?.addEventListener(\"dragover\", this.#handleDragOver);\n this.#dropzoneEl?.addEventListener(\"dragleave\", this.#handleDragLeave);\n this.#dropzoneEl?.addEventListener(\"drop\", this.#handleDrop);\n this.#dropzoneEl?.addEventListener(\"click\", this.#handleClick);\n this.#dropzoneEl?.addEventListener(\"keyup\", this.#handleKeyUp);\n this.autoFocus && this.#dropzoneEl?.focus();\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#fileInput?.removeEventListener(\"change\", this.#handleFileInputChange);\n this.#dropzoneEl?.removeEventListener(\"dragenter\", this.#handleDragEnter);\n this.#dropzoneEl?.removeEventListener(\"dragover\", this.#handleDragOver);\n this.#dropzoneEl?.removeEventListener(\"dragleave\", this.#handleDragLeave);\n this.#dropzoneEl?.removeEventListener(\"drop\", this.#handleDrop);\n this.#dropzoneEl?.removeEventListener(\"click\", this.#handleClick);\n this.#dropzoneEl?.removeEventListener(\"keyup\", this.#handleKeyUp);\n }\n /**\n * @type {string} - A comma-separated list of unique file type specifiers describing file types to allow.\n * @attribute accept - Reflects the accept property.\n */ get accept() {\n return this.getAttribute(\"accept\") || \"\";\n }\n set accept(value) {\n this.setAttribute(\"accept\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} - Determines whether the dropzone is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */ get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n this.toggleAttribute(\"disabled\", !!value);\n }\n /**\n * @type {number} - The maximum number of files allowed to be dropped.\n * @default Infinity\n * @attribute max-files - Reflects the maxFiles property.\n */ get maxFiles() {\n const num = Number(this.getAttribute(\"max-files\")) || 0;\n if (num <= 0) return Infinity;\n return Math.floor(Math.abs(num));\n }\n set maxFiles(value) {\n this.setAttribute(\"max-files\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} - The maximum file size allowed in bytes.\n * @default Infinity\n * @attribute max-size - Reflects the maxSize property.\n */ get maxSize() {\n const value = this.getAttribute(\"max-size\");\n if (value === null) return Infinity;\n const num = Number(value);\n return Number.isNaN(num) ? Infinity : num;\n }\n set maxSize(value) {\n this.setAttribute(\"max-size\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} - The minimum file size allowed in bytes.\n * @default 0\n * @attribute min-size - Reflects the minSize property.\n */ get minSize() {\n const value = this.getAttribute(\"min-size\");\n if (value === null) return 0;\n const num = Number(value);\n return Number.isNaN(num) ? 0 : num;\n }\n set minSize(value) {\n this.setAttribute(\"min-size\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} - Allows multiple files to be dropped.\n * @default false\n * @attribute multiple - Reflects the multiple property.\n */ get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(value) {\n this.toggleAttribute(\"multiple\", !!value);\n }\n /**\n * @type {boolean} - Prevents the file dialog from opening when the dropzone is clicked.\n * @default false\n * @attribute no-click - Reflects the noClick property.\n */ get noClick() {\n return this.hasAttribute(\"no-click\");\n }\n set noClick(value) {\n this.toggleAttribute(\"no-click\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from reacting to drag events.\n * @default false\n * @attribute no-drag - Reflects the noDrag property.\n */ get noDrag() {\n return this.hasAttribute(\"no-drag\");\n }\n set noDrag(value) {\n this.toggleAttribute(\"no-drag\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from reacting to keyboard events.\n * @default false\n * @attribute no-keyboard - Reflects the noKeyboard property.\n */ get noKeyboard() {\n return this.hasAttribute(\"no-keyboard\");\n }\n set noKeyboard(value) {\n this.toggleAttribute(\"no-keyboard\", !!value);\n }\n /**\n * @type {boolean} - Automatically focuses the dropzone when it's connected to the DOM.\n * @default false\n * @attribute auto-focus - Reflects the autoFocus property.\n */ get autoFocus() {\n return this.hasAttribute(\"auto-focus\");\n }\n set autoFocus(value) {\n this.toggleAttribute(\"auto-focus\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from applying any styling.\n * @default false\n * @attribute no-style - Reflects the noStyle property.\n */ get noStyle() {\n return this.hasAttribute(\"no-style\");\n }\n set noStyle(value) {\n this.toggleAttribute(\"no-style\", !!value);\n }\n /**\n * Handles the change event of the file input.\n *\n * @param {*} evt - The event object.\n */ #handleFileInputChange = async (evt)=>{\n try {\n this.#handleFilesSelect(await (0, $f31161edf38949e9$export$6d52664cd15c442)(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n };\n /**\n * Handles the dragenter event of the dropzone.\n */ #handleDragEnter = ()=>{\n if (this.disabled || this.noDrag) return;\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragenter`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the dragover event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleDragOver = (evt)=>{\n evt.preventDefault();\n if (this.disabled || this.noDrag) {\n evt.dataTransfer.dropEffect = \"none\";\n return;\n }\n evt.dataTransfer.dropEffect = \"copy\";\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.add(\"dropzone--dragover\");\n this.#dropzoneEl.part.add(\"dropzone--dragover\");\n }\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragover`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the dragleave event of the dropzone.\n */ #handleDragLeave = ()=>{\n if (this.disabled || this.noDrag) return;\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove(\"dropzone--dragover\");\n this.#dropzoneEl.part.remove(\"dropzone--dragover\");\n }\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragleave`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the drop event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleDrop = async (evt)=>{\n if (this.disabled || this.noDrag) return;\n evt.preventDefault();\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove(\"dropzone--dragover\");\n this.#dropzoneEl.part.remove(\"dropzone--dragover\");\n }\n try {\n this.#handleFilesSelect(await (0, $f31161edf38949e9$export$6d52664cd15c442)(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n };\n /**\n * Handles the click event of the dropzone.\n */ #handleClick = ()=>{\n if (this.disabled || this.noClick) return;\n this.#fileInput?.click();\n };\n /**\n * Handles the keyup event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleKeyUp = (evt)=>{\n if (this.disabled || this.noKeyboard) return;\n if (evt.key === \" \" || evt.key === \"Enter\") this.#fileInput?.click();\n };\n /**\n * Handles the selection of files.\n *\n * @param {File[]} files - The files to handle.\n */ #handleFilesSelect(files) {\n if (!Array.isArray(files) || !files.length) return;\n const acceptedFiles = [];\n const rejectedFiles = [];\n const filesLength = files.length;\n // If the component is not in multiple mode, reject all files.\n if (!this.multiple && filesLength > 1) for (const file of files)rejectedFiles.push({\n file: file,\n errors: [\n {\n code: $862aa3736b0514bc$var$TOO_MANY_FILES,\n message: `Too many files selected. Only 1 file is allowed.`\n }\n ]\n });\n else if (this.multiple && filesLength > this.maxFiles) // If the component is in multiple mode, but the number of files exceeds\n // the maxFiles attribute, reject all files.\n for (const file of files)rejectedFiles.push({\n file: file,\n errors: [\n {\n code: $862aa3736b0514bc$var$TOO_MANY_FILES,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? \"files are\" : \"file is\"} allowed.`\n }\n ]\n });\n else // Validate each file. If it's valid, add it to the accepted files array,\n // otherwise add it to the rejected files array.\n for (const file of files){\n const fileHasValidType = (0, $38f222170fd4d21a$export$7c47054fed488f80)(file, this.accept);\n const fileExceedsMaxSize = file.size > this.maxSize;\n const fileIsSmallerThanMinSize = file.size < this.minSize;\n if (fileHasValidType && !fileExceedsMaxSize && !fileIsSmallerThanMinSize) acceptedFiles.push(file);\n else {\n const errors = [];\n if (!fileHasValidType) errors.push({\n code: $862aa3736b0514bc$var$INVALID_MIME_TYPE,\n message: `File type \"${file.type}\" is not accepted.`\n });\n if (fileExceedsMaxSize) errors.push({\n code: $862aa3736b0514bc$var$FILE_TOO_LARGE,\n message: `File size ${file.size} exceeds the maximum size of ${this.maxSize}.`\n });\n if (fileIsSmallerThanMinSize) errors.push({\n code: $862aa3736b0514bc$var$FILE_TOO_SMALL,\n message: `File size ${file.size} is smaller than the minimum size of ${this.minSize}.`\n });\n rejectedFiles.push({\n file: file,\n errors: errors\n });\n }\n }\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles: acceptedFiles,\n rejectedFiles: rejectedFiles\n }\n }));\n if (acceptedFiles.length > 0) this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop-accepted`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles: acceptedFiles\n }\n }));\n if (rejectedFiles.length > 0) this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop-rejected`, {\n bubbles: true,\n composed: true,\n detail: {\n rejectedFiles: rejectedFiles\n }\n }));\n if (this.#fileInput) this.#fileInput.value = this.#fileInput.defaultValue;\n }\n /**\n * Opens the file dialog programmatically.\n */ openFileDialog() {\n if (this.disabled) return;\n this.#fileInput?.click();\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'accept' | 'disabled' | 'maxFiles' | 'maxSize' | 'minSize' | 'multiple' | 'noClick' | 'noDrag' | 'noKeyboard' | 'autoFocus' | 'noStyle'} prop - The property name to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='files-dropzone'] - The name of the custom element.\n * @example\n *\n * FilesDropzone.defineCustomElement('my-dropzone');\n */ static defineCustomElement(elementName = $862aa3736b0514bc$var$COMPONENT_NAME) {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $862aa3736b0514bc$export$6ccd1735166caad9);\n }\n}\n\n\n(0, $862aa3736b0514bc$export$6ccd1735166caad9).defineCustomElement();\n\n\nexport {$862aa3736b0514bc$export$6ccd1735166caad9 as FilesDropzone};\n//# sourceMappingURL=files-dropzone-defined.js.map\n","import { FilesDropzone } from './files-dropzone.js';\n\nFilesDropzone.defineCustomElement();\n\nexport { FilesDropzone };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\nimport { isValidFile } from './utils/is-valid-file.js';\nimport { getFilesFromEvent } from './utils/files-selector.js';\n\nconst COMPONENT_NAME = 'files-dropzone';\nconst TOO_MANY_FILES = 'TOO_MANY_FILES';\nconst FILE_TOO_LARGE = 'FILE_TOO_LARGE';\nconst FILE_TOO_SMALL = 'FILE_TOO_SMALL';\nconst INVALID_MIME_TYPE = 'INVALID_MIME_TYPE';\nconst template = document.createElement('template');\n\nconst styles = /* css */`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n\ntemplate.innerHTML = /* html */`\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\n\n/**\n * @summary A custom element that allows users to drag and drop files into it.\n * @documentation https://github.com/georapbox/files-dropzone-element\n *\n * @tagname files-dropzone - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {string} accept - A comma-separated list of unique file type specifiers describing file types to allow.\n * @property {boolean} disabled - Determines whether the dropzone is disabled.\n * @property {number} maxFiles - The maximum number of files allowed to be dropped.\n * @property {number} maxSize - The maximum file size allowed in bytes.\n * @property {number} minSize - The minimum file size allowed in bytes.\n * @property {boolean} multiple - Allows multiple files to be dropped.\n * @property {boolean} noClick - Prevents the file dialog from opening when the dropzone is clicked.\n * @property {boolean} noDrag - Prevents the dropzone from reacting to drag events.\n * @property {boolean} noKeyboard - Prevents the dropzone from reacting to keyboard events.\n * @property {boolean} autoFocus - Automatically focuses the dropzone when it's connected to the DOM.\n * @property {boolean} noStyle - Prevents the dropzone from applying any styling.\n *\n * @attribute {string} accept - Reflects the accept property.\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {number} max-files - Reflects the maxFiles property.\n * @attribute {number} max-size - Reflects the maxSize property.\n * @attribute {number} min-size - Reflects the minSize property.\n * @attribute {boolean} multiple - Reflects the multiple property.\n * @attribute {boolean} no-click - Reflects the noClick property.\n * @attribute {boolean} no-drag - Reflects the noDrag property.\n * @attribute {boolean} no-keyboard - Reflects the noKeyboard property.\n * @attribute {boolean} auto-focus - Reflects the autoFocus property.\n * @attribute {boolean} no-style - Reflects the noStyle property.\n *\n * @slot - The default slot content of the dropzone.\n *\n * @csspart dropzone - The dropzone element.\n * @csspart dropzone--dragover - The state of the dropzone when dragging over it.\n *\n * @cssproperty --dropzone-border-width - The border width of the dropzone.\n * @cssproperty --dropzone-border-style - The border style of the dropzone.\n * @cssproperty --dropzone-border-radius - The border radius of the dropzone.\n * @cssproperty --dropzone-border-color - The border color of the dropzone.\n * @cssproperty --dropzone-border-color-dragover - The border color of the dropzone when dragging over it.\n * @cssproperty --dropzone-border-color-hover - The border color of the dropzone when hovering over it.\n * @cssproperty --dropzone-background-color - The background color of the dropzone.\n * @cssproperty --dropzone-background-color-dragover - The background color of the dropzone when dragging over it.\n * @cssproperty --dropzone-background-color-hover - The background color of the dropzone when hovering over it.\n * @cssproperty --dropzone-body-color - The text color of the dropzone.\n * @cssproperty --dropzone-body-color-dragover - The text color of the dropzone when dragging over it.\n * @cssproperty --dropzone-body-color-hover - The text color of the dropzone when hovering over it.\n * @cssproperty --dropzone-focus-shadow-rgb - The RGB value of the dropzone's focus shadow.\n * @cssproperty --dropzone-focus-box-shadow - The box shadow of the dropzone when focused.\n * @cssproperty --dropzone-transition-duration - The transition's duration for the dropzone area.\n *\n * @event files-dropzone-drop - Fired when files are dropped.\n * @event files-dropzone-drop-accepted - Fired when files dropped files are accepted.\n * @event files-dropzone-drop-rejected - Fired when files dropped files are rejected.\n * @event files-dropzone-dragenter - Fired when files are dragged into the dropzone.\n * @event files-dropzone-dragover - Fired when files are dragged over the dropzone.\n * @event files-dropzone-dragleave - Fired when files are dragged out of the dropzone.\n * @event files-dropzone-error - Fired when there is any error in the process of reading dropped files or directories.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method openFileDialog - Instance method. Opens the file dialog programmatically.\n */\nclass FilesDropzone extends HTMLElement {\n /** @type {Nullable} */\n #fileInput = null;\n\n /** @type {Nullable} */\n #dropzoneEl = null;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n if (this.shadowRoot) {\n this.#fileInput = /** @type {Nullable} */(this.shadowRoot.getElementById('fileInput'));\n this.#dropzoneEl = this.shadowRoot.getElementById('dropzoneEl');\n }\n }\n\n static get observedAttributes() {\n return ['accept', 'disabled', 'multiple', 'no-keyboard'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'accept' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.accept = this.accept;\n }\n\n if (name === 'disabled' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.disabled = this.disabled;\n\n if (this.disabled) {\n this.#dropzoneEl?.removeAttribute('tabindex');\n } else {\n this.#dropzoneEl?.setAttribute('tabindex', '0');\n }\n }\n\n if (name === 'multiple' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.multiple = this.multiple;\n }\n\n if (name === 'no-keyboard' && oldValue !== newValue && this.#dropzoneEl) {\n if (this.noKeyboard) {\n this.#dropzoneEl.removeAttribute('tabindex');\n } else {\n this.#dropzoneEl.setAttribute('tabindex', '0');\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('accept');\n this.#upgradeProperty('disabled');\n this.#upgradeProperty('maxFiles');\n this.#upgradeProperty('maxSize');\n this.#upgradeProperty('minSize');\n this.#upgradeProperty('multiple');\n this.#upgradeProperty('noClick');\n this.#upgradeProperty('noDrag');\n this.#upgradeProperty('noKeyboard');\n this.#upgradeProperty('autoFocus');\n this.#upgradeProperty('noStyle');\n\n this.#fileInput?.addEventListener('change', this.#handleFileInputChange);\n this.#dropzoneEl?.addEventListener('dragenter', this.#handleDragEnter);\n this.#dropzoneEl?.addEventListener('dragover', this.#handleDragOver);\n this.#dropzoneEl?.addEventListener('dragleave', this.#handleDragLeave);\n this.#dropzoneEl?.addEventListener('drop', this.#handleDrop);\n this.#dropzoneEl?.addEventListener('click', this.#handleClick);\n this.#dropzoneEl?.addEventListener('keyup', this.#handleKeyUp);\n\n this.autoFocus && this.#dropzoneEl?.focus();\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#fileInput?.removeEventListener('change', this.#handleFileInputChange);\n this.#dropzoneEl?.removeEventListener('dragenter', this.#handleDragEnter);\n this.#dropzoneEl?.removeEventListener('dragover', this.#handleDragOver);\n this.#dropzoneEl?.removeEventListener('dragleave', this.#handleDragLeave);\n this.#dropzoneEl?.removeEventListener('drop', this.#handleDrop);\n this.#dropzoneEl?.removeEventListener('click', this.#handleClick);\n this.#dropzoneEl?.removeEventListener('keyup', this.#handleKeyUp);\n }\n\n /**\n * @type {string} - A comma-separated list of unique file type specifiers describing file types to allow.\n * @attribute accept - Reflects the accept property.\n */\n get accept() {\n return this.getAttribute('accept') || '';\n }\n\n set accept(value) {\n this.setAttribute('accept', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} - Determines whether the dropzone is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n set disabled(value) {\n this.toggleAttribute('disabled', !!value);\n }\n\n /**\n * @type {number} - The maximum number of files allowed to be dropped.\n * @default Infinity\n * @attribute max-files - Reflects the maxFiles property.\n */\n get maxFiles() {\n const num = Number(this.getAttribute('max-files')) || 0;\n\n if (num <= 0) {\n return Infinity;\n }\n\n return Math.floor(Math.abs(num));\n }\n\n set maxFiles(value) {\n this.setAttribute('max-files', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} - The maximum file size allowed in bytes.\n * @default Infinity\n * @attribute max-size - Reflects the maxSize property.\n */\n get maxSize() {\n const value = this.getAttribute('max-size');\n\n if (value === null) {\n return Infinity;\n }\n\n const num = Number(value);\n\n return Number.isNaN(num) ? Infinity : num;\n }\n\n set maxSize(value) {\n this.setAttribute('max-size', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} - The minimum file size allowed in bytes.\n * @default 0\n * @attribute min-size - Reflects the minSize property.\n */\n get minSize() {\n const value = this.getAttribute('min-size');\n\n if (value === null) {\n return 0;\n }\n\n const num = Number(value);\n\n return Number.isNaN(num) ? 0 : num;\n }\n\n set minSize(value) {\n this.setAttribute('min-size', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} - Allows multiple files to be dropped.\n * @default false\n * @attribute multiple - Reflects the multiple property.\n */\n get multiple() {\n return this.hasAttribute('multiple');\n }\n\n set multiple(value) {\n this.toggleAttribute('multiple', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the file dialog from opening when the dropzone is clicked.\n * @default false\n * @attribute no-click - Reflects the noClick property.\n */\n get noClick() {\n return this.hasAttribute('no-click');\n }\n\n set noClick(value) {\n this.toggleAttribute('no-click', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from reacting to drag events.\n * @default false\n * @attribute no-drag - Reflects the noDrag property.\n */\n get noDrag() {\n return this.hasAttribute('no-drag');\n }\n\n set noDrag(value) {\n this.toggleAttribute('no-drag', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from reacting to keyboard events.\n * @default false\n * @attribute no-keyboard - Reflects the noKeyboard property.\n */\n get noKeyboard() {\n return this.hasAttribute('no-keyboard');\n }\n\n set noKeyboard(value) {\n this.toggleAttribute('no-keyboard', !!value);\n }\n\n /**\n * @type {boolean} - Automatically focuses the dropzone when it's connected to the DOM.\n * @default false\n * @attribute auto-focus - Reflects the autoFocus property.\n */\n get autoFocus() {\n return this.hasAttribute('auto-focus');\n }\n\n set autoFocus(value) {\n this.toggleAttribute('auto-focus', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from applying any styling.\n * @default false\n * @attribute no-style - Reflects the noStyle property.\n */\n get noStyle() {\n return this.hasAttribute('no-style');\n }\n\n set noStyle(value) {\n this.toggleAttribute('no-style', !!value);\n }\n\n /**\n * Handles the change event of the file input.\n *\n * @param {*} evt - The event object.\n */\n #handleFileInputChange = async evt => {\n try {\n this.#handleFilesSelect(await getFilesFromEvent(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n };\n\n /**\n * Handles the dragenter event of the dropzone.\n */\n #handleDragEnter = () => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragenter`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the dragover event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleDragOver = evt => {\n evt.preventDefault();\n\n if (this.disabled || this.noDrag) {\n evt.dataTransfer.dropEffect = 'none';\n return;\n }\n\n evt.dataTransfer.dropEffect = 'copy';\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.add('dropzone--dragover');\n this.#dropzoneEl.part.add('dropzone--dragover');\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragover`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the dragleave event of the dropzone.\n */\n #handleDragLeave = () => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove('dropzone--dragover');\n this.#dropzoneEl.part.remove('dropzone--dragover');\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragleave`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the drop event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleDrop = async evt => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n evt.preventDefault();\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove('dropzone--dragover');\n this.#dropzoneEl.part.remove('dropzone--dragover');\n }\n\n try {\n this.#handleFilesSelect(await getFilesFromEvent(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n };\n\n /**\n * Handles the click event of the dropzone.\n */\n #handleClick = () => {\n if (this.disabled || this.noClick) {\n return;\n }\n\n this.#fileInput?.click();\n };\n\n /**\n * Handles the keyup event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleKeyUp = evt => {\n if (this.disabled || this.noKeyboard) {\n return;\n }\n\n if (evt.key === ' ' || evt.key === 'Enter') {\n this.#fileInput?.click();\n }\n };\n\n /**\n * Handles the selection of files.\n *\n * @param {File[]} files - The files to handle.\n */\n #handleFilesSelect(files) {\n if (!Array.isArray(files) || !files.length) {\n return;\n }\n\n const acceptedFiles = [];\n const rejectedFiles = [];\n const filesLength = files.length;\n\n // If the component is not in multiple mode, reject all files.\n if (!this.multiple && filesLength > 1) {\n for (const file of files) {\n rejectedFiles.push({\n file,\n errors: [{\n code: TOO_MANY_FILES,\n message: `Too many files selected. Only 1 file is allowed.`\n }]\n });\n }\n } else if (this.multiple && filesLength > this.maxFiles) {\n // If the component is in multiple mode, but the number of files exceeds\n // the maxFiles attribute, reject all files.\n for (const file of files) {\n rejectedFiles.push({\n file,\n errors: [{\n code: TOO_MANY_FILES,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? 'files are' : 'file is'} allowed.`\n }]\n });\n }\n } else {\n // Validate each file. If it's valid, add it to the accepted files array,\n // otherwise add it to the rejected files array.\n for (const file of files) {\n const fileHasValidType = isValidFile(file, this.accept);\n const fileExceedsMaxSize = file.size > this.maxSize;\n const fileIsSmallerThanMinSize = file.size < this.minSize;\n\n if (fileHasValidType && !fileExceedsMaxSize && !fileIsSmallerThanMinSize) {\n acceptedFiles.push(file);\n } else {\n const errors = [];\n\n if (!fileHasValidType) {\n errors.push({\n code: INVALID_MIME_TYPE,\n message: `File type \"${file.type}\" is not accepted.`\n });\n }\n\n if (fileExceedsMaxSize) {\n errors.push({\n code: FILE_TOO_LARGE,\n message: `File size ${file.size} exceeds the maximum size of ${this.maxSize}.`\n });\n }\n\n if (fileIsSmallerThanMinSize) {\n errors.push({\n code: FILE_TOO_SMALL,\n message: `File size ${file.size} is smaller than the minimum size of ${this.minSize}.`\n });\n }\n\n rejectedFiles.push({ file, errors });\n }\n }\n }\n\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles,\n rejectedFiles\n }\n }));\n\n if (acceptedFiles.length > 0) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop-accepted`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles\n }\n }));\n }\n\n if (rejectedFiles.length > 0) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop-rejected`, {\n bubbles: true,\n composed: true,\n detail: {\n rejectedFiles\n }\n }));\n }\n\n if (this.#fileInput) {\n this.#fileInput.value = this.#fileInput.defaultValue;\n }\n }\n\n /**\n * Opens the file dialog programmatically.\n */\n openFileDialog() {\n if (this.disabled) {\n return;\n }\n\n this.#fileInput?.click();\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'accept' | 'disabled' | 'maxFiles' | 'maxSize' | 'minSize' | 'multiple' | 'noClick' | 'noDrag' | 'noKeyboard' | 'autoFocus' | 'noStyle'} prop - The property name to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='files-dropzone'] - The name of the custom element.\n * @example\n *\n * FilesDropzone.defineCustomElement('my-dropzone');\n */\n static defineCustomElement(elementName = COMPONENT_NAME) {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, FilesDropzone);\n }\n }\n}\n\nexport { FilesDropzone };\n","// @ts-check\n\n/**\n * Checks if a file is valid based on the accepted file type specifiers.\n *\n * @param {File} file - The File object to validate.\n * @param {string} [acceptedTypeSpecifiers=''] - The accepted file type specifiers.\n * @returns {boolean} - True if the file is valid, false otherwise.\n */\nexport function isValidFile(file, acceptedTypeSpecifiers = '') {\n if (!acceptedTypeSpecifiers) {\n return true;\n }\n\n const acceptedMimeTypesList = [\n ...new Set(acceptedTypeSpecifiers.split(',').map(v => v.trim()).filter(Boolean))\n ];\n\n const fileMimeType = file.type;\n const baseMimeType = fileMimeType.replace(/\\/.*$/, '');\n\n for (const validType of acceptedMimeTypesList) {\n if (validType.charAt(0) === '.') {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n return true;\n }\n } else if (/\\/\\*$/.test(validType)) {\n // Check for mime type that looks like \"image/*\" or similar.\n if (baseMimeType === validType.replace(/\\/.*$/, '')) {\n return true;\n }\n } else {\n if (fileMimeType === validType) {\n return true;\n }\n }\n }\n\n return false;\n}\n","// @ts-check\n\n/**\n * A map of common file extensions and their associated MIME types.\n */\nconst COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n ['aac', 'audio/aac'],\n ['abw', 'application/x-abiword'],\n ['arc', 'application/x-freearc'],\n ['avif', 'image/avif'],\n ['avi', 'video/x-msvideo'],\n ['azw', 'application/vnd.amazon.ebook'],\n ['bin', 'application/octet-stream'],\n ['bmp', 'image/bmp'],\n ['bz', 'application/x-bzip'],\n ['bz2', 'application/x-bzip2'],\n ['cda', 'application/x-cdf'],\n ['csh', 'application/x-csh'],\n ['css', 'text/css'],\n ['csv', 'text/csv'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n ['eot', 'application/vnd.ms-fontobject'],\n ['epub', 'application/epub+zip'],\n ['gz', 'application/gzip'],\n ['gif', 'image/gif'],\n ['heic', 'image/heic'],\n ['heif', 'image/heif'],\n ['htm', 'text/html'],\n ['html', 'text/html'],\n ['ico', 'image/vnd.microsoft.icon'],\n ['ics', 'text/calendar'],\n ['jar', 'application/java-archive'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['jxl', 'image/jxl'],\n ['js', 'text/javascript'],\n ['json', 'application/json'],\n ['jsonld', 'application/ld+json'],\n ['markdown', 'text/markdown'],\n ['md', 'text/markdown'],\n ['mid', 'audio/midi'],\n ['midi', 'audio/midi'],\n ['mjs', 'text/javascript'],\n ['mp3', 'audio/mpeg'],\n ['mp4', 'video/mp4'],\n ['mpeg', 'video/mpeg'],\n ['mpkg', 'application/vnd.apple.installer+xml'],\n ['odp', 'application/vnd.oasis.opendocument.presentation'],\n ['ods', 'application/vnd.oasis.opendocument.spreadsheet'],\n ['odt', 'application/vnd.oasis.opendocument.text'],\n ['oga', 'audio/ogg'],\n ['ogv', 'video/ogg'],\n ['ogx', 'application/ogg'],\n ['opus', 'audio/opus'],\n ['otf', 'font/otf'],\n ['png', 'image/png'],\n ['pdf', 'application/pdf'],\n ['php', 'application/x-httpd-php'],\n ['ppt', 'application/vnd.ms-powerpoint'],\n ['pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'],\n ['rar', 'application/vnd.rar'],\n ['rtf', 'application/rtf'],\n ['sh', 'application/x-sh'],\n ['svg', 'image/svg+xml'],\n ['swf', 'application/x-shockwave-flash'],\n ['tar', 'application/x-tar'],\n ['tif', 'image/tiff'],\n ['tiff', 'image/tiff'],\n ['ts', 'video/mp2t'],\n ['ttf', 'font/ttf'],\n ['txt', 'text/plain'],\n ['vsd', 'application/vnd.visio'],\n ['wav', 'audio/wav'],\n ['weba', 'audio/webm'],\n ['webm', 'video/webm'],\n ['webp', 'image/webp'],\n ['woff', 'font/woff'],\n ['woff2', 'font/woff2'],\n ['xhtml', 'application/xhtml+xml'],\n ['xls', 'application/vnd.ms-excel'],\n ['xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],\n ['xml', 'application/xml'],\n ['xul', 'application/vnd.mozilla.xul+xml'],\n ['zip', 'application/zip'],\n ['7z', 'application/x-7z-compressed'],\n\n // Others\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['msg', 'application/vnd.ms-outlook']\n]);\n\nconst FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store', // macOs\n 'Thumbs.db' // Windows\n];\n\n/**\n * Adds a `type` property to the file object if it doesn't have one and the file has an extension.\n * This is needed because Firefox doesn't add a type property to files dragged from the desktop.\n * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=1424689\n *\n * @param {File} file - The file object to add the type property to.\n * @returns {File} - The file object with the type property added.\n */\nconst toFileWithMimeType = file => {\n const { name } = file;\n const hasExtension = name && name.lastIndexOf('.') !== -1;\n\n if (hasExtension && !file.type) {\n const extension = (name.split('.').pop() || '').toLowerCase();\n const type = COMMON_MIME_TYPES.get(extension);\n\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n\n return file;\n};\n\n/**\n * Adds a `path` property to the file object if it doesn't have one.\n * If `path` is not provided, the `webkitRelativePath` property of the file will be used\n * or the file's name if `webkitRelativePath` is not available.\n *\n * @param {File} file - The file object to add the path property to.\n * @param {string} [path] - The path to set on the file object.\n * @returns {File} - The file object with the path property added.\n */\nconst toFileWithPath = (file, path) => {\n const fileWithMimeType = toFileWithMimeType(file);\n\n // @ts-ignore\n if (typeof fileWithMimeType.path !== 'string') {\n const { webkitRelativePath } = file;\n\n Object.defineProperty(fileWithMimeType, 'path', {\n value: typeof path === 'string' ? path : webkitRelativePath || file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n\n return fileWithMimeType;\n};\n\n/**\n * Wrap `FileSystemDirectoryReader.readEntries` in a promise to make working with read entries easier.\n * https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */\nconst readEntriesPromise = async directoryReader => {\n return await new Promise((resolve, reject) => {\n directoryReader.readEntries(resolve, reject);\n });\n};\n\n/**\n * Read all entries in a directory or sub-directory\n * by calling `readEntries` until it returns an empty array.\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */\nconst readAllDirectoryEntries = async directoryReader => {\n const entries = [];\n let readEntries = await readEntriesPromise(directoryReader);\n\n while (readEntries.length > 0) {\n entries.push(...readEntries);\n readEntries = await readEntriesPromise(directoryReader);\n }\n\n return entries;\n};\n\n/**\n * Get a `File` object from a `FileSystemFileEntry` object.\n *\n * @param {FileSystemFileEntry} fileEntry - The file entry to get a `File` object from.\n * @returns {Promise} - A promise that resolves with a `File` object.\n */\nconst getFileFromFileEntry = fileEntry => {\n return new Promise((resolve, reject) => {\n fileEntry.file(file => resolve(toFileWithPath(file, fileEntry.fullPath)), reject);\n });\n};\n\n/**\n * Get an array of `File` objects from a `DataTransferItemList` object.\n *\n * @param {DataTransferItemList} dataTransferItemList - The item list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nconst getFilesFromDataTransferItemList = async dataTransferItemList => {\n const files = [];\n\n // Chromium browsers read only 100 files at a time as per the spec, so we need to use\n // BFS (Breadth-first search) to traverse the entire directory/file structure.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#javascript_content\n const queue = [];\n\n for (const item of dataTransferItemList) {\n if (item.kind !== 'file') {\n // Ignore non-file items, such as links.\n continue;\n }\n\n // https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry\n // This function is implemented as `webkitGetAsEntry()` in non-WebKit browsers\n // including Firefox at this time but it may be renamed to `getAsEntry()` in the future.\n // @ts-ignore\n const entry = item.getAsEntry ? item.getAsEntry() : item.webkitGetAsEntry();\n\n queue.push(entry);\n }\n\n while (queue.length > 0) {\n const entry = queue.shift();\n\n if (!entry) {\n continue;\n } else if (entry.isFile) {\n const file = await getFileFromFileEntry(entry);\n\n if (FILES_TO_IGNORE.indexOf(file.name) === -1) {\n files.push(file);\n }\n } else if (entry.isDirectory) {\n queue.push(...await readAllDirectoryEntries(entry.createReader()));\n }\n }\n\n return files;\n};\n\n/**\n * Get an array of `File` objects from a `FileList` object.\n *\n * @param {FileList} fileList - The file list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nconst getFilesFromFileList = async fileList => {\n const files = [];\n\n for (const file of fileList) {\n if (FILES_TO_IGNORE.indexOf(file.name) === -1) {\n files.push(toFileWithPath(file));\n }\n }\n\n return files;\n};\n\n/**\n * Get an array of `File` objects from an event.\n * This function supports both `drop` and `change` events.\n *\n * @param {*} evt - The event to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nexport const getFilesFromEvent = async evt => {\n if (evt.dataTransfer) {\n return evt.dataTransfer.items\n ? await getFilesFromDataTransferItemList(evt.dataTransfer.items)\n : await getFilesFromFileList(evt.dataTransfer.files);\n }\n\n return await getFilesFromFileList(evt.target.files);\n};\n","/**\n * Removes one or more elements from an array at the specified index(es).\n *\n * @param {Array} array The initial array to remove elements from.\n * @param {Number} ...indexes The index(es) of the elements to be removed. Non numbers are ignored.\n * @throws {TypeError} If `array` is not array.\n * @returns {Array} The result array with the elements specified removed.\n * @example\n *\n * const arr = [1, 2, 3, 4, 5];\n *\n * remove(arr, 0);\n * // => [2, 3, 4, 5]\n *\n * remove(arr, 0, 1);\n * // => [3, 4, 5]\n *\n * remove(arr, 0, 4);\n * // => [2, 3, 4]\n *\n * remove(arr);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length - 1);\n * // => [1, 2, 3, 4]\n *\n * remove(arr, NaN);\n * // => [1, 2, 3, 4, 5]\n */\nexport const arrayRemove = (array, ...indexes) => {\n if (!Array.isArray(array)) {\n throw new TypeError('Expected an array for first argument');\n }\n\n return array.filter((_, i) => indexes.indexOf(i) === -1);\n};\n","/**\n * Generates a unique id of the form `${prefix}-${randomString}-${suffix}`.\n *\n * @param {string} [prefix=''] - The prefix to use for the id.\n * @param {string} [suffix=''] - The suffix to use for the id.\n * @returns {string} - The unique id.\n */\nconst uid = (prefix = '', suffix = '') => {\n const prefixString = typeof prefix === 'string' && prefix !== '' ? prefix + '-' : '';\n const suffixString = typeof suffix === 'string' && suffix !== '' ? '-' + suffix : '';\n const randomString = Math.random().toString(36).substring(2, 8); // Pseudo-random string of six alphanumeric characters.\n\n return `${prefixString}${randomString}${suffixString}`;\n};\n\nexport { uid };\n","export const ACCEPTED_MIME_TYPES = ['image/jpg', 'image/jpeg', 'image/png', 'image/apng', 'image/gif', 'image/webp', 'image/avif'];\n","import Pressuru from 'url:../assets/fonts/Pressuru/Pressuru.ttf';\nimport OswaldRegular from 'url:../assets/fonts/Oswald/Oswald-Regular.ttf';\nimport OswaldBold from 'url:../assets/fonts/Oswald/Oswald-Bold.ttf';\nimport RobotoRegular from 'url:../assets/fonts/Roboto/Roboto-Regular.ttf';\nimport RobotoBold from 'url:../assets/fonts/Roboto/Roboto-Bold.ttf';\nimport RobotoCondensedRegular from 'url:../assets/fonts/RobotoCondensed/RobotoCondensed-Regular.ttf';\nimport RobotoCondensedBold from 'url:../assets/fonts/RobotoCondensed/RobotoCondensed-Bold.ttf';\nimport CourierPrimeRegular from 'url:../assets/fonts/CourierPrime/CourierPrime-Regular.ttf';\nimport CourierPrimeBold from 'url:../assets/fonts/CourierPrime/CourierPrime-Bold.ttf';\nimport OpenSansRegular from 'url:../assets/fonts/OpenSans/OpenSans-Regular.ttf';\nimport OpenSansBold from 'url:../assets/fonts/OpenSans/OpenSans-Bold.ttf';\n\nexport const customFonts = [\n { name: 'Pressuru', label: 'Pressuru', path: Pressuru, style: 'normal', weight: '400' },\n { name: 'Oswald-Regular', label: 'Oswald', path: OswaldRegular, style: 'normal', weight: '400' },\n { name: 'Oswald-Bold', label: 'Oswald Bold', path: OswaldBold, style: 'normal', weight: '700' },\n { name: 'Roboto-Regular', label: 'Roboto', path: RobotoRegular, style: 'normal', weight: '400' },\n { name: 'Roboto-Bold', label: 'Roboto Bold', path: RobotoBold, style: 'normal', weight: '700' },\n { name: 'RobotoCondensed-Regular', label: 'Roboto Condensed', path: RobotoCondensedRegular, style: 'normal', weight: '400' },\n { name: 'RobotoCondensed-Bold', label: 'Roboto Condensed Bold', path: RobotoCondensedBold, style: 'normal', weight: '700' },\n { name: 'CourierPrime-Regular', label: 'Courier Prime', path: CourierPrimeRegular, style: 'normal', weight: '400' },\n { name: 'CourierPrime-Bold', label: 'Courier Prime Bold', path: CourierPrimeBold, style: 'normal', weight: '700' },\n { name: 'OpenSans-Regular', label: 'Open Sans', path: OpenSansRegular, style: 'normal', weight: '400' },\n { name: 'OpenSans-Bold', label: 'Open Sans Bold', path: OpenSansBold, style: 'normal', weight: '400' }\n];\n\nexport const loadCustomFont = async (name, path, options = {}) => {\n try {\n const font = new FontFace(name, `url(${path})`, { ...options });\n await font.load();\n document.fonts.add(font);\n } catch (err) {\n console.error(err);\n }\n};\n","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Pressuru.684952ea.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Oswald-Regular.89ec7d89.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Oswald-Bold.0f6a7ca6.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Roboto-Regular.ca197847.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Roboto-Bold.fdb9b54a.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"RobotoCondensed-Regular.d585f5c7.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"RobotoCondensed-Bold.e1f96d4b.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"CourierPrime-Regular.3a25a501.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"CourierPrime-Bold.3d6bf689.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"OpenSans-Regular.edf9e01b.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"OpenSans-Bold.8fceb72b.ttf\";","import { ACCEPTED_MIME_TYPES } from './constants.js';\n\nexport const fileFromUrl = async (options = {}) => {\n const res = await fetch(options.url);\n const blob = await res.blob();\n const mimeType = options.mimeType || blob.type || '';\n\n if (!ACCEPTED_MIME_TYPES.includes(mimeType)) {\n throw new Error(`This is not an accepted image format. Accepted MIME types are: ${ACCEPTED_MIME_TYPES.join(', ')}`);\n }\n\n return new File([blob], options.filename || '', blob);\n};\n","const errorsContainer = document.getElementById('errorsContainer');\n\nconst hideError = evt => {\n const target = evt.currentTarget;\n target.removeEventListener('click', hideError);\n errorsContainer.removeChild(target.parentNode);\n};\n\nexport const toastAlert = (message = '', type = 'info') => {\n const types = ['info', 'warning', 'danger'];\n\n if (!types.includes(type)) {\n type = 'info';\n }\n\n const template = /* html */`\n ${message}\n \n `;\n\n const div = document.createElement('div');\n div.className = `alert alert-${type} alert-dismissible text-break mb-2 fade`;\n div.innerHTML = template;\n div.querySelector('button').addEventListener('click', hideError);\n errorsContainer.appendChild(div);\n setTimeout(() => div.classList.add('show'), 100);\n};\n","import { customFonts } from './custom-fonts.js';\n\nexport const createTextBox = (index, data = {}) => {\n const inputTemplate = /* html */`\n
\n \n\n \n\n
\n \n \n \n
\n
\n\n
\n
\n
\n \n\n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n
\n `;\n\n const fragment = document.createDocumentFragment();\n const div = document.createElement('div');\n\n div.className = 'bg-light border shadow-sm mb-3 rounded';\n div.setAttribute('data-section', 'textBox');\n div.setAttribute('data-index', index);\n div.innerHTML = inputTemplate;\n div.querySelector('[data-input=\"font\"]').value = data.font;\n div.querySelector('[data-input=\"textAlign\"]').value = data.textAlign;\n div.querySelector('[data-input=\"allCaps\"]').checked = data.allCaps;\n\n return fragment.appendChild(div);\n};\n","export const drawCanvas = (image, canvas, ctx, textOptions = []) => {\n if (image == null) {\n return;\n }\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (typeof image === 'string') { // Assume it's a color\n ctx.fillStyle = image;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else {\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n }\n\n textOptions.forEach(function (item, index) {\n ctx.save();\n\n ctx.font = `${item.fontWeight} ${item.fontSize}px ${item.font}`;\n ctx.fillStyle = item.fillColor;\n ctx.textAlign = item.textAlign;\n ctx.strokeStyle = item.shadowColor;\n\n const multiplier = index + 1;\n const lineHeight = ctx.measureText('M').width + item.fontSize / 2;\n const xPos = canvas.width / 2;\n const shadowBlur = item.shadowBlur;\n const text = item.allCaps === true ? item.text.toUpperCase() : item.text;\n const textLines = text.split('\\n');\n\n if (shadowBlur !== 0) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = item.shadowColor;\n }\n\n ctx.translate(xPos + item.offsetX, lineHeight * multiplier + item.offsetY);\n ctx.rotate(item.rotate * Math.PI / 180);\n // first draw each line with shadow\n textLines.forEach((text, index) => ctx.fillText(text, 0, index * lineHeight));\n // since shadows of multiline text may be drawn over letters of neighbour lines\n // (when shadow blur is big enough), re-draw text without shadows.\n ctx.shadowBlur = 0;\n textLines.forEach((text, index) => ctx.fillText(text, 0, index * lineHeight));\n if (item.borderWidth > 0) {\n ctx.lineWidth = item.borderWidth;\n textLines.forEach((text, index) => ctx.strokeText(text, 0, index * lineHeight));\n }\n\n ctx.restore();\n });\n};\n"],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","$94933cc6427541bd$export$c37129e465f64ef0","navigator","canShare","$0380ce8f1f064ccc$export$6503ec6e8aabbaf","$0380ce8f1f064ccc$var$mapping","Map","baseUrl","manifest","i","length","path","$7dd1ddf6834435ca$export$bdfd709ae4826697","$7dd1ddf6834435ca$var$bundleURL","value","$7dd1ddf6834435ca$var$getBundleURL","matches","stack","match","replace","getBundleURL","JSON","parse","$4f74a8126e204146$export$30b344bef3e55b67","$4f74a8126e204146$var$t","$4f74a8126e204146$var$e","document","createElement","innerHTML","HTMLElement","t","constructor","shadowRoot","attachShadow","mode","delegatesFocus","appendChild","content","cloneNode","querySelector","observedAttributes","attributeChangedCallback","toggleAttribute","disabled","setAttribute","toString","part","contains","toggle","connectedCallback","r","addEventListener","disconnectedCallback","removeEventListener","hasAttribute","shareUrl","getAttribute","shareTitle","shareText","shareFiles","Array","isArray","share","url","title","text","files","dispatchEvent","CustomEvent","bubbles","composed","detail","shareData","name","error","preventDefault","target","nodeName","assignedElements","flatten","find","prototype","hasOwnProperty","defineCustomElement","customElements","define","$636b0cf1ed0b9f88$export$cc30a98fe3890794","$636b0cf1ed0b9f88$var$t","Number","isNaN","Math","min","max","$636b0cf1ed0b9f88$var$e","$636b0cf1ed0b9f88$var$i","$636b0cf1ed0b9f88$var$o","o","l","getSupportedConstraints","isConnected","getTrackCapabilities","getTrackSettings","u","includes","facingMode","stopVideoStream","startVideoStream","cameraResolution","trim","split","map","width","height","pan","h","tilt","zoom","d","getElementById","c","m","p","g","b","f","isSupported","message","autoPlay","noImage","loading","calculateFileSize","capture","play","then","video","catch","finally","removeAttribute","from","childNodes","forEach","remove","getVideoTracks","applyConstraints","advanced","ideal","audio","mediaDevices","getUserMedia","srcObject","hidden","stop","getContext","videoWidth","videoHeight","drawImage","toDataURL","Image","src","dataURI","fetch","blob","size","getCapabilities","getSettings","$4da30046ce6d9325$export$32589115725b904b","$4da30046ce6d9325$var$e","open","showModal","body","style","overflowY","element","close","noHeader","classList","noAnimations","noCloseButton","clearTimeout","staticBackdrop","fullscreen","add","setTimeout","defaultPrevented","currentTarget","assignedNodes","cancelable","reason","show","hide","$7aad62ebc3d6fae8$export$6ccd1735166caad9","$7aad62ebc3d6fae8$var$e","$7aad62ebc3d6fae8$var$t","$7aad62ebc3d6fae8$var$o","lastIndexOf","type","pop","toLowerCase","writable","$7aad62ebc3d6fae8$var$i","webkitRelativePath","$7aad62ebc3d6fae8$var$r","Promise","readEntries","$7aad62ebc3d6fae8$var$a","push","$7aad62ebc3d6fae8$var$n","file","fullPath","$7aad62ebc3d6fae8$var$s","kind","getAsEntry","webkitGetAsEntry","shift","isFile","indexOf","isDirectory","createReader","$7aad62ebc3d6fae8$var$d","$7aad62ebc3d6fae8$var$l","dataTransfer","items","$7aad62ebc3d6fae8$var$p","$7aad62ebc3d6fae8$var$c","$7aad62ebc3d6fae8$var$h","$7aad62ebc3d6fae8$var$u","accept","multiple","noKeyboard","autoFocus","focus","maxFiles","floor","abs","maxSize","minSize","noClick","noDrag","noStyle","Event","dropEffect","click","key","errors","Set","filter","Boolean","charAt","test","acceptedFiles","rejectedFiles","defaultValue","openFileDialog","$5742c9e143620cb1$export$30a014203d0d7e4f","array","indexes","TypeError","_","$21c3f3a8dccfa4fd$export$e2a22331486dcca0","prefix","suffix","randomString","random","substring","$33dea9d9a6da4c9a$export$63e7bed68b07a85c","$02ee0bedf4ff7ef0$exports","$6f8f0ad93b4f4fec$exports","$60f12aeb358e1d01$exports","$b312cc3e2ac443c7$exports","$481315e8ee95f8f9$exports","$7cee0a691e2711a6$exports","$12b7043e62e67366$exports","$f224edc54658ebde$exports","$33ce2f42587a9c55$exports","$1375393a097acb0e$exports","$728f6ce83c7b6e27$exports","$055531bbd0af154c$export$6874249d87f2602a","label","weight","$055531bbd0af154c$export$59eceaef0c7797b2","options","font","FontFace","load","fonts","console","$008970865eefc93d$export$6539e087749cf9d3","res","mimeType","join","File","filename","$166cfb2484b08c80$var$errorsContainer","$166cfb2484b08c80$var$hideError","evt","removeChild","parentNode","$166cfb2484b08c80$export$af04143326425dbd","types","template","div","className","$50a37fdc18d479c2$export$293a4b86a6fe2398","index","data","inputTemplate","fillColor","shadowColor","_isSettingsOpen","fontSize","shadowBlur","borderWidth","offsetY","offsetX","rotate","fragment","createDocumentFragment","textAlign","checked","allCaps","$d346fdc99aed49b3$export$e653a2de0f3a8b89","image","canvas","ctx","textOptions","clearRect","fillStyle","fillRect","item","save","fontWeight","strokeStyle","lineHeight","measureText","xPos","textLines","toUpperCase","shadowOffsetX","shadowOffsetY","translate","PI","fillText","lineWidth","strokeText","restore","$44ae6d9db4eaca0f$var$videoModal","$44ae6d9db4eaca0f$var$downloadModal","$44ae6d9db4eaca0f$var$canvas","$44ae6d9db4eaca0f$var$dropzoneEl","$44ae6d9db4eaca0f$var$instructionsEl","$44ae6d9db4eaca0f$var$ctx","$44ae6d9db4eaca0f$var$imageUploadMethodSelect","$44ae6d9db4eaca0f$var$fileSelectBtn","$44ae6d9db4eaca0f$var$imageUrlForm","$44ae6d9db4eaca0f$var$addTextboxBtn","$44ae6d9db4eaca0f$var$inputsContainer","$44ae6d9db4eaca0f$var$generateMemeBtn","$44ae6d9db4eaca0f$var$openVideoModalBtn","$44ae6d9db4eaca0f$var$downloadMemeBtn","$44ae6d9db4eaca0f$var$downloadMemePreview","$44ae6d9db4eaca0f$var$webShareComponent","$44ae6d9db4eaca0f$var$galleryEl","$44ae6d9db4eaca0f$var$gallerySearchEl","$44ae6d9db4eaca0f$var$galleryNoResultsEl","$44ae6d9db4eaca0f$var$solidColorForm","$44ae6d9db4eaca0f$var$uploadMethodEls","querySelectorAll","$44ae6d9db4eaca0f$var$selectedImage","$44ae6d9db4eaca0f$var$reqAnimFrame","$44ae6d9db4eaca0f$var$defaultTextOptions","$44ae6d9db4eaca0f$var$textOptions","$44ae6d9db4eaca0f$var$generateMeme","dataUrl","downloadLink","download","href","requestAnimationFrame","$44ae6d9db4eaca0f$var$onImageLoaded","MAX_WIDTH","MAX_HEIGHT","$44ae6d9db4eaca0f$var$handleFileSelect","reader","FileReader","result","readAsDataURL","$44ae6d9db4eaca0f$var$handleTextPropChange","prop","$44ae6d9db4eaca0f$var$handleImageUploadFromURL","form","submitButton","imageUrl","$44ae6d9db4eaca0f$var$moveText","offsetDir","sign","textBoxSection","offsetYInput","offsetXInput","$44ae6d9db4eaca0f$var$handleGalleryClick","button","closest","img","alt","newTextBox","textBoxIndex","textBoxEls","el","settingsEl","confirm","isOffsetYButton","isOffsetXButton","cancelAnimationFrame","query","galleryItems","capturePhotoComponent","$442be162a818aed4$export$c37129e465f64ef0","isWebShareSupported","$e179325634270afd$export$30b344bef3e55b67","$e179325634270afd$var$styles","$e179325634270afd$var$template","buttonSlot","buttonEl","getButton","oldValue","newValue","upgradeProperty","handleSlotChange","handleClick","instance","elementName","WebShare","$c290816263f90981$export$cc30a98fe3890794","$02ad8beec419df62$export$7d15b64cf5a3a4c4","lower","upper","$c290816263f90981$var$COMPONENT_NAME","$c290816263f90981$var$styles","$c290816263f90981$var$template","supportedConstraints","stream","canvasElement","outputElement","videoElement","captureButtonSlot","captureButton","facingModeButtonSlot","facingModeButton","trackCapabilities","trackSettings","emptyOutputElement","isValidFacingMode","x","widthInAllowedRange","heightInAllowedRange","panInAllowedRange","applyPTZ","tiltInAllowedRange","zoomInAllowedRange","getCaptureButton","getFacingModeButton","onVideoLoadedMetaData","onCaptureButtonSlotChange","onCapturePhotoButtonClick","onFacingModeButtonSlotChange","onFacingModeButtonClick","node","constraintName","constraintValue","track","constraints","eventDetail","CapturePhoto","$180b6dcf923bafc7$export$32589115725b904b","$180b6dcf923bafc7$var$template","dialogEl","footerSlotEl","pulseAnimationTimeout","headerEl","closeBtnEl","handleDialogClick","handleDialogClose","handleDialogCancel","handleCloseButtonClick","handleFooterSlotChange","applyPulseEffectOnDialog","requestCloseEvent","createRequestCloseEvent","footerEl","footerSlotNodes","hasFooterSlotNodes","ModalElement","$862aa3736b0514bc$export$6ccd1735166caad9","$f31161edf38949e9$var$COMMON_MIME_TYPES","$f31161edf38949e9$var$FILES_TO_IGNORE","$f31161edf38949e9$var$toFileWithMimeType","hasExtension","extension","$f31161edf38949e9$var$toFileWithPath","fileWithMimeType","$f31161edf38949e9$var$readEntriesPromise","directoryReader","resolve","reject","$f31161edf38949e9$var$readAllDirectoryEntries","entries","$f31161edf38949e9$var$getFileFromFileEntry","fileEntry","$f31161edf38949e9$var$getFilesFromDataTransferItemList","dataTransferItemList","queue","entry","$f31161edf38949e9$var$getFilesFromFileList","fileList","$f31161edf38949e9$export$6d52664cd15c442","$862aa3736b0514bc$var$COMPONENT_NAME","$862aa3736b0514bc$var$TOO_MANY_FILES","$862aa3736b0514bc$var$template","$862aa3736b0514bc$var$styles","fileInput","dropzoneEl","handleFileInputChange","handleDragEnter","handleDragOver","handleDragLeave","handleDrop","handleKeyUp","num","Infinity","handleFilesSelect","filesLength","fileHasValidType","acceptedTypeSpecifiers","acceptedMimeTypesList","fileMimeType","baseMimeType","validType","fileExceedsMaxSize","fileIsSmallerThanMinSize","FilesDropzone"],"version":3,"file":"index.4f090451.js.map"} \ No newline at end of file +{"mappings":"C,A,W,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,S,E,C,E,O,G,E,U,C,E,O,C,C,C,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,I,E,E,Q,COQA,SAAS,EAAoB,CAAO,EAAA,OAClB,OAAZ,GAAoB,UAAA,OAAO,EACtB,UAAW,WAAa,aAAc,WAAa,UAAU,QAAA,CAAS,GAGxE,UAAW,SACpB,C,E,Q,S,C,C,C,E,E,E,O,C,W,W,O,C,E,S,C,E,O,E,C,GNZA,IAgBA,EAhBI,EAAU,IAAI,IAgBlB,EAfA,SAAkB,CAAO,CAAE,CAAQ,EACjC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,MAAM,CAAG,EAAG,GAAK,EAC5C,EAAQ,GAAG,CAAC,CAAQ,CAAC,EAAE,CAAE,CACvB,QAAS,EACT,KAAM,CAAQ,CAAC,EAAI,EAAE,AACvB,EAEJ,C,G,E,Q,S,C,C,C,E,E,E,O,C,e,W,O,C,E,S,C,E,O,E,C,GCRA,IAkCA,EAlCI,EAAY,CAAC,EAkCjB,EAjCA,SAA4B,CAAE,EAC5B,IAAI,EAAQ,CAAS,CAAC,EAAG,CAKzB,OAJK,IACH,EAAQ,AAKZ,WACE,GAAI,CACF,MAAM,AAAI,OACZ,CAAE,MAAO,EAAK,CACZ,IAAI,EAAW,AAAA,CAAA,GAAK,EAAI,KAAI,AAAJ,EAAO,KAAK,CAAC,oEACrC,GAAI,EAGF,MAMI,AAAA,CAAA,GANc,CAAO,CAAC,EAAE,AAMnB,EAAK,OAAO,CAAC,0EAA2E,MAAQ,GAJ7G,CACA,MAAO,GACT,IAhBI,CAAS,CAAC,EAAG,CAAG,GAEX,CACT,C,GCVA,AAAA,EAAA,SAAA,QAAA,CAA8C,AAAA,EAAA,SAAA,YAAA,CAA6C,SAAS,KAAK,KAAK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","sources":["","node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js","node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js","node_modules/@parcel/runtime-js/lib/runtime-9c947c219454732e.js","src/js/index.js","node_modules/@georapbox/web-share-element/dist/is-web-share-supported.js","node_modules/@georapbox/web-share-element/dist/","node_modules/@georapbox/web-share-element/dist/src/is-web-share-supported.js","node_modules/@georapbox/web-share-element/dist/web-share-defined.js","node_modules/@georapbox/web-share-element/dist/src/web-share-defined.js","node_modules/@georapbox/web-share-element/dist/src/web-share.js","node_modules/@georapbox/capture-photo-element/dist/capture-photo-defined.js","node_modules/@georapbox/capture-photo-element/dist/","node_modules/@georapbox/capture-photo-element/dist/src/capture-photo-defined.js","node_modules/@georapbox/capture-photo-element/dist/src/capture-photo.js","node_modules/@georapbox/capture-photo-element/dist/src/utils/clamp.js","node_modules/@georapbox/modal-element/dist/modal-element-defined.js","node_modules/@georapbox/modal-element/dist/","node_modules/@georapbox/modal-element/dist/src/modal-element-defined.js","node_modules/@georapbox/modal-element/dist/src/modal-element.js","node_modules/@georapbox/files-dropzone-element/dist/files-dropzone-defined.js","node_modules/@georapbox/files-dropzone-element/dist/","node_modules/@georapbox/files-dropzone-element/dist/src/files-dropzone-defined.js","node_modules/@georapbox/files-dropzone-element/dist/src/files-dropzone.js","node_modules/@georapbox/files-dropzone-element/dist/src/utils/is-valid-file.js","node_modules/@georapbox/files-dropzone-element/dist/src/utils/files-selector.js","src/js/utils/array-remove.js","src/js/utils/uid.js","src/js/constants.js","src/js/custom-fonts.js","node_modules/@parcel/runtime-js/lib/runtime-2ee5618ea0a4ff82.js","node_modules/@parcel/runtime-js/lib/runtime-d90b112f208fab9c.js","node_modules/@parcel/runtime-js/lib/runtime-8863d03da459b1d2.js","node_modules/@parcel/runtime-js/lib/runtime-7530982a5c34e2a8.js","node_modules/@parcel/runtime-js/lib/runtime-f6db6103a1a0ae20.js","node_modules/@parcel/runtime-js/lib/runtime-d668b18f4657778e.js","node_modules/@parcel/runtime-js/lib/runtime-9d4df09940169c58.js","node_modules/@parcel/runtime-js/lib/runtime-df220659d471ec24.js","node_modules/@parcel/runtime-js/lib/runtime-935f2ad29b2ba54a.js","node_modules/@parcel/runtime-js/lib/runtime-23720a89f55d1035.js","node_modules/@parcel/runtime-js/lib/runtime-180dcf6211e1516d.js","src/js/file-from-url.js","src/js/toast-alert.js","src/js/create-text-box.js","src/js/draw-canvas.js"],"sourcesContent":["(function () {\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequire5078\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequire5078\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"iE7OH\", function(module, exports) {\n\n$parcel$export(module.exports, \"register\", function () { return $0380ce8f1f064ccc$export$6503ec6e8aabbaf; }, function (v) { return $0380ce8f1f064ccc$export$6503ec6e8aabbaf = v; });\nvar $0380ce8f1f064ccc$export$6503ec6e8aabbaf;\nvar $0380ce8f1f064ccc$export$f7ad0328861e2f03;\n\"use strict\";\nvar $0380ce8f1f064ccc$var$mapping = new Map();\nfunction $0380ce8f1f064ccc$var$register(baseUrl, manifest) {\n for(var i = 0; i < manifest.length - 1; i += 2)$0380ce8f1f064ccc$var$mapping.set(manifest[i], {\n baseUrl: baseUrl,\n path: manifest[i + 1]\n });\n}\nfunction $0380ce8f1f064ccc$var$resolve(id) {\n var resolved = $0380ce8f1f064ccc$var$mapping.get(id);\n if (resolved == null) throw new Error(\"Could not resolve bundle with id \" + id);\n return new URL(resolved.path, resolved.baseUrl).toString();\n}\n$0380ce8f1f064ccc$export$6503ec6e8aabbaf = $0380ce8f1f064ccc$var$register;\n$0380ce8f1f064ccc$export$f7ad0328861e2f03 = $0380ce8f1f064ccc$var$resolve;\n\n});\n\nparcelRegister(\"aNJCr\", function(module, exports) {\n\n$parcel$export(module.exports, \"getBundleURL\", function () { return $7dd1ddf6834435ca$export$bdfd709ae4826697; }, function (v) { return $7dd1ddf6834435ca$export$bdfd709ae4826697 = v; });\nvar $7dd1ddf6834435ca$export$bdfd709ae4826697;\nvar $7dd1ddf6834435ca$export$c9e73fbda7da57b6;\nvar $7dd1ddf6834435ca$export$5a759dc7a1cfb72a;\n\"use strict\";\nvar $7dd1ddf6834435ca$var$bundleURL = {};\nfunction $7dd1ddf6834435ca$var$getBundleURLCached(id) {\n var value = $7dd1ddf6834435ca$var$bundleURL[id];\n if (!value) {\n value = $7dd1ddf6834435ca$var$getBundleURL();\n $7dd1ddf6834435ca$var$bundleURL[id] = value;\n }\n return value;\n}\nfunction $7dd1ddf6834435ca$var$getBundleURL() {\n try {\n throw new Error();\n } catch (err) {\n var matches = (\"\" + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g);\n if (matches) // The first two stack frames will be this function and getBundleURLCached.\n // Use the 3rd one, which will be a runtime in the original bundle.\n return $7dd1ddf6834435ca$var$getBaseURL(matches[2]);\n }\n return \"/\";\n}\nfunction $7dd1ddf6834435ca$var$getBaseURL(url) {\n return (\"\" + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/.+)\\/[^/]+$/, \"$1\") + \"/\";\n}\n// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported.\nfunction $7dd1ddf6834435ca$var$getOrigin(url) {\n var matches = (\"\" + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^/]+/);\n if (!matches) throw new Error(\"Origin not found\");\n return matches[0];\n}\n$7dd1ddf6834435ca$export$bdfd709ae4826697 = $7dd1ddf6834435ca$var$getBundleURLCached;\n$7dd1ddf6834435ca$export$c9e73fbda7da57b6 = $7dd1ddf6834435ca$var$getBaseURL;\n$7dd1ddf6834435ca$export$5a759dc7a1cfb72a = $7dd1ddf6834435ca$var$getOrigin;\n\n});\n\nvar $700227d4c71b456e$exports = {};\n\n\n(parcelRequire(\"iE7OH\")).register((parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\"), JSON.parse('[\"8tAhj\",\"index.ac06585e.js\",\"cIoLp\",\"Pressuru.684952ea.ttf\",\"a9OJN\",\"Oswald-Regular.89ec7d89.ttf\",\"jOuj0\",\"Oswald-Bold.0f6a7ca6.ttf\",\"ePq3V\",\"Roboto-Regular.ca197847.ttf\",\"9WQUU\",\"Roboto-Bold.fdb9b54a.ttf\",\"hIywO\",\"RobotoCondensed-Regular.d585f5c7.ttf\",\"ab1rw\",\"RobotoCondensed-Bold.e1f96d4b.ttf\",\"j4ruO\",\"CourierPrime-Regular.3a25a501.ttf\",\"3nnD2\",\"CourierPrime-Bold.3d6bf689.ttf\",\"8fsWK\",\"OpenSans-Regular.edf9e01b.ttf\",\"5JXG6\",\"OpenSans-Bold.8fceb72b.ttf\",\"9FH7D\",\"index.47ef8ac4.css\"]'));\n\nfunction $94933cc6427541bd$export$c37129e465f64ef0(a) {\n return null !== a && \"object\" == typeof a ? \"share\" in navigator && \"canShare\" in navigator && navigator.canShare(a) : \"share\" in navigator;\n}\n\n\nObject.defineProperty({}, \"WebShare\", {\n get: function() {\n return $4f74a8126e204146$export$30b344bef3e55b67;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $4f74a8126e204146$var$t = `\n :host {\n display: inline-block;\n }\n`, $4f74a8126e204146$var$e = document.createElement(\"template\");\n$4f74a8126e204146$var$e.innerHTML = `\n \n \n`;\nclass $4f74a8126e204146$export$30b344bef3e55b67 extends HTMLElement {\n #t;\n #e;\n #s = [];\n constructor(){\n super(), this.shadowRoot || this.attachShadow({\n mode: \"open\",\n delegatesFocus: !0\n }).appendChild($4f74a8126e204146$var$e.content.cloneNode(!0)), this.#t = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null, this.#e = this.#i();\n }\n static get observedAttributes() {\n return [\n \"disabled\"\n ];\n }\n attributeChangedCallback(t, e, s) {\n \"disabled\" === t && e !== s && this.#e && (this.#e.toggleAttribute(\"disabled\", this.disabled), this.#e.setAttribute(\"aria-disabled\", this.disabled.toString()), this.#e.part && this.#e.part.contains(\"button\") && this.#e.part.toggle(\"button--disabled\", this.disabled));\n }\n connectedCallback() {\n this.#r(\"shareUrl\"), this.#r(\"shareTitle\"), this.#r(\"shareText\"), this.#r(\"shareFiles\"), this.#r(\"disabled\"), this.#t?.addEventListener(\"slotchange\", this.#a), this.#e?.addEventListener(\"click\", this.#n);\n }\n disconnectedCallback() {\n this.#t?.removeEventListener(\"slotchange\", this.#a), this.#e?.removeEventListener(\"click\", this.#n);\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(t) {\n this.toggleAttribute(\"disabled\", !!t);\n }\n get shareUrl() {\n return this.getAttribute(\"share-url\") || \"\";\n }\n set shareUrl(t) {\n this.setAttribute(\"share-url\", t);\n }\n get shareTitle() {\n return this.getAttribute(\"share-title\") || \"\";\n }\n set shareTitle(t) {\n this.setAttribute(\"share-title\", t);\n }\n get shareText() {\n return this.getAttribute(\"share-text\") || \"\";\n }\n set shareText(t) {\n this.setAttribute(\"share-text\", t);\n }\n get shareFiles() {\n return this.#s;\n }\n set shareFiles(t) {\n Array.isArray(t) && t.length > 0 && (this.#s = t);\n }\n async share() {\n if (!this.disabled) try {\n let t = {};\n this.shareUrl && (t.url = this.shareUrl), this.shareTitle && (t.title = this.shareTitle), this.shareText && (t.text = this.shareText), Array.isArray(this.shareFiles) && this.shareFiles.length > 0 && navigator.canShare && navigator.canShare({\n files: this.shareFiles\n }) && (t.files = this.shareFiles), await navigator.share(t), this.dispatchEvent(new CustomEvent(\"web-share:success\", {\n bubbles: !0,\n composed: !0,\n detail: {\n shareData: t\n }\n }));\n } catch (t) {\n if (t instanceof Error && \"AbortError\" === t.name) {\n this.dispatchEvent(new CustomEvent(\"web-share:abort\", {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n return;\n }\n this.dispatchEvent(new CustomEvent(\"web-share:error\", {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }\n }\n #n = (t)=>{\n t.preventDefault(), this.disabled || this.share();\n };\n #a = (t)=>{\n t.target && \"button\" === t.target.name && (this.#e?.removeEventListener(\"click\", this.#n), this.#e = this.#i(), this.#e && (this.#e.addEventListener(\"click\", this.#n), \"BUTTON\" === this.#e.nodeName || this.#e.hasAttribute(\"role\") || this.#e.setAttribute(\"role\", \"button\")));\n };\n #i() {\n return this.#t && this.#t.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"button\" === t.getAttribute(\"slot\")) || null;\n }\n #r(t) {\n if (Object.prototype.hasOwnProperty.call(this, t)) {\n let e = this[t];\n delete this[t], this[t] = e;\n }\n }\n static defineCustomElement(t = \"web-share\") {\n \"undefined\" == typeof window || window.customElements.get(t) || window.customElements.define(t, $4f74a8126e204146$export$30b344bef3e55b67);\n }\n}\n$4f74a8126e204146$export$30b344bef3e55b67.defineCustomElement();\n\n\nObject.defineProperty({}, \"CapturePhoto\", {\n get: function() {\n return $636b0cf1ed0b9f88$export$cc30a98fe3890794;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $636b0cf1ed0b9f88$var$t = (t, e, i)=>(Number.isNaN(e) && (e = 0), Number.isNaN(i) && (i = 0), Math.min(Math.max(t, Math.min(e, i)), Math.max(e, i))), $636b0cf1ed0b9f88$var$e = \"capture-photo\", $636b0cf1ed0b9f88$var$i = `\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`, $636b0cf1ed0b9f88$var$o = document.createElement(\"template\");\n$636b0cf1ed0b9f88$var$o.innerHTML = `\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\nclass $636b0cf1ed0b9f88$export$cc30a98fe3890794 extends HTMLElement {\n #t = {};\n #e = null;\n #i = null;\n #o = null;\n #n = null;\n #a = null;\n #s = null;\n #r = null;\n #l = null;\n constructor(){\n super(), this.#t = this.getSupportedConstraints(), this.shadowRoot || this.attachShadow({\n mode: \"open\"\n }).appendChild($636b0cf1ed0b9f88$var$o.content.cloneNode(!0));\n }\n static get observedAttributes() {\n return [\n \"no-image\",\n \"facing-mode\",\n \"camera-resolution\",\n \"pan\",\n \"tilt\",\n \"zoom\"\n ];\n }\n attributeChangedCallback(t, e, i) {\n if (!this.isConnected) return;\n let o = this.getTrackCapabilities(), n = this.getTrackSettings();\n if (\"no-image\" === t && e !== i && this.#u(), \"facing-mode\" === t && e !== i && \"facingMode\" in this.#t) {\n let t = [\n \"user\",\n \"environment\"\n ].includes(this.facingMode || \"\");\n \"facingMode\" in n && t && (this.stopVideoStream(), this.startVideoStream());\n }\n if (\"camera-resolution\" === t && e !== i && \"string\" == typeof this.cameraResolution && this.cameraResolution.trim().length > 0) {\n let [t = 0, e = 0] = this.cameraResolution.split(\"x\").map((t)=>Number(t));\n if (t > 0 && e > 0 && \"width\" in o && \"height\" in o) {\n let i = !!(o.width?.min && o.width?.max) && t >= o?.width?.min && t <= o?.width?.max, a = !!(o.height?.min && o.height?.max) && e >= o?.height?.min && e <= o?.height?.max;\n \"width\" in n && \"height\" in n && i && a && (this.stopVideoStream(), this.startVideoStream());\n }\n }\n if (\"pan\" === t && e !== i && \"pan\" in this.#t) {\n let t = !!(\"pan\" in o && o.pan?.min && o.pan?.max) && this.pan >= o.pan.min && this.pan <= o.pan.max;\n \"pan\" in n && \"number\" == typeof this.pan && t && this.#h(\"pan\", this.pan);\n }\n if (\"tilt\" === t && e !== i && \"tilt\" in this.#t) {\n let t = !!(\"tilt\" in o && o.tilt?.min && o.tilt?.max) && this.tilt >= o.tilt.min && this.tilt <= o.tilt.max;\n \"tilt\" in n && \"number\" == typeof this.tilt && t && this.#h(\"tilt\", this.tilt);\n }\n if (\"zoom\" === t && e !== i && \"zoom\" in this.#t) {\n let t = !!(\"zoom\" in o && o.zoom?.min && o.zoom?.max) && this.zoom >= o.zoom.min && this.zoom <= o.zoom.max;\n \"zoom\" in n && \"number\" == typeof this.zoom && t && this.#h(\"zoom\", this.zoom);\n }\n }\n connectedCallback() {\n if (this.#d(\"autpoPlay\"), this.#d(\"noImage\"), this.#d(\"facingMode\"), this.#d(\"cameraResolution\"), this.#d(\"pan\"), this.#d(\"tilt\"), this.#d(\"zoom\"), this.#d(\"calculateFileSize\"), this.#i = this.shadowRoot?.querySelector(\"canvas\") || null, this.#o = this.shadowRoot?.getElementById(\"output\") || null, this.#n = this.shadowRoot?.querySelector(\"video\") || null, this.#a = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null, this.#s = this.#c(), this.#r = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null, this.#l = this.#m(), this.#n?.addEventListener(\"loadedmetadata\", this.#p), this.#a?.addEventListener(\"slotchange\", this.#g), this.#s?.addEventListener(\"click\", this.#b), this.#r?.addEventListener(\"slotchange\", this.#f), this.#l?.addEventListener(\"click\", this.#v), !$636b0cf1ed0b9f88$export$cc30a98fe3890794.isSupported()) return this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: {\n name: \"NotSupportedError\",\n message: \"Not supported\"\n }\n }\n }));\n this.autoPlay && this.startVideoStream();\n }\n disconnectedCallback() {\n this.stopVideoStream(), this.#l?.removeEventListener(\"click\", this.#v), this.#s?.removeEventListener(\"click\", this.#b), this.#n?.removeEventListener(\"canplay\", this.#p), this.#a?.removeEventListener(\"slotchange\", this.#g), this.#r?.removeEventListener(\"slotchange\", this.#f);\n }\n get autoPlay() {\n return this.hasAttribute(\"auto-play\");\n }\n set autoPlay(t) {\n this.toggleAttribute(\"auto-play\", !!t);\n }\n get noImage() {\n return this.hasAttribute(\"no-image\");\n }\n set noImage(t) {\n this.toggleAttribute(\"no-image\", !!t);\n }\n get facingMode() {\n return this.getAttribute(\"facing-mode\") || \"user\";\n }\n set facingMode(t) {\n this.setAttribute(\"facing-mode\", t);\n }\n get cameraResolution() {\n return this.getAttribute(\"camera-resolution\") || \"\";\n }\n set cameraResolution(t) {\n this.setAttribute(\"camera-resolution\", t);\n }\n get pan() {\n return Number(this.getAttribute(\"pan\")) || 0;\n }\n set pan(t) {\n this.setAttribute(\"pan\", null != t ? t.toString() : t);\n }\n get tilt() {\n return Number(this.getAttribute(\"tilt\")) || 0;\n }\n set tilt(t) {\n this.setAttribute(\"tilt\", null != t ? t.toString() : t);\n }\n get zoom() {\n return Number(this.getAttribute(\"zoom\")) || 1;\n }\n set zoom(t) {\n this.setAttribute(\"zoom\", null != t ? t.toString() : t);\n }\n get loading() {\n return this.hasAttribute(\"loading\");\n }\n get calculateFileSize() {\n return this.hasAttribute(\"calculate-file-size\");\n }\n set calculateFileSize(t) {\n this.toggleAttribute(\"calculate-file-size\", !!t);\n }\n #v = (t)=>{\n t.preventDefault(), this.loading || (this.facingMode = \"user\" !== this.facingMode && this.facingMode ? \"user\" : \"environment\");\n };\n #b = (t)=>{\n t.preventDefault(), this.capture();\n };\n #p = (t)=>{\n let i = t.target;\n i.play().then(()=>{\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:video-play`, {\n bubbles: !0,\n composed: !0,\n detail: {\n video: i\n }\n }));\n }).catch((t)=>{\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }).finally(()=>{\n this.removeAttribute(\"loading\");\n });\n };\n #u() {\n this.#o && Array.from(this.#o.childNodes).forEach((t)=>t.remove());\n }\n #h(e, i) {\n if (!this.#e || !e || !i) return;\n let [o] = this.#e.getVideoTracks(), n = this.getTrackCapabilities();\n e in this.getTrackSettings() && o.applyConstraints({\n advanced: [\n {\n [e]: $636b0cf1ed0b9f88$var$t(Number(i), n[e]?.min || 1, n[e]?.max || 1)\n }\n ]\n });\n }\n #g = (t)=>{\n t.target?.name === \"capture-button\" && (this.#s?.removeEventListener(\"click\", this.#b), this.#s = this.#c(), this.#s && (this.#s.addEventListener(\"click\", this.#b), \"BUTTON\" === this.#s.nodeName || this.#s.hasAttribute(\"role\") || this.#s.setAttribute(\"role\", \"button\")));\n };\n #f = (t)=>{\n t.target?.name === \"facing-mode-button\" && (this.#l?.removeEventListener(\"click\", this.#v), this.#l = this.#m(), this.#l && (this.#l.addEventListener(\"click\", this.#v), \"BUTTON\" === this.#l.nodeName || this.#l.hasAttribute(\"role\") || this.#l.setAttribute(\"role\", \"button\")));\n };\n #m() {\n return this.#r && this.#r.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"facing-mode-button\" === t.getAttribute(\"slot\")) || null;\n }\n #c() {\n return this.#a && this.#a.assignedElements({\n flatten: !0\n }).find((t)=>\"BUTTON\" === t.nodeName || \"capture-button\" === t.getAttribute(\"slot\")) || null;\n }\n #d(t) {\n if (Object.prototype.hasOwnProperty.call(this, t)) {\n let e = this[t];\n delete this[t], this[t] = e;\n }\n }\n async startVideoStream() {\n if (!$636b0cf1ed0b9f88$export$cc30a98fe3890794.isSupported() || this.#e) return;\n this.setAttribute(\"loading\", \"\");\n let t = {\n video: {\n facingMode: {\n ideal: this.facingMode || \"user\"\n },\n pan: !0,\n tilt: !0,\n zoom: !0\n },\n audio: !1\n };\n if (\"string\" == typeof this.cameraResolution && this.cameraResolution.trim().length > 0) {\n let [e = 0, i = 0] = this.cameraResolution.split(\"x\").map((t)=>Number(t));\n e > 0 && i > 0 && (t.video.width = e, t.video.height = i);\n }\n try {\n this.#e = await navigator.mediaDevices.getUserMedia(t), this.#n && (this.#n.srcObject = this.#e), this.#h(\"pan\", this.pan), this.#h(\"tilt\", this.tilt), this.#h(\"zoom\", this.zoom);\n let e = this.getTrackSettings();\n \"facingMode\" in e && this.#r && (this.#r.hidden = !1);\n } catch (t) {\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n } finally{\n this.removeAttribute(\"loading\");\n }\n }\n stopVideoStream() {\n if (!this.#n || !this.#e) return;\n let [t] = this.#e.getVideoTracks();\n t?.stop(), this.#n.srcObject = null, this.#e = null;\n }\n async capture() {\n if (!this.loading && this.#i && this.#n) try {\n let t = this.#i.getContext(\"2d\"), i = this.#n.videoWidth, o = this.#n.videoHeight;\n this.#i.width = i, this.#i.height = o, t?.drawImage(this.#n, 0, 0, i, o);\n let n = this.#i.toDataURL(\"image/png\");\n if (\"string\" == typeof n && n.includes(\"data:image\")) {\n if (!this.noImage) {\n let t = new Image;\n t.src = n, t.width = i, t.height = o, t.setAttribute(\"part\", \"output-image\"), this.#u(), this.#o?.appendChild(t);\n }\n let t = {\n dataURI: n,\n width: i,\n height: o\n };\n if (this.calculateFileSize) try {\n let e = await fetch(n), i = (await e.blob()).size;\n i && (t.size = i);\n } catch (t) {}\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:success`, {\n bubbles: !0,\n composed: !0,\n detail: t\n }));\n }\n } catch (t) {\n this.dispatchEvent(new CustomEvent(`${$636b0cf1ed0b9f88$var$e}:error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: t\n }\n }));\n }\n }\n getSupportedConstraints() {\n return $636b0cf1ed0b9f88$export$cc30a98fe3890794.isSupported() && navigator.mediaDevices.getSupportedConstraints() || {};\n }\n getTrackCapabilities() {\n if (!this.#e) return {};\n let [t] = this.#e.getVideoTracks();\n return t && \"function\" == typeof t.getCapabilities && t.getCapabilities() || {};\n }\n getTrackSettings() {\n if (!this.#e) return {};\n let [t] = this.#e.getVideoTracks();\n return t && \"function\" == typeof t.getSettings && t.getSettings() || {};\n }\n static isSupported() {\n return !!navigator.mediaDevices?.getUserMedia;\n }\n static defineCustomElement(t = $636b0cf1ed0b9f88$var$e) {\n \"undefined\" == typeof window || window.customElements.get(t) || window.customElements.define(t, $636b0cf1ed0b9f88$export$cc30a98fe3890794);\n }\n}\n$636b0cf1ed0b9f88$export$cc30a98fe3890794.defineCustomElement();\n\n\nObject.defineProperty({}, \"ModalElement\", {\n get: function() {\n return $4da30046ce6d9325$export$32589115725b904b;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $4da30046ce6d9325$var$e = document.createElement(\"template\");\n$4da30046ce6d9325$var$e.innerHTML = /* html */ `\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`; /**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */ \nclass $4da30046ce6d9325$export$32589115725b904b extends HTMLElement {\n #e = null;\n #t = null;\n #o = void 0;\n constructor(){\n if (super(), !this.shadowRoot) {\n let t = this.attachShadow({\n mode: \"open\"\n });\n t.appendChild($4da30046ce6d9325$var$e.content.cloneNode(!0));\n }\n this.shadowRoot && (this.#e = this.shadowRoot.querySelector(\"dialog\"), this.#t = this.shadowRoot.querySelector('slot[name=\"footer\"]'));\n }\n static get observedAttributes() {\n return [\n \"open\",\n \"no-header\",\n \"no-animations\",\n \"no-close-button\"\n ];\n }\n attributeChangedCallback(e, t, o) {\n if (null !== this.#e) {\n if (\"open\" === e && t !== o && (this.open ? (this.#e.showModal(), document.body && (document.body.style.overflowY = \"hidden\"), this.dispatchEvent(new CustomEvent(\"me-open\", {\n bubbles: !0,\n composed: !0,\n detail: {\n element: this\n }\n }))) : this.#e.close()), \"no-header\" === e && t !== o) {\n let e = this.#e.querySelector(\".dialog__header\");\n null !== e && (e.hidden = this.noHeader);\n }\n if (\"no-animations\" === e && t !== o && this.#e.classList.toggle(\"dialog--no-animations\", this.noAnimations), \"no-close-button\" === e && t !== o) {\n let e = this.#e.querySelector(\".dialog__close\");\n null !== e && (e.hidden = this.noCloseButton);\n }\n }\n }\n connectedCallback() {\n this.#i(\"open\"), this.#i(\"staticBackdrop\"), this.#i(\"noHeader\"), this.#i(\"noAnimations\"), this.#i(\"noCloseButton\"), this.#i(\"fullscreen\"), this.#e?.addEventListener(\"click\", this.#a), this.#e?.addEventListener(\"close\", this.#l), this.#e?.addEventListener(\"cancel\", this.#s), this.#e?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\", this.#n), this.#t?.addEventListener(\"slotchange\", this.#r);\n }\n disconnectedCallback() {\n this.#o && clearTimeout(this.#o), this.#e?.addEventListener(\"click\", this.#a), this.#e?.removeEventListener(\"close\", this.#l), this.#e?.removeEventListener(\"cancel\", this.#s), this.#e?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\", this.#n), this.#t?.removeEventListener(\"slotchange\", this.#r);\n }\n get open() {\n return this.hasAttribute(\"open\");\n }\n set open(e) {\n e ? this.setAttribute(\"open\", \"\") : this.removeAttribute(\"open\");\n }\n get staticBackdrop() {\n return this.hasAttribute(\"static-backdrop\");\n }\n set staticBackdrop(e) {\n e ? this.setAttribute(\"static-backdrop\", \"\") : this.removeAttribute(\"static-backdrop\");\n }\n get noHeader() {\n return this.hasAttribute(\"no-header\");\n }\n set noHeader(e) {\n e ? this.setAttribute(\"no-header\", \"\") : this.removeAttribute(\"no-header\");\n }\n get noAnimations() {\n return this.hasAttribute(\"no-animations\");\n }\n set noAnimations(e) {\n e ? this.setAttribute(\"no-animations\", \"\") : this.removeAttribute(\"no-animations\");\n }\n get noCloseButton() {\n return this.hasAttribute(\"no-close-button\");\n }\n set noCloseButton(e) {\n e ? this.setAttribute(\"no-close-button\", \"\") : this.removeAttribute(\"no-close-button\");\n }\n get fullscreen() {\n return this.hasAttribute(\"fullscreen\");\n }\n set fullscreen(e) {\n e ? this.setAttribute(\"fullscreen\", \"\") : this.removeAttribute(\"fullscreen\");\n }\n #d() {\n this.#o || (this.#e?.classList.add(\"dialog--pulse\"), this.#o = setTimeout(()=>{\n this.#e?.classList.remove(\"dialog--pulse\"), clearTimeout(this.#o), this.#o = void 0;\n }, 300));\n }\n #l = ()=>{\n // the open property when the dialog is closed by the user.\n this.open = !1, document.body && (document.body.style.overflowY = \"\"), this.dispatchEvent(new CustomEvent(\"me-close\", {\n bubbles: !0,\n composed: !0,\n detail: {\n element: this\n }\n }));\n };\n #s = (e)=>{\n let t = this.#c(\"escape-key\");\n this.dispatchEvent(t), t.defaultPrevented && (e.preventDefault(), this.noAnimations || this.#d());\n };\n #n = (e)=>{\n let t = this.#c(\"close-button\");\n this.dispatchEvent(t), t.defaultPrevented && (e.preventDefault(), this.noAnimations || this.#d());\n };\n #a = (e)=>{\n if (e.target !== e.currentTarget) return;\n let t = this.#c(\"backdrop-click\");\n if (this.dispatchEvent(t), t.defaultPrevented || this.staticBackdrop) {\n this.noAnimations || this.#d();\n return;\n }\n this.#e?.close();\n };\n #r = ()=>{\n if (null === this.#e) return; /** @type {Nullable} */ \n let e = this.#e.querySelector(\".dialog__footer\");\n if (null === e) return;\n let t = this.#t?.assignedNodes(), o = !!t && t.length > 0;\n e.hidden = !o;\n };\n #c(e) {\n return new CustomEvent(\"me-request-close\", {\n bubbles: !0,\n composed: !0,\n cancelable: !0,\n detail: {\n reason: e,\n element: this\n }\n });\n }\n #i(e) {\n if (Object.prototype.hasOwnProperty.call(this, e)) {\n let t = this[e];\n delete this[e], this[e] = t;\n }\n }\n show() {\n this.open || (this.open = !0);\n }\n hide() {\n this.open && (this.open = !1);\n }\n static defineCustomElement(e = \"modal-element\") {\n \"undefined\" == typeof window || window.customElements.get(e) || window.customElements.define(e, $4da30046ce6d9325$export$32589115725b904b);\n }\n}\n$4da30046ce6d9325$export$32589115725b904b.defineCustomElement();\n //# sourceMappingURL=modal-element-defined.js.map\n\n\nObject.defineProperty({}, \"FilesDropzone\", {\n get: function() {\n return $7aad62ebc3d6fae8$export$6ccd1735166caad9;\n },\n set: void 0,\n enumerable: !0,\n configurable: !0\n});\nlet $7aad62ebc3d6fae8$var$e = new Map([\n [\n \"aac\",\n \"audio/aac\"\n ],\n [\n \"abw\",\n \"application/x-abiword\"\n ],\n [\n \"arc\",\n \"application/x-freearc\"\n ],\n [\n \"avif\",\n \"image/avif\"\n ],\n [\n \"avi\",\n \"video/x-msvideo\"\n ],\n [\n \"azw\",\n \"application/vnd.amazon.ebook\"\n ],\n [\n \"bin\",\n \"application/octet-stream\"\n ],\n [\n \"bmp\",\n \"image/bmp\"\n ],\n [\n \"bz\",\n \"application/x-bzip\"\n ],\n [\n \"bz2\",\n \"application/x-bzip2\"\n ],\n [\n \"cda\",\n \"application/x-cdf\"\n ],\n [\n \"csh\",\n \"application/x-csh\"\n ],\n [\n \"css\",\n \"text/css\"\n ],\n [\n \"csv\",\n \"text/csv\"\n ],\n [\n \"doc\",\n \"application/msword\"\n ],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ],\n [\n \"eot\",\n \"application/vnd.ms-fontobject\"\n ],\n [\n \"epub\",\n \"application/epub+zip\"\n ],\n [\n \"gz\",\n \"application/gzip\"\n ],\n [\n \"gif\",\n \"image/gif\"\n ],\n [\n \"heic\",\n \"image/heic\"\n ],\n [\n \"heif\",\n \"image/heif\"\n ],\n [\n \"htm\",\n \"text/html\"\n ],\n [\n \"html\",\n \"text/html\"\n ],\n [\n \"ico\",\n \"image/vnd.microsoft.icon\"\n ],\n [\n \"ics\",\n \"text/calendar\"\n ],\n [\n \"jar\",\n \"application/java-archive\"\n ],\n [\n \"jpeg\",\n \"image/jpeg\"\n ],\n [\n \"jpg\",\n \"image/jpeg\"\n ],\n [\n \"jxl\",\n \"image/jxl\"\n ],\n [\n \"js\",\n \"text/javascript\"\n ],\n [\n \"json\",\n \"application/json\"\n ],\n [\n \"jsonld\",\n \"application/ld+json\"\n ],\n [\n \"markdown\",\n \"text/markdown\"\n ],\n [\n \"md\",\n \"text/markdown\"\n ],\n [\n \"mid\",\n \"audio/midi\"\n ],\n [\n \"midi\",\n \"audio/midi\"\n ],\n [\n \"mjs\",\n \"text/javascript\"\n ],\n [\n \"mp3\",\n \"audio/mpeg\"\n ],\n [\n \"mp4\",\n \"video/mp4\"\n ],\n [\n \"mpeg\",\n \"video/mpeg\"\n ],\n [\n \"mpkg\",\n \"application/vnd.apple.installer+xml\"\n ],\n [\n \"odp\",\n \"application/vnd.oasis.opendocument.presentation\"\n ],\n [\n \"ods\",\n \"application/vnd.oasis.opendocument.spreadsheet\"\n ],\n [\n \"odt\",\n \"application/vnd.oasis.opendocument.text\"\n ],\n [\n \"oga\",\n \"audio/ogg\"\n ],\n [\n \"ogv\",\n \"video/ogg\"\n ],\n [\n \"ogx\",\n \"application/ogg\"\n ],\n [\n \"opus\",\n \"audio/opus\"\n ],\n [\n \"otf\",\n \"font/otf\"\n ],\n [\n \"png\",\n \"image/png\"\n ],\n [\n \"pdf\",\n \"application/pdf\"\n ],\n [\n \"php\",\n \"application/x-httpd-php\"\n ],\n [\n \"ppt\",\n \"application/vnd.ms-powerpoint\"\n ],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n ],\n [\n \"rar\",\n \"application/vnd.rar\"\n ],\n [\n \"rtf\",\n \"application/rtf\"\n ],\n [\n \"sh\",\n \"application/x-sh\"\n ],\n [\n \"svg\",\n \"image/svg+xml\"\n ],\n [\n \"swf\",\n \"application/x-shockwave-flash\"\n ],\n [\n \"tar\",\n \"application/x-tar\"\n ],\n [\n \"tif\",\n \"image/tiff\"\n ],\n [\n \"tiff\",\n \"image/tiff\"\n ],\n [\n \"ts\",\n \"video/mp2t\"\n ],\n [\n \"ttf\",\n \"font/ttf\"\n ],\n [\n \"txt\",\n \"text/plain\"\n ],\n [\n \"vsd\",\n \"application/vnd.visio\"\n ],\n [\n \"wav\",\n \"audio/wav\"\n ],\n [\n \"weba\",\n \"audio/webm\"\n ],\n [\n \"webm\",\n \"video/webm\"\n ],\n [\n \"webp\",\n \"image/webp\"\n ],\n [\n \"woff\",\n \"font/woff\"\n ],\n [\n \"woff2\",\n \"font/woff2\"\n ],\n [\n \"xhtml\",\n \"application/xhtml+xml\"\n ],\n [\n \"xls\",\n \"application/vnd.ms-excel\"\n ],\n [\n \"xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ],\n [\n \"xml\",\n \"application/xml\"\n ],\n [\n \"xul\",\n \"application/vnd.mozilla.xul+xml\"\n ],\n [\n \"zip\",\n \"application/zip\"\n ],\n [\n \"7z\",\n \"application/x-7z-compressed\"\n ],\n [\n \"mkv\",\n \"video/x-matroska\"\n ],\n [\n \"mov\",\n \"video/quicktime\"\n ],\n [\n \"msg\",\n \"application/vnd.ms-outlook\"\n ]\n]), $7aad62ebc3d6fae8$var$t = [\n \".DS_Store\",\n \"Thumbs.db\"\n], $7aad62ebc3d6fae8$var$o = (t)=>{\n let { name: o } = t;\n if (o && -1 !== o.lastIndexOf(\".\") && !t.type) {\n let i = (o.split(\".\").pop() || \"\").toLowerCase(), r = $7aad62ebc3d6fae8$var$e.get(i);\n r && Object.defineProperty(t, \"type\", {\n value: r,\n writable: !1,\n configurable: !1,\n enumerable: !0\n });\n }\n return t;\n}, $7aad62ebc3d6fae8$var$i = (e, t)=>{\n let i = $7aad62ebc3d6fae8$var$o(e);\n if (\"string\" != typeof i.path) {\n let { webkitRelativePath: o } = e;\n Object.defineProperty(i, \"path\", {\n value: \"string\" == typeof t ? t : o || e.name,\n writable: !1,\n configurable: !1,\n enumerable: !0\n });\n }\n return i;\n}, $7aad62ebc3d6fae8$var$r = async (e)=>await new Promise((t, o)=>{\n e.readEntries(t, o);\n }), $7aad62ebc3d6fae8$var$a = async (e)=>{\n let t = [], o = await $7aad62ebc3d6fae8$var$r(e);\n for(; o.length > 0;)t.push(...o), o = await $7aad62ebc3d6fae8$var$r(e);\n return t;\n}, $7aad62ebc3d6fae8$var$n = (e)=>new Promise((t, o)=>{\n e.file((o)=>t($7aad62ebc3d6fae8$var$i(o, e.fullPath)), o);\n }), $7aad62ebc3d6fae8$var$s = async (e)=>{\n let o = [], i = [];\n for (let t of e){\n if (\"file\" !== t.kind) continue;\n let e = t.getAsEntry ? t.getAsEntry() : t.webkitGetAsEntry();\n i.push(e);\n }\n for(; i.length > 0;){\n let e = i.shift();\n if (e) {\n if (e.isFile) {\n let i = await $7aad62ebc3d6fae8$var$n(e);\n -1 === $7aad62ebc3d6fae8$var$t.indexOf(i.name) && o.push(i);\n } else e.isDirectory && i.push(...await $7aad62ebc3d6fae8$var$a(e.createReader()));\n }\n }\n return o;\n}, $7aad62ebc3d6fae8$var$d = async (e)=>{\n let o = [];\n for (let r of e)-1 === $7aad62ebc3d6fae8$var$t.indexOf(r.name) && o.push($7aad62ebc3d6fae8$var$i(r));\n return o;\n}, $7aad62ebc3d6fae8$var$l = async (e)=>e.dataTransfer ? e.dataTransfer.items ? await $7aad62ebc3d6fae8$var$s(e.dataTransfer.items) : await $7aad62ebc3d6fae8$var$d(e.dataTransfer.files) : await $7aad62ebc3d6fae8$var$d(e.target.files), $7aad62ebc3d6fae8$var$p = \"files-dropzone\", $7aad62ebc3d6fae8$var$c = \"TOO_MANY_FILES\", $7aad62ebc3d6fae8$var$h = document.createElement(\"template\"), $7aad62ebc3d6fae8$var$u = `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n$7aad62ebc3d6fae8$var$h.innerHTML = `\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\nclass $7aad62ebc3d6fae8$export$6ccd1735166caad9 extends HTMLElement {\n #e = null;\n #t = null;\n constructor(){\n super(), this.shadowRoot || this.attachShadow({\n mode: \"open\"\n }).appendChild($7aad62ebc3d6fae8$var$h.content.cloneNode(!0)), this.shadowRoot && (this.#e = this.shadowRoot.getElementById(\"fileInput\"), this.#t = this.shadowRoot.getElementById(\"dropzoneEl\"));\n }\n static get observedAttributes() {\n return [\n \"accept\",\n \"disabled\",\n \"multiple\",\n \"no-keyboard\"\n ];\n }\n attributeChangedCallback(e, t, o) {\n \"accept\" === e && t !== o && this.#e && (this.#e.accept = this.accept), \"disabled\" === e && t !== o && this.#e && (this.#e.disabled = this.disabled, this.disabled ? this.#t?.removeAttribute(\"tabindex\") : this.#t?.setAttribute(\"tabindex\", \"0\")), \"multiple\" === e && t !== o && this.#e && (this.#e.multiple = this.multiple), \"no-keyboard\" === e && t !== o && this.#t && (this.noKeyboard ? this.#t.removeAttribute(\"tabindex\") : this.#t.setAttribute(\"tabindex\", \"0\"));\n }\n connectedCallback() {\n this.#o(\"accept\"), this.#o(\"disabled\"), this.#o(\"maxFiles\"), this.#o(\"maxSize\"), this.#o(\"minSize\"), this.#o(\"multiple\"), this.#o(\"noClick\"), this.#o(\"noDrag\"), this.#o(\"noKeyboard\"), this.#o(\"autoFocus\"), this.#o(\"noStyle\"), this.#e?.addEventListener(\"change\", this.#i), this.#t?.addEventListener(\"dragenter\", this.#r), this.#t?.addEventListener(\"dragover\", this.#a), this.#t?.addEventListener(\"dragleave\", this.#n), this.#t?.addEventListener(\"drop\", this.#s), this.#t?.addEventListener(\"click\", this.#d), this.#t?.addEventListener(\"keyup\", this.#l), this.autoFocus && this.#t?.focus();\n }\n disconnectedCallback() {\n this.#e?.removeEventListener(\"change\", this.#i), this.#t?.removeEventListener(\"dragenter\", this.#r), this.#t?.removeEventListener(\"dragover\", this.#a), this.#t?.removeEventListener(\"dragleave\", this.#n), this.#t?.removeEventListener(\"drop\", this.#s), this.#t?.removeEventListener(\"click\", this.#d), this.#t?.removeEventListener(\"keyup\", this.#l);\n }\n get accept() {\n return this.getAttribute(\"accept\") || \"\";\n }\n set accept(e) {\n this.setAttribute(\"accept\", null != e ? e.toString() : e);\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(e) {\n this.toggleAttribute(\"disabled\", !!e);\n }\n get maxFiles() {\n let e = Number(this.getAttribute(\"max-files\")) || 0;\n return e <= 0 ? 1 / 0 : Math.floor(Math.abs(e));\n }\n set maxFiles(e) {\n this.setAttribute(\"max-files\", null != e ? e.toString() : e);\n }\n get maxSize() {\n let e = this.getAttribute(\"max-size\");\n if (null === e) return 1 / 0;\n let t = Number(e);\n return Number.isNaN(t) ? 1 / 0 : t;\n }\n set maxSize(e) {\n this.setAttribute(\"max-size\", null != e ? e.toString() : e);\n }\n get minSize() {\n let e = this.getAttribute(\"min-size\");\n if (null === e) return 0;\n let t = Number(e);\n return Number.isNaN(t) ? 0 : t;\n }\n set minSize(e) {\n this.setAttribute(\"min-size\", null != e ? e.toString() : e);\n }\n get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(e) {\n this.toggleAttribute(\"multiple\", !!e);\n }\n get noClick() {\n return this.hasAttribute(\"no-click\");\n }\n set noClick(e) {\n this.toggleAttribute(\"no-click\", !!e);\n }\n get noDrag() {\n return this.hasAttribute(\"no-drag\");\n }\n set noDrag(e) {\n this.toggleAttribute(\"no-drag\", !!e);\n }\n get noKeyboard() {\n return this.hasAttribute(\"no-keyboard\");\n }\n set noKeyboard(e) {\n this.toggleAttribute(\"no-keyboard\", !!e);\n }\n get autoFocus() {\n return this.hasAttribute(\"auto-focus\");\n }\n set autoFocus(e) {\n this.toggleAttribute(\"auto-focus\", !!e);\n }\n get noStyle() {\n return this.hasAttribute(\"no-style\");\n }\n set noStyle(e) {\n this.toggleAttribute(\"no-style\", !!e);\n }\n #i = async (e)=>{\n try {\n this.#p(await $7aad62ebc3d6fae8$var$l(e));\n } catch (e) {\n this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: e\n }\n }));\n }\n };\n #r = ()=>{\n this.disabled || this.noDrag || this.dispatchEvent(new Event(`${$7aad62ebc3d6fae8$var$p}-dragenter`, {\n bubbles: !0,\n composed: !0\n }));\n };\n #a = (e)=>{\n if (e.preventDefault(), this.disabled || this.noDrag) {\n e.dataTransfer.dropEffect = \"none\";\n return;\n }\n e.dataTransfer.dropEffect = \"copy\", this.#t && (this.#t.classList.add(\"dropzone--dragover\"), this.#t.part.add(\"dropzone--dragover\")), this.dispatchEvent(new Event(`${$7aad62ebc3d6fae8$var$p}-dragover`, {\n bubbles: !0,\n composed: !0\n }));\n };\n #n = ()=>{\n this.disabled || this.noDrag || (this.#t && (this.#t.classList.remove(\"dropzone--dragover\"), this.#t.part.remove(\"dropzone--dragover\")), this.dispatchEvent(new Event(`${$7aad62ebc3d6fae8$var$p}-dragleave`, {\n bubbles: !0,\n composed: !0\n })));\n };\n #s = async (e)=>{\n if (!this.disabled && !this.noDrag) {\n e.preventDefault(), this.#t && (this.#t.classList.remove(\"dropzone--dragover\"), this.#t.part.remove(\"dropzone--dragover\"));\n try {\n this.#p(await $7aad62ebc3d6fae8$var$l(e));\n } catch (e) {\n this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-error`, {\n bubbles: !0,\n composed: !0,\n detail: {\n error: e\n }\n }));\n }\n }\n };\n #d = ()=>{\n this.disabled || this.noClick || this.#e?.click();\n };\n #l = (e)=>{\n this.disabled || this.noKeyboard || \" \" !== e.key && \"Enter\" !== e.key || this.#e?.click();\n };\n #p(e) {\n if (!Array.isArray(e) || !e.length) return;\n let t = [], o = [], i = e.length;\n if (!this.multiple && i > 1) for (let t of e)o.push({\n file: t,\n errors: [\n {\n code: $7aad62ebc3d6fae8$var$c,\n message: \"Too many files selected. Only 1 file is allowed.\"\n }\n ]\n });\n else if (this.multiple && i > this.maxFiles) for (let t of e)o.push({\n file: t,\n errors: [\n {\n code: $7aad62ebc3d6fae8$var$c,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? \"files are\" : \"file is\"} allowed.`\n }\n ]\n });\n else for (let i of e){\n let e = function(e, t = \"\") {\n if (!t) return !0;\n let o = [\n ...new Set(t.split(\",\").map((e)=>e.trim()).filter(Boolean))\n ], i = e.type, r = i.replace(/\\/.*$/, \"\");\n for (let t of o)if (\".\" === t.charAt(0)) {\n if (-1 !== e.name.toLowerCase().indexOf(t.toLowerCase(), e.name.length - t.length)) return !0;\n } else if (/\\/\\*$/.test(t)) {\n if (r === t.replace(/\\/.*$/, \"\")) return !0;\n } else if (i === t) return !0;\n return !1;\n }(i, this.accept), r = i.size > this.maxSize, a = i.size < this.minSize;\n if (!e || r || a) {\n let t = [];\n e || t.push({\n code: \"INVALID_MIME_TYPE\",\n message: `File type \"${i.type}\" is not accepted.`\n }), r && t.push({\n code: \"FILE_TOO_LARGE\",\n message: `File size ${i.size} exceeds the maximum size of ${this.maxSize}.`\n }), a && t.push({\n code: \"FILE_TOO_SMALL\",\n message: `File size ${i.size} is smaller than the minimum size of ${this.minSize}.`\n }), o.push({\n file: i,\n errors: t\n });\n } else t.push(i);\n }\n this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-drop`, {\n bubbles: !0,\n composed: !0,\n detail: {\n acceptedFiles: t,\n rejectedFiles: o\n }\n })), t.length > 0 && this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-drop-accepted`, {\n bubbles: !0,\n composed: !0,\n detail: {\n acceptedFiles: t\n }\n })), o.length > 0 && this.dispatchEvent(new CustomEvent(`${$7aad62ebc3d6fae8$var$p}-drop-rejected`, {\n bubbles: !0,\n composed: !0,\n detail: {\n rejectedFiles: o\n }\n })), this.#e && (this.#e.value = this.#e.defaultValue);\n }\n openFileDialog() {\n this.disabled || this.#e?.click();\n }\n #o(e) {\n if (Object.prototype.hasOwnProperty.call(this, e)) {\n let t = this[e];\n delete this[e], this[e] = t;\n }\n }\n static defineCustomElement(e = $7aad62ebc3d6fae8$var$p) {\n \"undefined\" == typeof window || window.customElements.get(e) || window.customElements.define(e, $7aad62ebc3d6fae8$export$6ccd1735166caad9);\n }\n}\n$7aad62ebc3d6fae8$export$6ccd1735166caad9.defineCustomElement();\n\n\n\n\n/**\n * Removes one or more elements from an array at the specified index(es).\n *\n * @param {Array} array The initial array to remove elements from.\n * @param {Number} ...indexes The index(es) of the elements to be removed. Non numbers are ignored.\n * @throws {TypeError} If `array` is not array.\n * @returns {Array} The result array with the elements specified removed.\n * @example\n *\n * const arr = [1, 2, 3, 4, 5];\n *\n * remove(arr, 0);\n * // => [2, 3, 4, 5]\n *\n * remove(arr, 0, 1);\n * // => [3, 4, 5]\n *\n * remove(arr, 0, 4);\n * // => [2, 3, 4]\n *\n * remove(arr);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length - 1);\n * // => [1, 2, 3, 4]\n *\n * remove(arr, NaN);\n * // => [1, 2, 3, 4, 5]\n */ const $5742c9e143620cb1$export$30a014203d0d7e4f = (array, ...indexes)=>{\n if (!Array.isArray(array)) throw new TypeError(\"Expected an array for first argument\");\n return array.filter((_, i)=>indexes.indexOf(i) === -1);\n};\n\n\n/**\n * Generates a unique id of the form `${prefix}-${randomString}-${suffix}`.\n *\n * @param {string} [prefix=''] - The prefix to use for the id.\n * @param {string} [suffix=''] - The suffix to use for the id.\n * @returns {string} - The unique id.\n */ const $21c3f3a8dccfa4fd$export$e2a22331486dcca0 = (prefix = \"\", suffix = \"\")=>{\n const prefixString = typeof prefix === \"string\" && prefix !== \"\" ? prefix + \"-\" : \"\";\n const suffixString = typeof suffix === \"string\" && suffix !== \"\" ? \"-\" + suffix : \"\";\n const randomString = Math.random().toString(36).substring(2, 8); // Pseudo-random string of six alphanumeric characters.\n return `${prefixString}${randomString}${suffixString}`;\n};\n\n\nconst $33dea9d9a6da4c9a$export$63e7bed68b07a85c = [\n \"image/jpg\",\n \"image/jpeg\",\n \"image/png\",\n \"image/apng\",\n \"image/gif\",\n \"image/webp\",\n \"image/avif\"\n];\n\n\nvar $02ee0bedf4ff7ef0$exports = {};\n\n$02ee0bedf4ff7ef0$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Pressuru.684952ea.ttf\";\n\n\nvar $6f8f0ad93b4f4fec$exports = {};\n\n$6f8f0ad93b4f4fec$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Oswald-Regular.89ec7d89.ttf\";\n\n\nvar $60f12aeb358e1d01$exports = {};\n\n$60f12aeb358e1d01$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Oswald-Bold.0f6a7ca6.ttf\";\n\n\nvar $b312cc3e2ac443c7$exports = {};\n\n$b312cc3e2ac443c7$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Roboto-Regular.ca197847.ttf\";\n\n\nvar $481315e8ee95f8f9$exports = {};\n\n$481315e8ee95f8f9$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"Roboto-Bold.fdb9b54a.ttf\";\n\n\nvar $7cee0a691e2711a6$exports = {};\n\n$7cee0a691e2711a6$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"RobotoCondensed-Regular.d585f5c7.ttf\";\n\n\nvar $12b7043e62e67366$exports = {};\n\n$12b7043e62e67366$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"RobotoCondensed-Bold.e1f96d4b.ttf\";\n\n\nvar $f224edc54658ebde$exports = {};\n\n$f224edc54658ebde$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"CourierPrime-Regular.3a25a501.ttf\";\n\n\nvar $33ce2f42587a9c55$exports = {};\n\n$33ce2f42587a9c55$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"CourierPrime-Bold.3d6bf689.ttf\";\n\n\nvar $1375393a097acb0e$exports = {};\n\n$1375393a097acb0e$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"OpenSans-Regular.edf9e01b.ttf\";\n\n\nvar $728f6ce83c7b6e27$exports = {};\n\n$728f6ce83c7b6e27$exports = (parcelRequire(\"aNJCr\")).getBundleURL(\"8tAhj\") + \"OpenSans-Bold.8fceb72b.ttf\";\n\n\nconst $055531bbd0af154c$export$6874249d87f2602a = [\n {\n name: \"Pressuru\",\n label: \"Pressuru\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($02ee0bedf4ff7ef0$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Oswald-Regular\",\n label: \"Oswald\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($6f8f0ad93b4f4fec$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Oswald-Bold\",\n label: \"Oswald Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($60f12aeb358e1d01$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"Roboto-Regular\",\n label: \"Roboto\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($b312cc3e2ac443c7$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"Roboto-Bold\",\n label: \"Roboto Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($481315e8ee95f8f9$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"RobotoCondensed-Regular\",\n label: \"Roboto Condensed\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($7cee0a691e2711a6$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"RobotoCondensed-Bold\",\n label: \"Roboto Condensed Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($12b7043e62e67366$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"CourierPrime-Regular\",\n label: \"Courier Prime\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($f224edc54658ebde$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"CourierPrime-Bold\",\n label: \"Courier Prime Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($33ce2f42587a9c55$exports))),\n style: \"normal\",\n weight: \"700\"\n },\n {\n name: \"OpenSans-Regular\",\n label: \"Open Sans\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($1375393a097acb0e$exports))),\n style: \"normal\",\n weight: \"400\"\n },\n {\n name: \"OpenSans-Bold\",\n label: \"Open Sans Bold\",\n path: (0, (/*@__PURE__*/$parcel$interopDefault($728f6ce83c7b6e27$exports))),\n style: \"normal\",\n weight: \"400\"\n }\n];\nconst $055531bbd0af154c$export$59eceaef0c7797b2 = async (name, path, options = {})=>{\n try {\n const font = new FontFace(name, `url(${path})`, {\n ...options\n });\n await font.load();\n document.fonts.add(font);\n } catch (err) {\n console.error(err);\n }\n};\n\n\n\nconst $008970865eefc93d$export$6539e087749cf9d3 = async (options = {})=>{\n const res = await fetch(options.url);\n const blob = await res.blob();\n const mimeType = options.mimeType || blob.type || \"\";\n if (!(0, $33dea9d9a6da4c9a$export$63e7bed68b07a85c).includes(mimeType)) throw new Error(`This is not an accepted image format. Accepted MIME types are: ${(0, $33dea9d9a6da4c9a$export$63e7bed68b07a85c).join(\", \")}`);\n return new File([\n blob\n ], options.filename || \"\", blob);\n};\n\n\nconst $166cfb2484b08c80$var$errorsContainer = document.getElementById(\"errorsContainer\");\nconst $166cfb2484b08c80$var$hideError = (evt)=>{\n const target = evt.currentTarget;\n target.removeEventListener(\"click\", $166cfb2484b08c80$var$hideError);\n $166cfb2484b08c80$var$errorsContainer.removeChild(target.parentNode);\n};\nconst $166cfb2484b08c80$export$af04143326425dbd = (message = \"\", type = \"info\")=>{\n const types = [\n \"info\",\n \"warning\",\n \"danger\"\n ];\n if (!types.includes(type)) type = \"info\";\n const template = /* html */ `\n ${message}\n \n `;\n const div = document.createElement(\"div\");\n div.className = `alert alert-${type} alert-dismissible text-break mb-2 fade`;\n div.innerHTML = template;\n div.querySelector(\"button\").addEventListener(\"click\", $166cfb2484b08c80$var$hideError);\n $166cfb2484b08c80$var$errorsContainer.appendChild(div);\n setTimeout(()=>div.classList.add(\"show\"), 100);\n};\n\n\n\nconst $50a37fdc18d479c2$export$293a4b86a6fe2398 = (index, data = {})=>{\n const inputTemplate = /* html */ `\n
\n \n\n \n\n
\n \n \n \n
\n
\n\n
\n
\n
\n \n\n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n
\n `;\n const fragment = document.createDocumentFragment();\n const div = document.createElement(\"div\");\n div.className = \"bg-light border shadow-sm mb-3 rounded\";\n div.setAttribute(\"data-section\", \"textBox\");\n div.setAttribute(\"data-index\", index);\n div.innerHTML = inputTemplate;\n div.querySelector('[data-input=\"font\"]').value = data.font;\n div.querySelector('[data-input=\"textAlign\"]').value = data.textAlign;\n div.querySelector('[data-input=\"allCaps\"]').checked = data.allCaps;\n return fragment.appendChild(div);\n};\n\n\nconst $d346fdc99aed49b3$export$e653a2de0f3a8b89 = (image, canvas, ctx, textOptions = [])=>{\n if (image == null) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n if (typeof image === \"string\") {\n ctx.fillStyle = image;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n textOptions.forEach(function(item, index) {\n ctx.save();\n ctx.font = `${item.fontWeight} ${item.fontSize}px ${item.font}`;\n ctx.fillStyle = item.fillColor;\n ctx.textAlign = item.textAlign;\n ctx.strokeStyle = item.shadowColor;\n const multiplier = index + 1;\n const lineHeight = ctx.measureText(\"M\").width + item.fontSize / 2;\n const xPos = canvas.width / 2;\n const shadowBlur = item.shadowBlur;\n const text = item.allCaps === true ? item.text.toUpperCase() : item.text;\n const textLines = text.split(\"\\n\");\n if (shadowBlur !== 0) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = item.shadowColor;\n }\n ctx.translate(xPos + item.offsetX, lineHeight * multiplier + item.offsetY);\n ctx.rotate(item.rotate * Math.PI / 180);\n // first draw each line with shadow\n textLines.forEach((text, index)=>ctx.fillText(text, 0, index * lineHeight));\n // since shadows of multiline text may be drawn over letters of neighbour lines\n // (when shadow blur is big enough), re-draw text without shadows.\n ctx.shadowBlur = 0;\n textLines.forEach((text, index)=>ctx.fillText(text, 0, index * lineHeight));\n if (item.borderWidth > 0) {\n ctx.lineWidth = item.borderWidth;\n textLines.forEach((text, index)=>ctx.strokeText(text, 0, index * lineHeight));\n }\n ctx.restore();\n });\n};\n\n\nconst $44ae6d9db4eaca0f$var$videoModal = document.getElementById(\"videoModal\");\nconst $44ae6d9db4eaca0f$var$downloadModal = document.getElementById(\"downloadModal\");\nconst $44ae6d9db4eaca0f$var$canvas = document.getElementById(\"canvas\");\nconst $44ae6d9db4eaca0f$var$dropzoneEl = document.querySelector(\"files-dropzone\");\nconst $44ae6d9db4eaca0f$var$instructionsEl = document.getElementById(\"instructions\");\nconst $44ae6d9db4eaca0f$var$ctx = $44ae6d9db4eaca0f$var$canvas.getContext(\"2d\");\nconst $44ae6d9db4eaca0f$var$imageUploadMethodSelect = document.getElementById(\"imageUploadMethodSelect\");\nconst $44ae6d9db4eaca0f$var$fileSelectBtn = document.getElementById(\"fileSelectBtn\");\nconst $44ae6d9db4eaca0f$var$imageUrlForm = document.getElementById(\"imageUrlForm\");\nconst $44ae6d9db4eaca0f$var$addTextboxBtn = document.getElementById(\"addTextboxBtn\");\nconst $44ae6d9db4eaca0f$var$inputsContainer = document.getElementById(\"inputsContainer\");\nconst $44ae6d9db4eaca0f$var$generateMemeBtn = document.getElementById(\"generateMemeBtn\");\nconst $44ae6d9db4eaca0f$var$openVideoModalBtn = document.getElementById(\"openVideoModalBtn\");\nconst $44ae6d9db4eaca0f$var$downloadMemeBtn = document.getElementById(\"downloadMemeBtn\");\nconst $44ae6d9db4eaca0f$var$downloadMemePreview = document.getElementById(\"downloadMemePreview\");\nconst $44ae6d9db4eaca0f$var$webShareComponent = document.querySelector(\"web-share\");\nconst $44ae6d9db4eaca0f$var$galleryEl = document.getElementById(\"gallery\");\nconst $44ae6d9db4eaca0f$var$gallerySearchEl = document.getElementById(\"gallerySearch\");\nconst $44ae6d9db4eaca0f$var$galleryNoResultsEl = $44ae6d9db4eaca0f$var$galleryEl.querySelector(\".gallery__no-results\");\nconst $44ae6d9db4eaca0f$var$solidColorForm = document.getElementById(\"solidColorForm\");\nconst $44ae6d9db4eaca0f$var$uploadMethodEls = document.querySelectorAll(\".upload-method\");\nlet $44ae6d9db4eaca0f$var$selectedImage = null;\nlet $44ae6d9db4eaca0f$var$reqAnimFrame = null;\nconst $44ae6d9db4eaca0f$var$defaultTextOptions = {\n _isSettingsOpen: false,\n text: \"\",\n fillColor: \"#ffffff\",\n shadowColor: \"#000000\",\n font: \"Pressuru\",\n fontSize: 40,\n fontWeight: \"normal\",\n textAlign: \"center\",\n shadowBlur: 3,\n borderWidth: 1,\n offsetY: 0,\n offsetX: 0,\n rotate: 0,\n allCaps: true\n};\nlet $44ae6d9db4eaca0f$var$textOptions = [\n {\n ...$44ae6d9db4eaca0f$var$defaultTextOptions\n }\n];\nconst $44ae6d9db4eaca0f$var$generateMeme = async ()=>{\n const dataUrl = $44ae6d9db4eaca0f$var$canvas.toDataURL(\"image/png\");\n // Prepare download link\n const downloadLink = dataUrl.replace(\"image/png\", \"image/octet-stream\");\n $44ae6d9db4eaca0f$var$downloadMemeBtn.download = `${(0, $21c3f3a8dccfa4fd$export$e2a22331486dcca0)(\"meme\")}.png`;\n $44ae6d9db4eaca0f$var$downloadMemeBtn.href = downloadLink;\n $44ae6d9db4eaca0f$var$downloadMemePreview.width = $44ae6d9db4eaca0f$var$canvas.width;\n $44ae6d9db4eaca0f$var$downloadMemePreview.height = $44ae6d9db4eaca0f$var$canvas.height;\n $44ae6d9db4eaca0f$var$downloadMemePreview.src = downloadLink;\n // Prepare for sharing file\n if ((0, $94933cc6427541bd$export$c37129e465f64ef0)()) try {\n const file = await (0, $008970865eefc93d$export$6539e087749cf9d3)({\n url: dataUrl,\n filename: `${(0, $21c3f3a8dccfa4fd$export$e2a22331486dcca0)(\"meme\")}.png`,\n mimeType: \"image/png\"\n }).catch((err)=>(0, $166cfb2484b08c80$export$af04143326425dbd)(err.message, \"danger\"));\n if (file && (0, $94933cc6427541bd$export$c37129e465f64ef0)({\n files: [\n file\n ]\n })) {\n $44ae6d9db4eaca0f$var$webShareComponent.shareFiles = [\n file\n ];\n $44ae6d9db4eaca0f$var$webShareComponent.hidden = false;\n }\n } catch (error) {\n console.error(error);\n }\n window.requestAnimationFrame(()=>{\n $44ae6d9db4eaca0f$var$downloadModal.open = true;\n });\n};\nconst $44ae6d9db4eaca0f$var$onImageLoaded = (evt)=>{\n const MAX_WIDTH = 4000;\n const MAX_HEIGHT = 3000;\n let width = evt.target.width;\n let height = evt.target.height;\n if (width > height) {\n if (width > MAX_WIDTH) {\n height *= MAX_WIDTH / width;\n width = MAX_WIDTH;\n }\n } else if (height > MAX_HEIGHT) {\n width *= MAX_HEIGHT / height;\n height = MAX_HEIGHT;\n }\n $44ae6d9db4eaca0f$var$canvas.width = width;\n $44ae6d9db4eaca0f$var$canvas.height = height;\n $44ae6d9db4eaca0f$var$selectedImage = evt.target;\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n $44ae6d9db4eaca0f$var$generateMemeBtn.disabled = false;\n $44ae6d9db4eaca0f$var$canvas.hidden = false;\n $44ae6d9db4eaca0f$var$instructionsEl.hidden = true;\n};\nconst $44ae6d9db4eaca0f$var$handleSolidColorFormInput = (evt)=>{\n const DEFAULT_WIDTH = 600;\n const DEFAULT_HEIGHT = 400;\n if (evt.target === $44ae6d9db4eaca0f$var$solidColorForm[\"canvasColor\"]) $44ae6d9db4eaca0f$var$selectedImage = evt.target.value;\n if (typeof $44ae6d9db4eaca0f$var$selectedImage === \"string\") {\n $44ae6d9db4eaca0f$var$canvas.width = Number($44ae6d9db4eaca0f$var$solidColorForm[\"canvasWidth\"].value) || DEFAULT_WIDTH;\n $44ae6d9db4eaca0f$var$canvas.height = Number($44ae6d9db4eaca0f$var$solidColorForm[\"canvasHeight\"].value) || DEFAULT_HEIGHT;\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n $44ae6d9db4eaca0f$var$generateMemeBtn.disabled = false;\n $44ae6d9db4eaca0f$var$canvas.hidden = false;\n $44ae6d9db4eaca0f$var$instructionsEl.hidden = true;\n }\n};\nconst $44ae6d9db4eaca0f$var$handleFileSelect = (file)=>{\n if (!file) return;\n const image = new Image();\n const reader = new FileReader();\n reader.addEventListener(\"load\", function(evt) {\n const data = evt.target.result;\n image.addEventListener(\"load\", $44ae6d9db4eaca0f$var$onImageLoaded);\n image.src = data;\n });\n reader.readAsDataURL(file);\n};\nconst $44ae6d9db4eaca0f$var$handleOpenVideoModalButtonClick = ()=>{\n $44ae6d9db4eaca0f$var$videoModal.open = true;\n};\nconst $44ae6d9db4eaca0f$var$handleTextPropChange = (element, index, prop)=>{\n if (element.type === \"checkbox\") $44ae6d9db4eaca0f$var$textOptions[index][prop] = element.checked;\n else if (element.type === \"number\") $44ae6d9db4eaca0f$var$textOptions[index][prop] = Number(element.value);\n else $44ae6d9db4eaca0f$var$textOptions[index][prop] = element.value;\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n};\nconst $44ae6d9db4eaca0f$var$handleAddTextboxBtnClick = ()=>{\n const textOptionsLength = $44ae6d9db4eaca0f$var$textOptions.length;\n const newTextBox = (0, $50a37fdc18d479c2$export$293a4b86a6fe2398)(textOptionsLength, $44ae6d9db4eaca0f$var$defaultTextOptions);\n $44ae6d9db4eaca0f$var$textOptions.push({\n ...$44ae6d9db4eaca0f$var$defaultTextOptions\n });\n $44ae6d9db4eaca0f$var$inputsContainer.appendChild(newTextBox);\n newTextBox.querySelector('[data-input=\"text\"]').focus();\n};\nconst $44ae6d9db4eaca0f$var$handleImageUploadFromURL = async (evt)=>{\n evt.preventDefault();\n const form = evt.target;\n const submitButton = form.querySelector('button[type=\"submit\"]');\n const imageUrl = form[\"imageUrl\"].value;\n if (!imageUrl.trim()) return;\n submitButton.disabled = true;\n submitButton.querySelector(\".spinner\").hidden = false;\n submitButton.querySelector(\".label\").hidden = true;\n try {\n const file = await (0, $008970865eefc93d$export$6539e087749cf9d3)({\n url: imageUrl\n }).catch((err)=>(0, $166cfb2484b08c80$export$af04143326425dbd)(err.message, \"danger\"));\n if (file) $44ae6d9db4eaca0f$var$handleFileSelect(file);\n } catch (err) {\n (0, $166cfb2484b08c80$export$af04143326425dbd)(`Failed to load image from \"${imageUrl}\".`, \"danger\");\n } finally{\n submitButton.disabled = false;\n submitButton.querySelector(\".spinner\").hidden = true;\n submitButton.querySelector(\".label\").hidden = false;\n }\n};\nconst $44ae6d9db4eaca0f$var$moveText = (offsetDir, sign, index)=>()=>{\n const textBoxSection = document.querySelectorAll('[data-section=\"textBox\"]')[index];\n const offsetYInput = textBoxSection.querySelector('[data-input=\"offsetY\"]');\n const offsetXInput = textBoxSection.querySelector('[data-input=\"offsetX\"]');\n if (offsetDir === \"offsetY\") {\n if (sign === \"-\") $44ae6d9db4eaca0f$var$textOptions[index].offsetY -= 1;\n if (sign === \"+\") $44ae6d9db4eaca0f$var$textOptions[index].offsetY += 1;\n offsetYInput.value = $44ae6d9db4eaca0f$var$textOptions[index].offsetY;\n }\n if (offsetDir === \"offsetX\") {\n if (sign === \"-\") $44ae6d9db4eaca0f$var$textOptions[index].offsetX -= 1;\n if (sign === \"+\") $44ae6d9db4eaca0f$var$textOptions[index].offsetX += 1;\n offsetXInput.value = $44ae6d9db4eaca0f$var$textOptions[index].offsetX;\n }\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n $44ae6d9db4eaca0f$var$reqAnimFrame = requestAnimationFrame($44ae6d9db4eaca0f$var$moveText(offsetDir, sign, index));\n };\nconst $44ae6d9db4eaca0f$var$handleUploadMethodChange = (evt)=>{\n $44ae6d9db4eaca0f$var$uploadMethodEls.forEach((el)=>el.hidden = el.id !== evt.target.value);\n};\nconst $44ae6d9db4eaca0f$var$handleFileSelectClick = ()=>{\n if (typeof $44ae6d9db4eaca0f$var$dropzoneEl.openFileDialog === \"function\") $44ae6d9db4eaca0f$var$dropzoneEl.openFileDialog();\n};\nconst $44ae6d9db4eaca0f$var$handleDropFilesAccepted = (evt)=>{\n const [file] = evt.detail.acceptedFiles;\n if (file) $44ae6d9db4eaca0f$var$handleFileSelect(file);\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerInput = (evt)=>{\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let prop;\n if (element.matches('[data-input=\"text\"]')) prop = \"text\";\n else if (element.matches('[data-input=\"fillColor\"]')) prop = \"fillColor\";\n else if (element.matches('[data-input=\"shadowColor\"]')) prop = \"shadowColor\";\n else if (element.matches('[data-input=\"font\"]')) prop = \"font\";\n else if (element.matches('[data-input=\"fontSize\"]')) prop = \"fontSize\";\n else if (element.matches('[data-input=\"fontWeight\"]')) prop = \"fontWeight\";\n else if (element.matches('[data-input=\"textAlign\"]')) prop = \"textAlign\";\n else if (element.matches('[data-input=\"shadowBlur\"]')) prop = \"shadowBlur\";\n else if (element.matches('[data-input=\"offsetY\"]')) prop = \"offsetY\";\n else if (element.matches('[data-input=\"offsetX\"]')) prop = \"offsetX\";\n else if (element.matches('[data-input=\"rotate\"]')) prop = \"rotate\";\n else if (element.matches('[data-input=\"borderWidth\"]')) prop = \"borderWidth\";\n if (prop) $44ae6d9db4eaca0f$var$handleTextPropChange(element, index, prop);\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerChange = (evt)=>{\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let prop;\n if (element.matches('[data-input=\"allCaps\"]')) prop = \"allCaps\";\n if (prop) $44ae6d9db4eaca0f$var$handleTextPropChange(element, index, prop);\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerClick = (evt)=>{\n const element = evt.target;\n if (element.matches('[data-button=\"settings\"]')) {\n const textBoxIndex = element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\");\n const textBoxEls = document.querySelectorAll('[data-section=\"textBox\"]');\n textBoxEls.forEach((el, index)=>{\n const settingsEl = el.querySelector('[data-section=\"settings\"]');\n if (el.getAttribute(\"data-index\") === textBoxIndex) {\n settingsEl.hidden = !settingsEl.hidden;\n $44ae6d9db4eaca0f$var$textOptions[index]._isSettingsOpen = !$44ae6d9db4eaca0f$var$textOptions[index]._isSettingsOpen;\n } else {\n settingsEl.hidden = true;\n $44ae6d9db4eaca0f$var$textOptions[index]._isSettingsOpen = false;\n }\n });\n }\n if (element.matches('[data-button=\"delete-text-box\"]')) {\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n let confirm = true;\n if ($44ae6d9db4eaca0f$var$textOptions[index].text.trim()) confirm = window.confirm(\"Are you sure you want to remove this text box?\");\n if (confirm) {\n $44ae6d9db4eaca0f$var$textOptions = (0, $5742c9e143620cb1$export$30a014203d0d7e4f)($44ae6d9db4eaca0f$var$textOptions, index);\n $44ae6d9db4eaca0f$var$inputsContainer.querySelectorAll('[data-section=\"textBox\"]').forEach((el)=>el.remove());\n $44ae6d9db4eaca0f$var$textOptions.forEach((item, index)=>$44ae6d9db4eaca0f$var$inputsContainer.appendChild((0, $50a37fdc18d479c2$export$293a4b86a6fe2398)(index, item)));\n (0, $d346fdc99aed49b3$export$e653a2de0f3a8b89)($44ae6d9db4eaca0f$var$selectedImage, $44ae6d9db4eaca0f$var$canvas, $44ae6d9db4eaca0f$var$ctx, $44ae6d9db4eaca0f$var$textOptions);\n }\n }\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerPointerdown = (evt)=>{\n const element = evt.target;\n const textBoxEl = element.closest('[data-section=\"textBox\"]');\n if (!textBoxEl) return;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute(\"data-index\"));\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton) return;\n const offsetDir = element.getAttribute(\"data-move\");\n const sign = element.getAttribute(\"data-sign\");\n $44ae6d9db4eaca0f$var$reqAnimFrame = requestAnimationFrame($44ae6d9db4eaca0f$var$moveText(offsetDir, sign, index));\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerPointerup = (evt)=>{\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton) return;\n cancelAnimationFrame($44ae6d9db4eaca0f$var$reqAnimFrame);\n $44ae6d9db4eaca0f$var$reqAnimFrame = null;\n};\nconst $44ae6d9db4eaca0f$var$handleInputsContainerPointerout = (evt)=>{\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n if (!isOffsetYButton && !isOffsetXButton || !$44ae6d9db4eaca0f$var$reqAnimFrame) return;\n cancelAnimationFrame($44ae6d9db4eaca0f$var$reqAnimFrame);\n $44ae6d9db4eaca0f$var$reqAnimFrame = null;\n};\nconst $44ae6d9db4eaca0f$var$handleGalleryClick = async (evt)=>{\n const button = evt.target.closest(\"button\");\n if (!button) return;\n const img = button.querySelector(\"img\");\n try {\n const file = await (0, $008970865eefc93d$export$6539e087749cf9d3)({\n url: img.src\n }).catch((err)=>(0, $166cfb2484b08c80$export$af04143326425dbd)(err.message, \"danger\"));\n if (file) $44ae6d9db4eaca0f$var$handleFileSelect(file);\n } catch (err) {\n (0, $166cfb2484b08c80$export$af04143326425dbd)(`Failed to load image: \"${img.alt}\".`, \"danger\");\n }\n};\nconst $44ae6d9db4eaca0f$var$handleGallerySearchInput = (evt)=>{\n const query = evt.target.value.toLowerCase().trim();\n const galleryItems = $44ae6d9db4eaca0f$var$galleryEl.querySelectorAll(\"button\");\n galleryItems.forEach((item)=>{\n const alt = (item.querySelector(\"img\").getAttribute(\"alt\") || \"\").toLowerCase();\n item.hidden = !alt.includes(query);\n });\n $44ae6d9db4eaca0f$var$galleryNoResultsEl.hidden = !!$44ae6d9db4eaca0f$var$galleryEl.querySelector(\"button:not([hidden])\");\n};\nconst $44ae6d9db4eaca0f$var$handleWebShareError = ()=>{\n $44ae6d9db4eaca0f$var$downloadModal.open = false;\n (0, $166cfb2484b08c80$export$af04143326425dbd)(\"There was an error while trying to share your meme.\", \"danger\");\n};\nconst $44ae6d9db4eaca0f$var$handleCapturePhotoError = (evt)=>{\n console.error(evt.detail.error);\n (0, $166cfb2484b08c80$export$af04143326425dbd)(evt.detail.error.message, \"danger\");\n};\nconst $44ae6d9db4eaca0f$var$handleCapturePhotoSuccess = (evt)=>{\n $44ae6d9db4eaca0f$var$videoModal.open = false;\n const image = new Image();\n image.addEventListener(\"load\", $44ae6d9db4eaca0f$var$onImageLoaded);\n image.src = evt.detail.dataURI;\n};\nconst $44ae6d9db4eaca0f$var$handleModalOpen = (evt)=>{\n if (evt.target.id === \"videoModal\") {\n const capturePhotoComponent = $44ae6d9db4eaca0f$var$videoModal.querySelector(\"capture-photo\");\n if (capturePhotoComponent && typeof capturePhotoComponent.startVideoStream === \"function\") capturePhotoComponent.startVideoStream();\n }\n};\nconst $44ae6d9db4eaca0f$var$handleModalClose = (evt)=>{\n if (evt.target.id === \"videoModal\") {\n const capturePhotoComponent = $44ae6d9db4eaca0f$var$videoModal.querySelector(\"capture-photo\");\n if (capturePhotoComponent && typeof capturePhotoComponent.stopVideoStream === \"function\") capturePhotoComponent.stopVideoStream();\n }\n};\n$44ae6d9db4eaca0f$var$fileSelectBtn.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleFileSelectClick);\n$44ae6d9db4eaca0f$var$openVideoModalBtn.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleOpenVideoModalButtonClick);\n$44ae6d9db4eaca0f$var$addTextboxBtn.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleAddTextboxBtnClick);\n$44ae6d9db4eaca0f$var$generateMemeBtn.addEventListener(\"click\", $44ae6d9db4eaca0f$var$generateMeme);\n$44ae6d9db4eaca0f$var$downloadMemeBtn.addEventListener(\"click\", ()=>$44ae6d9db4eaca0f$var$downloadModal.open = false);\n$44ae6d9db4eaca0f$var$imageUrlForm.addEventListener(\"submit\", $44ae6d9db4eaca0f$var$handleImageUploadFromURL);\n$44ae6d9db4eaca0f$var$dropzoneEl.addEventListener(\"files-dropzone-drop-accepted\", $44ae6d9db4eaca0f$var$handleDropFilesAccepted);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"input\", $44ae6d9db4eaca0f$var$handleInputsContainerInput);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"change\", $44ae6d9db4eaca0f$var$handleInputsContainerChange);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleInputsContainerClick);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"pointerdown\", $44ae6d9db4eaca0f$var$handleInputsContainerPointerdown);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"pointerup\", $44ae6d9db4eaca0f$var$handleInputsContainerPointerup);\n$44ae6d9db4eaca0f$var$inputsContainer.addEventListener(\"pointerout\", $44ae6d9db4eaca0f$var$handleInputsContainerPointerout);\n$44ae6d9db4eaca0f$var$imageUploadMethodSelect.addEventListener(\"change\", $44ae6d9db4eaca0f$var$handleUploadMethodChange);\n$44ae6d9db4eaca0f$var$galleryEl.addEventListener(\"click\", $44ae6d9db4eaca0f$var$handleGalleryClick);\n$44ae6d9db4eaca0f$var$gallerySearchEl.addEventListener(\"input\", $44ae6d9db4eaca0f$var$handleGallerySearchInput);\n$44ae6d9db4eaca0f$var$solidColorForm.addEventListener(\"input\", $44ae6d9db4eaca0f$var$handleSolidColorFormInput);\ndocument.addEventListener(\"web-share:error\", $44ae6d9db4eaca0f$var$handleWebShareError);\ndocument.addEventListener(\"capture-photo:error\", $44ae6d9db4eaca0f$var$handleCapturePhotoError);\ndocument.addEventListener(\"capture-photo:success\", $44ae6d9db4eaca0f$var$handleCapturePhotoSuccess);\ndocument.addEventListener(\"me-open\", $44ae6d9db4eaca0f$var$handleModalOpen);\ndocument.addEventListener(\"me-close\", $44ae6d9db4eaca0f$var$handleModalClose);\n$44ae6d9db4eaca0f$var$galleryEl.querySelectorAll(\"button > img\")?.forEach((image)=>{\n image.setAttribute(\"title\", image.getAttribute(\"alt\"));\n});\n$44ae6d9db4eaca0f$var$textOptions.forEach((item, index)=>{\n $44ae6d9db4eaca0f$var$inputsContainer.appendChild((0, $50a37fdc18d479c2$export$293a4b86a6fe2398)(index, item));\n});\n$44ae6d9db4eaca0f$var$dropzoneEl.accept = (0, $33dea9d9a6da4c9a$export$63e7bed68b07a85c);\n(0, $055531bbd0af154c$export$6874249d87f2602a).forEach(({ name: name, path: path, style: style, weight: weight })=>{\n (0, $055531bbd0af154c$export$59eceaef0c7797b2)(name, path, {\n style: style,\n weight: weight\n });\n});\n\n})();\n//# sourceMappingURL=index.ac06585e.js.map\n","\"use strict\";\n\nvar mapping = new Map();\nfunction register(baseUrl, manifest) {\n for (var i = 0; i < manifest.length - 1; i += 2) {\n mapping.set(manifest[i], {\n baseUrl: baseUrl,\n path: manifest[i + 1]\n });\n }\n}\nfunction resolve(id) {\n var resolved = mapping.get(id);\n if (resolved == null) {\n throw new Error('Could not resolve bundle with id ' + id);\n }\n return new URL(resolved.path, resolved.baseUrl).toString();\n}\nmodule.exports.register = register;\nmodule.exports.resolve = resolve;","\"use strict\";\n\nvar bundleURL = {};\nfunction getBundleURLCached(id) {\n var value = bundleURL[id];\n if (!value) {\n value = getBundleURL();\n bundleURL[id] = value;\n }\n return value;\n}\nfunction getBundleURL() {\n try {\n throw new Error();\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g);\n if (matches) {\n // The first two stack frames will be this function and getBundleURLCached.\n // Use the 3rd one, which will be a runtime in the original bundle.\n return getBaseURL(matches[2]);\n }\n }\n return '/';\n}\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/.+)\\/[^/]+$/, '$1') + '/';\n}\n\n// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported.\nfunction getOrigin(url) {\n var matches = ('' + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^/]+/);\n if (!matches) {\n throw new Error('Origin not found');\n }\n return matches[0];\n}\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\nexports.getOrigin = getOrigin;","require('./helpers/bundle-manifest').register(require('./helpers/bundle-url').getBundleURL('8tAhj'),JSON.parse(\"[\\\"8tAhj\\\",\\\"index.ac06585e.js\\\",\\\"cIoLp\\\",\\\"Pressuru.684952ea.ttf\\\",\\\"a9OJN\\\",\\\"Oswald-Regular.89ec7d89.ttf\\\",\\\"jOuj0\\\",\\\"Oswald-Bold.0f6a7ca6.ttf\\\",\\\"ePq3V\\\",\\\"Roboto-Regular.ca197847.ttf\\\",\\\"9WQUU\\\",\\\"Roboto-Bold.fdb9b54a.ttf\\\",\\\"hIywO\\\",\\\"RobotoCondensed-Regular.d585f5c7.ttf\\\",\\\"ab1rw\\\",\\\"RobotoCondensed-Bold.e1f96d4b.ttf\\\",\\\"j4ruO\\\",\\\"CourierPrime-Regular.3a25a501.ttf\\\",\\\"3nnD2\\\",\\\"CourierPrime-Bold.3d6bf689.ttf\\\",\\\"8fsWK\\\",\\\"OpenSans-Regular.edf9e01b.ttf\\\",\\\"5JXG6\\\",\\\"OpenSans-Bold.8fceb72b.ttf\\\",\\\"9FH7D\\\",\\\"index.47ef8ac4.css\\\"]\"));","import { isWebShareSupported } from '@georapbox/web-share-element/dist/is-web-share-supported.js';\nimport '@georapbox/web-share-element/dist/web-share-defined.js';\nimport '@georapbox/capture-photo-element/dist/capture-photo-defined.js';\nimport '@georapbox/modal-element/dist/modal-element-defined.js';\nimport '@georapbox/files-dropzone-element/dist/files-dropzone-defined.js';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport '../css/main.css';\nimport { arrayRemove } from './utils/array-remove.js';\nimport { uid } from './utils/uid.js';\nimport { ACCEPTED_MIME_TYPES } from './constants.js';\nimport { customFonts, loadCustomFont } from './custom-fonts.js';\nimport { fileFromUrl } from './file-from-url.js';\nimport { toastAlert } from './toast-alert.js';\nimport { createTextBox } from './create-text-box.js';\nimport { drawCanvas } from './draw-canvas.js';\n\nconst videoModal = document.getElementById('videoModal');\nconst downloadModal = document.getElementById('downloadModal');\nconst canvas = document.getElementById('canvas');\nconst dropzoneEl = document.querySelector('files-dropzone');\nconst instructionsEl = document.getElementById('instructions');\nconst ctx = canvas.getContext('2d');\nconst imageUploadMethodSelect = document.getElementById('imageUploadMethodSelect');\nconst fileSelectBtn = document.getElementById('fileSelectBtn');\nconst imageUrlForm = document.getElementById('imageUrlForm');\nconst addTextboxBtn = document.getElementById('addTextboxBtn');\nconst inputsContainer = document.getElementById('inputsContainer');\nconst generateMemeBtn = document.getElementById('generateMemeBtn');\nconst openVideoModalBtn = document.getElementById('openVideoModalBtn');\nconst downloadMemeBtn = document.getElementById('downloadMemeBtn');\nconst downloadMemePreview = document.getElementById('downloadMemePreview');\nconst webShareComponent = document.querySelector('web-share');\nconst galleryEl = document.getElementById('gallery');\nconst gallerySearchEl = document.getElementById('gallerySearch');\nconst galleryNoResultsEl = galleryEl.querySelector('.gallery__no-results');\nconst solidColorForm = document.getElementById('solidColorForm');\nconst uploadMethodEls = document.querySelectorAll('.upload-method');\nlet selectedImage = null;\nlet reqAnimFrame = null;\n\nconst defaultTextOptions = {\n _isSettingsOpen: false,\n text: '',\n fillColor: '#ffffff',\n shadowColor: '#000000',\n font: 'Pressuru',\n fontSize: 40,\n fontWeight: 'normal',\n textAlign: 'center',\n shadowBlur: 3,\n borderWidth: 1,\n offsetY: 0,\n offsetX: 0,\n rotate: 0,\n allCaps: true\n};\n\nlet textOptions = [\n { ...defaultTextOptions }\n];\n\nconst generateMeme = async () => {\n const dataUrl = canvas.toDataURL('image/png');\n\n // Prepare download link\n const downloadLink = dataUrl.replace('image/png', 'image/octet-stream');\n downloadMemeBtn.download = `${uid('meme')}.png`;\n downloadMemeBtn.href = downloadLink;\n downloadMemePreview.width = canvas.width;\n downloadMemePreview.height = canvas.height;\n downloadMemePreview.src = downloadLink;\n\n // Prepare for sharing file\n if (isWebShareSupported()) {\n try {\n const file = await fileFromUrl({\n url: dataUrl,\n filename: `${uid('meme')}.png`,\n mimeType: 'image/png'\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file && isWebShareSupported({ files: [file] })) {\n webShareComponent.shareFiles = [file];\n webShareComponent.hidden = false;\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n window.requestAnimationFrame(() => {\n downloadModal.open = true;\n });\n};\n\nconst onImageLoaded = evt => {\n const MAX_WIDTH = 4000;\n const MAX_HEIGHT = 3000;\n let width = evt.target.width;\n let height = evt.target.height;\n\n if (width > height) {\n if (width > MAX_WIDTH) {\n height *= MAX_WIDTH / width;\n width = MAX_WIDTH;\n }\n } else {\n if (height > MAX_HEIGHT) {\n width *= MAX_HEIGHT / height;\n height = MAX_HEIGHT;\n }\n }\n canvas.width = width;\n canvas.height = height;\n\n selectedImage = evt.target;\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n generateMemeBtn.disabled = false;\n canvas.hidden = false;\n instructionsEl.hidden = true;\n};\n\nconst handleSolidColorFormInput = evt => {\n const DEFAULT_WIDTH = 600;\n const DEFAULT_HEIGHT = 400;\n\n if (evt.target === solidColorForm['canvasColor']) {\n selectedImage = evt.target.value;\n }\n\n if (typeof selectedImage === 'string') {\n canvas.width = Number(solidColorForm['canvasWidth'].value) || DEFAULT_WIDTH;\n canvas.height = Number(solidColorForm['canvasHeight'].value) || DEFAULT_HEIGHT;\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n generateMemeBtn.disabled = false;\n canvas.hidden = false;\n instructionsEl.hidden = true;\n }\n};\n\nconst handleFileSelect = file => {\n if (!file) {\n return;\n }\n\n const image = new Image();\n const reader = new FileReader();\n\n reader.addEventListener('load', function (evt) {\n const data = evt.target.result;\n image.addEventListener('load', onImageLoaded);\n image.src = data;\n });\n\n reader.readAsDataURL(file);\n};\n\nconst handleOpenVideoModalButtonClick = () => {\n videoModal.open = true;\n};\n\nconst handleTextPropChange = (element, index, prop) => {\n if (element.type === 'checkbox') {\n textOptions[index][prop] = element.checked;\n } else if (element.type === 'number') {\n textOptions[index][prop] = Number(element.value);\n } else {\n textOptions[index][prop] = element.value;\n }\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n};\n\nconst handleAddTextboxBtnClick = () => {\n const textOptionsLength = textOptions.length;\n const newTextBox = createTextBox(textOptionsLength, defaultTextOptions);\n\n textOptions.push({ ...defaultTextOptions });\n inputsContainer.appendChild(newTextBox);\n newTextBox.querySelector('[data-input=\"text\"]').focus();\n};\n\nconst handleImageUploadFromURL = async evt => {\n evt.preventDefault();\n\n const form = evt.target;\n const submitButton = form.querySelector('button[type=\"submit\"]');\n const imageUrl = form['imageUrl'].value;\n\n if (!imageUrl.trim()) {\n return;\n }\n\n submitButton.disabled = true;\n submitButton.querySelector('.spinner').hidden = false;\n submitButton.querySelector('.label').hidden = true;\n\n try {\n const file = await fileFromUrl({\n url: imageUrl\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file) {\n handleFileSelect(file);\n }\n } catch (err) {\n toastAlert(`Failed to load image from \"${imageUrl}\".`, 'danger');\n } finally {\n submitButton.disabled = false;\n submitButton.querySelector('.spinner').hidden = true;\n submitButton.querySelector('.label').hidden = false;\n }\n};\n\nconst moveText = (offsetDir, sign, index) => () => {\n const textBoxSection = document.querySelectorAll('[data-section=\"textBox\"]')[index];\n const offsetYInput = textBoxSection.querySelector('[data-input=\"offsetY\"]');\n const offsetXInput = textBoxSection.querySelector('[data-input=\"offsetX\"]');\n\n if (offsetDir === 'offsetY') {\n if (sign === '-') {\n textOptions[index].offsetY -= 1;\n }\n\n if (sign === '+') {\n textOptions[index].offsetY += 1;\n }\n\n offsetYInput.value = textOptions[index].offsetY;\n }\n\n if (offsetDir === 'offsetX') {\n if (sign === '-') {\n textOptions[index].offsetX -= 1;\n }\n\n if (sign === '+') {\n textOptions[index].offsetX += 1;\n }\n\n offsetXInput.value = textOptions[index].offsetX;\n }\n\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n\n reqAnimFrame = requestAnimationFrame(moveText(offsetDir, sign, index));\n};\n\nconst handleUploadMethodChange = evt => {\n uploadMethodEls.forEach(el => el.hidden = el.id !== evt.target.value);\n};\n\nconst handleFileSelectClick = () => {\n if (typeof dropzoneEl.openFileDialog === 'function') {\n dropzoneEl.openFileDialog();\n }\n};\n\nconst handleDropFilesAccepted = evt => {\n const [file] = evt.detail.acceptedFiles;\n\n if (file) {\n handleFileSelect(file);\n }\n};\n\nconst handleInputsContainerInput = evt => {\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let prop;\n\n if (element.matches('[data-input=\"text\"]')) {\n prop = 'text';\n } else if (element.matches('[data-input=\"fillColor\"]')) {\n prop = 'fillColor';\n } else if (element.matches('[data-input=\"shadowColor\"]')) {\n prop = 'shadowColor';\n } else if (element.matches('[data-input=\"font\"]')) {\n prop = 'font';\n } else if (element.matches('[data-input=\"fontSize\"]')) {\n prop = 'fontSize';\n } else if (element.matches('[data-input=\"fontWeight\"]')) {\n prop = 'fontWeight';\n } else if (element.matches('[data-input=\"textAlign\"]')) {\n prop = 'textAlign';\n } else if (element.matches('[data-input=\"shadowBlur\"]')) {\n prop = 'shadowBlur';\n } else if (element.matches('[data-input=\"offsetY\"]')) {\n prop = 'offsetY';\n } else if (element.matches('[data-input=\"offsetX\"]')) {\n prop = 'offsetX';\n } else if (element.matches('[data-input=\"rotate\"]')) {\n prop = 'rotate';\n } else if (element.matches('[data-input=\"borderWidth\"]')) {\n prop = 'borderWidth';\n }\n\n if (prop) {\n handleTextPropChange(element, index, prop);\n }\n};\n\nconst handleInputsContainerChange = evt => {\n const element = evt.target;\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let prop;\n\n if (element.matches('[data-input=\"allCaps\"]')) {\n prop = 'allCaps';\n }\n\n if (prop) {\n handleTextPropChange(element, index, prop);\n }\n};\n\nconst handleInputsContainerClick = evt => {\n const element = evt.target;\n\n if (element.matches('[data-button=\"settings\"]')) {\n const textBoxIndex = element.closest('[data-section=\"textBox\"]').getAttribute('data-index');\n const textBoxEls = document.querySelectorAll('[data-section=\"textBox\"]');\n\n textBoxEls.forEach((el, index) => {\n const settingsEl = el.querySelector('[data-section=\"settings\"]');\n\n if (el.getAttribute('data-index') === textBoxIndex) {\n settingsEl.hidden = !settingsEl.hidden;\n textOptions[index]._isSettingsOpen = !textOptions[index]._isSettingsOpen;\n } else {\n settingsEl.hidden = true;\n textOptions[index]._isSettingsOpen = false;\n }\n });\n }\n\n if (element.matches('[data-button=\"delete-text-box\"]')) {\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n let confirm = true;\n\n if (textOptions[index].text.trim()) {\n confirm = window.confirm('Are you sure you want to remove this text box?');\n }\n\n if (confirm) {\n textOptions = arrayRemove(textOptions, index);\n inputsContainer.querySelectorAll('[data-section=\"textBox\"]').forEach(el => el.remove());\n textOptions.forEach((item, index) => inputsContainer.appendChild(createTextBox(index, item)));\n drawCanvas(selectedImage, canvas, ctx, textOptions);\n }\n }\n};\n\nconst handleInputsContainerPointerdown = evt => {\n const element = evt.target;\n const textBoxEl = element.closest('[data-section=\"textBox\"]');\n\n if (!textBoxEl) {\n return;\n }\n\n const index = Number(element.closest('[data-section=\"textBox\"]').getAttribute('data-index'));\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton) {\n return;\n }\n\n const offsetDir = element.getAttribute('data-move');\n const sign = element.getAttribute('data-sign');\n\n reqAnimFrame = requestAnimationFrame(moveText(offsetDir, sign, index));\n};\n\nconst handleInputsContainerPointerup = evt => {\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton) {\n return;\n }\n\n cancelAnimationFrame(reqAnimFrame);\n reqAnimFrame = null;\n};\n\nconst handleInputsContainerPointerout = evt => {\n const element = evt.target;\n const isOffsetYButton = element.matches('[data-move=\"offsetY\"]');\n const isOffsetXButton = element.matches('[data-move=\"offsetX\"]');\n\n if (!isOffsetYButton && !isOffsetXButton || !reqAnimFrame) {\n return;\n }\n\n cancelAnimationFrame(reqAnimFrame);\n reqAnimFrame = null;\n};\n\nconst handleGalleryClick = async evt => {\n const button = evt.target.closest('button');\n\n if (!button) {\n return;\n }\n\n const img = button.querySelector('img');\n\n try {\n const file = await fileFromUrl({\n url: img.src\n }).catch(err => toastAlert(err.message, 'danger'));\n\n if (file) {\n handleFileSelect(file);\n }\n } catch (err) {\n toastAlert(`Failed to load image: \"${img.alt}\".`, 'danger');\n }\n};\n\nconst handleGallerySearchInput = evt => {\n const query = evt.target.value.toLowerCase().trim();\n const galleryItems = galleryEl.querySelectorAll('button');\n\n galleryItems.forEach(item => {\n const alt = (item.querySelector('img').getAttribute('alt') || '').toLowerCase();\n item.hidden = !alt.includes(query);\n });\n\n galleryNoResultsEl.hidden = !!galleryEl.querySelector('button:not([hidden])');\n};\n\nconst handleWebShareError = () => {\n downloadModal.open = false;\n toastAlert('There was an error while trying to share your meme.', 'danger');\n};\n\nconst handleCapturePhotoError = evt => {\n console.error(evt.detail.error);\n toastAlert(evt.detail.error.message, 'danger');\n};\n\nconst handleCapturePhotoSuccess = evt => {\n videoModal.open = false;\n const image = new Image();\n image.addEventListener('load', onImageLoaded);\n image.src = evt.detail.dataURI;\n};\n\nconst handleModalOpen = evt => {\n if (evt.target.id === 'videoModal') {\n const capturePhotoComponent = videoModal.querySelector('capture-photo');\n\n if (capturePhotoComponent && typeof capturePhotoComponent.startVideoStream === 'function') {\n capturePhotoComponent.startVideoStream();\n }\n }\n};\n\nconst handleModalClose = evt => {\n if (evt.target.id === 'videoModal') {\n const capturePhotoComponent = videoModal.querySelector('capture-photo');\n\n if (capturePhotoComponent && typeof capturePhotoComponent.stopVideoStream === 'function') {\n capturePhotoComponent.stopVideoStream();\n }\n }\n};\n\nfileSelectBtn.addEventListener('click', handleFileSelectClick);\nopenVideoModalBtn.addEventListener('click', handleOpenVideoModalButtonClick);\naddTextboxBtn.addEventListener('click', handleAddTextboxBtnClick);\ngenerateMemeBtn.addEventListener('click', generateMeme);\ndownloadMemeBtn.addEventListener('click', () => downloadModal.open = false);\nimageUrlForm.addEventListener('submit', handleImageUploadFromURL);\ndropzoneEl.addEventListener('files-dropzone-drop-accepted', handleDropFilesAccepted);\ninputsContainer.addEventListener('input', handleInputsContainerInput);\ninputsContainer.addEventListener('change', handleInputsContainerChange);\ninputsContainer.addEventListener('click', handleInputsContainerClick);\ninputsContainer.addEventListener('pointerdown', handleInputsContainerPointerdown);\ninputsContainer.addEventListener('pointerup', handleInputsContainerPointerup);\ninputsContainer.addEventListener('pointerout', handleInputsContainerPointerout);\nimageUploadMethodSelect.addEventListener('change', handleUploadMethodChange);\ngalleryEl.addEventListener('click', handleGalleryClick);\ngallerySearchEl.addEventListener('input', handleGallerySearchInput);\nsolidColorForm.addEventListener('input', handleSolidColorFormInput);\ndocument.addEventListener('web-share:error', handleWebShareError);\ndocument.addEventListener('capture-photo:error', handleCapturePhotoError);\ndocument.addEventListener('capture-photo:success', handleCapturePhotoSuccess);\ndocument.addEventListener('me-open', handleModalOpen);\ndocument.addEventListener('me-close', handleModalClose);\n\ngalleryEl.querySelectorAll('button > img')?.forEach(image => {\n image.setAttribute('title', image.getAttribute('alt'));\n});\n\ntextOptions.forEach((item, index) => {\n inputsContainer.appendChild(createTextBox(index, item));\n});\n\ndropzoneEl.accept = ACCEPTED_MIME_TYPES;\n\ncustomFonts.forEach(({ name, path, style, weight }) => {\n loadCustomFont(name, path, { style, weight });\n});\n","function a(a){return null!==a&&\"object\"==typeof a?\"share\"in navigator&&\"canShare\"in navigator&&navigator.canShare(a):\"share\"in navigator}export{a as isWebShareSupported};\n//# sourceMappingURL=is-web-share-supported.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $e179325634270afd$exports = {};\n\n$parcel$export($e179325634270afd$exports, \"WebShare\", function () { return $e179325634270afd$export$30b344bef3e55b67; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ /**\n * Represents the data to share.\n *\n * @typedef {Object} ShareData\n * @property {string} [url] - The URL to share.\n * @property {string} [title] - The title to share.\n * @property {string} [text] - The text to share.\n * @property {File[]} [files] - The files to share.\n */ const $e179325634270afd$var$styles = /* css */ `\n :host {\n display: inline-block;\n }\n`;\nconst $e179325634270afd$var$template = document.createElement(\"template\");\n$e179325634270afd$var$template.innerHTML = /* html */ `\n \n \n`;\n/**\n * @summary A custom element that provides a button to share content.\n * @documentation https://github.com/georapbox/web-share-element\n *\n * @tagname web-share - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {boolean} disabled - Indicates whether the button is disabled.\n * @property {string} shareUrl - The URL to share.\n * @property {string} shareTitle - The title to share.\n * @property {string} shareText - The text to share.\n * @property {File[]} shareFiles - The files to share.\n *\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {string} share-url - Reflects the shareUrl property.\n * @attribute {string} share-title - Reflects the shareTitle property.\n * @attribute {string} share-text - Reflects the shareText property.\n *\n * @slot button - The button to share content.\n * @slot button-content - The content of the button to share content.\n *\n * @csspart button - The button to share content.\n * @csspart button--disabled - The button to share content when disabled.\n *\n * @event web-share:success - Fired when the share operation is successful.\n * @event web-share:abort - Fired when the share operation is aborted.\n * @event web-share:error - Fired when the share operation fails.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method share - Instance method. Shares the shareable data taken from the element's properties.\n */ class $e179325634270afd$export$30b344bef3e55b67 extends HTMLElement {\n /** @type {Nullable} */ #buttonSlot;\n /** @type {Nullable} */ #buttonEl;\n /** @type {File[]} */ #files = [];\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\",\n delegatesFocus: true\n });\n shadowRoot.appendChild($e179325634270afd$var$template.content.cloneNode(true));\n }\n this.#buttonSlot = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null;\n this.#buttonEl = this.#getButton();\n }\n static get observedAttributes() {\n return [\n \"disabled\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"disabled\" && oldValue !== newValue && this.#buttonEl) {\n this.#buttonEl.toggleAttribute(\"disabled\", this.disabled);\n this.#buttonEl.setAttribute(\"aria-disabled\", this.disabled.toString());\n if (this.#buttonEl.part && this.#buttonEl.part.contains(\"button\")) this.#buttonEl.part.toggle(\"button--disabled\", this.disabled);\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"shareUrl\");\n this.#upgradeProperty(\"shareTitle\");\n this.#upgradeProperty(\"shareText\");\n this.#upgradeProperty(\"shareFiles\");\n this.#upgradeProperty(\"disabled\");\n this.#buttonSlot?.addEventListener(\"slotchange\", this.#handleSlotChange);\n this.#buttonEl?.addEventListener(\"click\", this.#handleClick);\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#buttonSlot?.removeEventListener(\"slotchange\", this.#handleSlotChange);\n this.#buttonEl?.removeEventListener(\"click\", this.#handleClick);\n }\n /**\n * @type {boolean} - Indicates whether the button is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */ get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n this.toggleAttribute(\"disabled\", !!value);\n }\n /**\n * @type {string} - The URL to share.\n * @attribute share-url - Reflects the shareUrl property.\n */ get shareUrl() {\n return this.getAttribute(\"share-url\") || \"\";\n }\n set shareUrl(value) {\n this.setAttribute(\"share-url\", value);\n }\n /**\n * @type {string} - The title to share.\n * @attribute share-title - Reflects the shareTitle property.\n */ get shareTitle() {\n return this.getAttribute(\"share-title\") || \"\";\n }\n set shareTitle(value) {\n this.setAttribute(\"share-title\", value);\n }\n /**\n * @type {string} - The text to share.\n * @attribute share-text - Reflects the shareText property.\n */ get shareText() {\n return this.getAttribute(\"share-text\") || \"\";\n }\n set shareText(value) {\n this.setAttribute(\"share-text\", value);\n }\n /**\n * @type {File[]} - The files to share.\n */ get shareFiles() {\n return this.#files;\n }\n set shareFiles(value) {\n if (Array.isArray(value) && value.length > 0) this.#files = value;\n }\n /**\n * Shares the shareable data taken from the element's properties.\n *\n * @returns {Promise} - A promise that resolves when the share operation is complete.\n */ async share() {\n if (this.disabled) return;\n try {\n /** @type {ShareData} */ const shareData = {};\n if (this.shareUrl) shareData.url = this.shareUrl;\n if (this.shareTitle) shareData.title = this.shareTitle;\n if (this.shareText) shareData.text = this.shareText;\n if (Array.isArray(this.shareFiles) && this.shareFiles.length > 0 && navigator.canShare && navigator.canShare({\n files: this.shareFiles\n })) shareData.files = this.shareFiles;\n await navigator.share(shareData);\n this.dispatchEvent(new CustomEvent(\"web-share:success\", {\n bubbles: true,\n composed: true,\n detail: {\n shareData: shareData\n }\n }));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n this.dispatchEvent(new CustomEvent(\"web-share:abort\", {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n return;\n }\n this.dispatchEvent(new CustomEvent(\"web-share:error\", {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n }\n /**\n * Handles the click event on the button.\n *\n * @param {any} evt - The event object.\n */ #handleClick = (evt)=>{\n evt.preventDefault();\n if (this.disabled) return;\n this.share();\n };\n /**\n * Handles the slotchange event on the button slot.\n *\n * @param {any} evt - The event object.\n */ #handleSlotChange = (evt)=>{\n if (evt.target && evt.target.name === \"button\") {\n this.#buttonEl?.removeEventListener(\"click\", this.#handleClick);\n this.#buttonEl = this.#getButton();\n if (this.#buttonEl) {\n this.#buttonEl.addEventListener(\"click\", this.#handleClick);\n if (this.#buttonEl.nodeName !== \"BUTTON\" && !this.#buttonEl.hasAttribute(\"role\")) this.#buttonEl.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Returns the button element from the button slot.\n *\n * @returns {Nullable} - The button element.\n */ #getButton() {\n if (!this.#buttonSlot) return null;\n return this.#buttonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"button\";\n }) || null;\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'shareUrl' | 'shareTitle' | 'shareText' | 'shareFiles' | 'disabled'} prop - The property name to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n static defineCustomElement(elementName = \"web-share\") {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $e179325634270afd$export$30b344bef3e55b67);\n }\n}\n\n\n(0, $e179325634270afd$export$30b344bef3e55b67).defineCustomElement();\n\n\nexport {$e179325634270afd$export$30b344bef3e55b67 as WebShare};\n//# sourceMappingURL=web-share-defined.js.map\n","// @ts-check\n\n/**\n * Check if Web Share API is supported by the platform.\n *\n * @param {import('./web-share').ShareData} [options]\n * @returns {boolean} Returns `true` if Web Share API is supported; otherwise `false`.\n */\nfunction isWebShareSupported(options) {\n if (options !== null && typeof options === 'object') {\n return 'share' in navigator && 'canShare' in navigator && navigator.canShare(options);\n }\n\n return 'share' in navigator;\n}\n\nexport { isWebShareSupported };\n","Object.defineProperty({},\"WebShare\",{get:function(){return s},set:void 0,enumerable:!0,configurable:!0});let t=`\n :host {\n display: inline-block;\n }\n`,e=document.createElement(\"template\");e.innerHTML=`\n \n \n`;class s extends HTMLElement{#t;#e;#s=[];constructor(){super(),this.shadowRoot||this.attachShadow({mode:\"open\",delegatesFocus:!0}).appendChild(e.content.cloneNode(!0)),this.#t=this.shadowRoot?.querySelector('slot[name=\"button\"]')||null,this.#e=this.#i()}static get observedAttributes(){return[\"disabled\"]}attributeChangedCallback(t,e,s){\"disabled\"===t&&e!==s&&this.#e&&(this.#e.toggleAttribute(\"disabled\",this.disabled),this.#e.setAttribute(\"aria-disabled\",this.disabled.toString()),this.#e.part&&this.#e.part.contains(\"button\")&&this.#e.part.toggle(\"button--disabled\",this.disabled))}connectedCallback(){this.#r(\"shareUrl\"),this.#r(\"shareTitle\"),this.#r(\"shareText\"),this.#r(\"shareFiles\"),this.#r(\"disabled\"),this.#t?.addEventListener(\"slotchange\",this.#a),this.#e?.addEventListener(\"click\",this.#n)}disconnectedCallback(){this.#t?.removeEventListener(\"slotchange\",this.#a),this.#e?.removeEventListener(\"click\",this.#n)}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(t){this.toggleAttribute(\"disabled\",!!t)}get shareUrl(){return this.getAttribute(\"share-url\")||\"\"}set shareUrl(t){this.setAttribute(\"share-url\",t)}get shareTitle(){return this.getAttribute(\"share-title\")||\"\"}set shareTitle(t){this.setAttribute(\"share-title\",t)}get shareText(){return this.getAttribute(\"share-text\")||\"\"}set shareText(t){this.setAttribute(\"share-text\",t)}get shareFiles(){return this.#s}set shareFiles(t){Array.isArray(t)&&t.length>0&&(this.#s=t)}async share(){if(!this.disabled)try{let t={};this.shareUrl&&(t.url=this.shareUrl),this.shareTitle&&(t.title=this.shareTitle),this.shareText&&(t.text=this.shareText),Array.isArray(this.shareFiles)&&this.shareFiles.length>0&&navigator.canShare&&navigator.canShare({files:this.shareFiles})&&(t.files=this.shareFiles),await navigator.share(t),this.dispatchEvent(new CustomEvent(\"web-share:success\",{bubbles:!0,composed:!0,detail:{shareData:t}}))}catch(t){if(t instanceof Error&&\"AbortError\"===t.name){this.dispatchEvent(new CustomEvent(\"web-share:abort\",{bubbles:!0,composed:!0,detail:{error:t}}));return}this.dispatchEvent(new CustomEvent(\"web-share:error\",{bubbles:!0,composed:!0,detail:{error:t}}))}}#n=t=>{t.preventDefault(),this.disabled||this.share()};#a=t=>{t.target&&\"button\"===t.target.name&&(this.#e?.removeEventListener(\"click\",this.#n),this.#e=this.#i(),this.#e&&(this.#e.addEventListener(\"click\",this.#n),\"BUTTON\"===this.#e.nodeName||this.#e.hasAttribute(\"role\")||this.#e.setAttribute(\"role\",\"button\")))};#i(){return this.#t&&this.#t.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"button\"===t.getAttribute(\"slot\"))||null}#r(t){if(Object.prototype.hasOwnProperty.call(this,t)){let e=this[t];delete this[t],this[t]=e}}static defineCustomElement(t=\"web-share\"){\"undefined\"==typeof window||window.customElements.get(t)||window.customElements.define(t,s)}}s.defineCustomElement();export{s as WebShare};\n//# sourceMappingURL=web-share-defined.js.map\n","import { WebShare } from './web-share.js';\n\nWebShare.defineCustomElement();\n\nexport { WebShare };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\n/**\n * Represents the data to share.\n *\n * @typedef {Object} ShareData\n * @property {string} [url] - The URL to share.\n * @property {string} [title] - The title to share.\n * @property {string} [text] - The text to share.\n * @property {File[]} [files] - The files to share.\n */\n\nconst styles = /* css */`\n :host {\n display: inline-block;\n }\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */ `\n \n \n`;\n\n/**\n * @summary A custom element that provides a button to share content.\n * @documentation https://github.com/georapbox/web-share-element\n *\n * @tagname web-share - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {boolean} disabled - Indicates whether the button is disabled.\n * @property {string} shareUrl - The URL to share.\n * @property {string} shareTitle - The title to share.\n * @property {string} shareText - The text to share.\n * @property {File[]} shareFiles - The files to share.\n *\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {string} share-url - Reflects the shareUrl property.\n * @attribute {string} share-title - Reflects the shareTitle property.\n * @attribute {string} share-text - Reflects the shareText property.\n *\n * @slot button - The button to share content.\n * @slot button-content - The content of the button to share content.\n *\n * @csspart button - The button to share content.\n * @csspart button--disabled - The button to share content when disabled.\n *\n * @event web-share:success - Fired when the share operation is successful.\n * @event web-share:abort - Fired when the share operation is aborted.\n * @event web-share:error - Fired when the share operation fails.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method share - Instance method. Shares the shareable data taken from the element's properties.\n */\nclass WebShare extends HTMLElement {\n /** @type {Nullable} */\n #buttonSlot;\n\n /** @type {Nullable} */\n #buttonEl;\n\n /** @type {File[]} */\n #files = [];\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open', delegatesFocus: true });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n this.#buttonSlot = this.shadowRoot?.querySelector('slot[name=\"button\"]') || null;\n this.#buttonEl = this.#getButton();\n }\n\n static get observedAttributes() {\n return ['disabled'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'disabled' && oldValue !== newValue && this.#buttonEl) {\n this.#buttonEl.toggleAttribute('disabled', this.disabled);\n this.#buttonEl.setAttribute('aria-disabled', this.disabled.toString());\n\n if (this.#buttonEl.part && this.#buttonEl.part.contains('button')) {\n this.#buttonEl.part.toggle('button--disabled', this.disabled);\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('shareUrl');\n this.#upgradeProperty('shareTitle');\n this.#upgradeProperty('shareText');\n this.#upgradeProperty('shareFiles');\n this.#upgradeProperty('disabled');\n\n this.#buttonSlot?.addEventListener('slotchange', this.#handleSlotChange);\n this.#buttonEl?.addEventListener('click', this.#handleClick);\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#buttonSlot?.removeEventListener('slotchange', this.#handleSlotChange);\n this.#buttonEl?.removeEventListener('click', this.#handleClick);\n }\n\n /**\n * @type {boolean} - Indicates whether the button is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n set disabled(value) {\n this.toggleAttribute('disabled', !!value);\n }\n\n /**\n * @type {string} - The URL to share.\n * @attribute share-url - Reflects the shareUrl property.\n */\n get shareUrl() {\n return this.getAttribute('share-url') || '';\n }\n\n set shareUrl(value) {\n this.setAttribute('share-url', value);\n }\n\n /**\n * @type {string} - The title to share.\n * @attribute share-title - Reflects the shareTitle property.\n */\n get shareTitle() {\n return this.getAttribute('share-title') || '';\n }\n\n set shareTitle(value) {\n this.setAttribute('share-title', value);\n }\n\n /**\n * @type {string} - The text to share.\n * @attribute share-text - Reflects the shareText property.\n */\n get shareText() {\n return this.getAttribute('share-text') || '';\n }\n\n set shareText(value) {\n this.setAttribute('share-text', value);\n }\n\n /**\n * @type {File[]} - The files to share.\n */\n get shareFiles() {\n return this.#files;\n }\n\n set shareFiles(value) {\n if (Array.isArray(value) && value.length > 0) {\n this.#files = value;\n }\n }\n\n /**\n * Shares the shareable data taken from the element's properties.\n *\n * @returns {Promise} - A promise that resolves when the share operation is complete.\n */\n async share() {\n if (this.disabled) {\n return;\n }\n\n try {\n /** @type {ShareData} */\n const shareData = {};\n\n if (this.shareUrl) {\n shareData.url = this.shareUrl;\n }\n\n if (this.shareTitle) {\n shareData.title = this.shareTitle;\n }\n\n if (this.shareText) {\n shareData.text = this.shareText;\n }\n\n if (\n Array.isArray(this.shareFiles)\n && this.shareFiles.length > 0\n && navigator.canShare\n && navigator.canShare({ files: this.shareFiles })\n ) {\n shareData.files = this.shareFiles;\n }\n\n await navigator.share(shareData);\n\n this.dispatchEvent(new CustomEvent('web-share:success', {\n bubbles: true,\n composed: true,\n detail: { shareData }\n }));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.dispatchEvent(new CustomEvent('web-share:abort', {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n\n return;\n }\n\n this.dispatchEvent(new CustomEvent('web-share:error', {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n }\n\n /**\n * Handles the click event on the button.\n *\n * @param {any} evt - The event object.\n */\n #handleClick = evt => {\n evt.preventDefault();\n\n if (this.disabled) {\n return;\n }\n\n this.share();\n };\n\n /**\n * Handles the slotchange event on the button slot.\n *\n * @param {any} evt - The event object.\n */\n #handleSlotChange = evt => {\n if (evt.target && evt.target.name === 'button') {\n this.#buttonEl?.removeEventListener('click', this.#handleClick);\n this.#buttonEl = this.#getButton();\n\n if (this.#buttonEl) {\n this.#buttonEl.addEventListener('click', this.#handleClick);\n\n if (this.#buttonEl.nodeName !== 'BUTTON' && !this.#buttonEl.hasAttribute('role')) {\n this.#buttonEl.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Returns the button element from the button slot.\n *\n * @returns {Nullable} - The button element.\n */\n #getButton() {\n if (!this.#buttonSlot) {\n return null;\n }\n\n return this.#buttonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'button';\n }) || null;\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'shareUrl' | 'shareTitle' | 'shareText' | 'shareFiles' | 'disabled'} prop - The property name to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n static defineCustomElement(elementName = 'web-share') {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, WebShare);\n }\n }\n}\n\nexport { WebShare };\n","Object.defineProperty({},\"CapturePhoto\",{get:function(){return n},set:void 0,enumerable:!0,configurable:!0});let t=(t,e,i)=>(Number.isNaN(e)&&(e=0),Number.isNaN(i)&&(i=0),Math.min(Math.max(t,Math.min(e,i)),Math.max(e,i))),e=\"capture-photo\",i=`\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`,o=document.createElement(\"template\");o.innerHTML=`\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;class n extends HTMLElement{#t={};#e=null;#i=null;#o=null;#n=null;#a=null;#s=null;#r=null;#l=null;constructor(){super(),this.#t=this.getSupportedConstraints(),this.shadowRoot||this.attachShadow({mode:\"open\"}).appendChild(o.content.cloneNode(!0))}static get observedAttributes(){return[\"no-image\",\"facing-mode\",\"camera-resolution\",\"pan\",\"tilt\",\"zoom\"]}attributeChangedCallback(t,e,i){if(!this.isConnected)return;let o=this.getTrackCapabilities(),n=this.getTrackSettings();if(\"no-image\"===t&&e!==i&&this.#u(),\"facing-mode\"===t&&e!==i&&\"facingMode\"in this.#t){let t=[\"user\",\"environment\"].includes(this.facingMode||\"\");\"facingMode\"in n&&t&&(this.stopVideoStream(),this.startVideoStream())}if(\"camera-resolution\"===t&&e!==i&&\"string\"==typeof this.cameraResolution&&this.cameraResolution.trim().length>0){let[t=0,e=0]=this.cameraResolution.split(\"x\").map(t=>Number(t));if(t>0&&e>0&&\"width\"in o&&\"height\"in o){let i=!!(o.width?.min&&o.width?.max)&&t>=o?.width?.min&&t<=o?.width?.max,a=!!(o.height?.min&&o.height?.max)&&e>=o?.height?.min&&e<=o?.height?.max;\"width\"in n&&\"height\"in n&&i&&a&&(this.stopVideoStream(),this.startVideoStream())}}if(\"pan\"===t&&e!==i&&\"pan\"in this.#t){let t=!!(\"pan\"in o&&o.pan?.min&&o.pan?.max)&&this.pan>=o.pan.min&&this.pan<=o.pan.max;\"pan\"in n&&\"number\"==typeof this.pan&&t&&this.#h(\"pan\",this.pan)}if(\"tilt\"===t&&e!==i&&\"tilt\"in this.#t){let t=!!(\"tilt\"in o&&o.tilt?.min&&o.tilt?.max)&&this.tilt>=o.tilt.min&&this.tilt<=o.tilt.max;\"tilt\"in n&&\"number\"==typeof this.tilt&&t&&this.#h(\"tilt\",this.tilt)}if(\"zoom\"===t&&e!==i&&\"zoom\"in this.#t){let t=!!(\"zoom\"in o&&o.zoom?.min&&o.zoom?.max)&&this.zoom>=o.zoom.min&&this.zoom<=o.zoom.max;\"zoom\"in n&&\"number\"==typeof this.zoom&&t&&this.#h(\"zoom\",this.zoom)}}connectedCallback(){if(this.#d(\"autpoPlay\"),this.#d(\"noImage\"),this.#d(\"facingMode\"),this.#d(\"cameraResolution\"),this.#d(\"pan\"),this.#d(\"tilt\"),this.#d(\"zoom\"),this.#d(\"calculateFileSize\"),this.#i=this.shadowRoot?.querySelector(\"canvas\")||null,this.#o=this.shadowRoot?.getElementById(\"output\")||null,this.#n=this.shadowRoot?.querySelector(\"video\")||null,this.#a=this.shadowRoot?.querySelector('slot[name=\"capture-button\"]')||null,this.#s=this.#c(),this.#r=this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]')||null,this.#l=this.#m(),this.#n?.addEventListener(\"loadedmetadata\",this.#p),this.#a?.addEventListener(\"slotchange\",this.#g),this.#s?.addEventListener(\"click\",this.#b),this.#r?.addEventListener(\"slotchange\",this.#f),this.#l?.addEventListener(\"click\",this.#v),!n.isSupported())return this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:{name:\"NotSupportedError\",message:\"Not supported\"}}}));this.autoPlay&&this.startVideoStream()}disconnectedCallback(){this.stopVideoStream(),this.#l?.removeEventListener(\"click\",this.#v),this.#s?.removeEventListener(\"click\",this.#b),this.#n?.removeEventListener(\"canplay\",this.#p),this.#a?.removeEventListener(\"slotchange\",this.#g),this.#r?.removeEventListener(\"slotchange\",this.#f)}get autoPlay(){return this.hasAttribute(\"auto-play\")}set autoPlay(t){this.toggleAttribute(\"auto-play\",!!t)}get noImage(){return this.hasAttribute(\"no-image\")}set noImage(t){this.toggleAttribute(\"no-image\",!!t)}get facingMode(){return this.getAttribute(\"facing-mode\")||\"user\"}set facingMode(t){this.setAttribute(\"facing-mode\",t)}get cameraResolution(){return this.getAttribute(\"camera-resolution\")||\"\"}set cameraResolution(t){this.setAttribute(\"camera-resolution\",t)}get pan(){return Number(this.getAttribute(\"pan\"))||0}set pan(t){this.setAttribute(\"pan\",null!=t?t.toString():t)}get tilt(){return Number(this.getAttribute(\"tilt\"))||0}set tilt(t){this.setAttribute(\"tilt\",null!=t?t.toString():t)}get zoom(){return Number(this.getAttribute(\"zoom\"))||1}set zoom(t){this.setAttribute(\"zoom\",null!=t?t.toString():t)}get loading(){return this.hasAttribute(\"loading\")}get calculateFileSize(){return this.hasAttribute(\"calculate-file-size\")}set calculateFileSize(t){this.toggleAttribute(\"calculate-file-size\",!!t)}#v=t=>{t.preventDefault(),this.loading||(this.facingMode=\"user\"!==this.facingMode&&this.facingMode?\"user\":\"environment\")};#b=t=>{t.preventDefault(),this.capture()};#p=t=>{let i=t.target;i.play().then(()=>{this.dispatchEvent(new CustomEvent(`${e}:video-play`,{bubbles:!0,composed:!0,detail:{video:i}}))}).catch(t=>{this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}).finally(()=>{this.removeAttribute(\"loading\")})};#u(){this.#o&&Array.from(this.#o.childNodes).forEach(t=>t.remove())}#h(e,i){if(!this.#e||!e||!i)return;let[o]=this.#e.getVideoTracks(),n=this.getTrackCapabilities();e in this.getTrackSettings()&&o.applyConstraints({advanced:[{[e]:t(Number(i),n[e]?.min||1,n[e]?.max||1)}]})}#g=t=>{t.target?.name===\"capture-button\"&&(this.#s?.removeEventListener(\"click\",this.#b),this.#s=this.#c(),this.#s&&(this.#s.addEventListener(\"click\",this.#b),\"BUTTON\"===this.#s.nodeName||this.#s.hasAttribute(\"role\")||this.#s.setAttribute(\"role\",\"button\")))};#f=t=>{t.target?.name===\"facing-mode-button\"&&(this.#l?.removeEventListener(\"click\",this.#v),this.#l=this.#m(),this.#l&&(this.#l.addEventListener(\"click\",this.#v),\"BUTTON\"===this.#l.nodeName||this.#l.hasAttribute(\"role\")||this.#l.setAttribute(\"role\",\"button\")))};#m(){return this.#r&&this.#r.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"facing-mode-button\"===t.getAttribute(\"slot\"))||null}#c(){return this.#a&&this.#a.assignedElements({flatten:!0}).find(t=>\"BUTTON\"===t.nodeName||\"capture-button\"===t.getAttribute(\"slot\"))||null}#d(t){if(Object.prototype.hasOwnProperty.call(this,t)){let e=this[t];delete this[t],this[t]=e}}async startVideoStream(){if(!n.isSupported()||this.#e)return;this.setAttribute(\"loading\",\"\");let t={video:{facingMode:{ideal:this.facingMode||\"user\"},pan:!0,tilt:!0,zoom:!0},audio:!1};if(\"string\"==typeof this.cameraResolution&&this.cameraResolution.trim().length>0){let[e=0,i=0]=this.cameraResolution.split(\"x\").map(t=>Number(t));e>0&&i>0&&(t.video.width=e,t.video.height=i)}try{this.#e=await navigator.mediaDevices.getUserMedia(t),this.#n&&(this.#n.srcObject=this.#e),this.#h(\"pan\",this.pan),this.#h(\"tilt\",this.tilt),this.#h(\"zoom\",this.zoom);let e=this.getTrackSettings();\"facingMode\"in e&&this.#r&&(this.#r.hidden=!1)}catch(t){this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}finally{this.removeAttribute(\"loading\")}}stopVideoStream(){if(!this.#n||!this.#e)return;let[t]=this.#e.getVideoTracks();t?.stop(),this.#n.srcObject=null,this.#e=null}async capture(){if(!this.loading&&this.#i&&this.#n)try{let t=this.#i.getContext(\"2d\"),i=this.#n.videoWidth,o=this.#n.videoHeight;this.#i.width=i,this.#i.height=o,t?.drawImage(this.#n,0,0,i,o);let n=this.#i.toDataURL(\"image/png\");if(\"string\"==typeof n&&n.includes(\"data:image\")){if(!this.noImage){let t=new Image;t.src=n,t.width=i,t.height=o,t.setAttribute(\"part\",\"output-image\"),this.#u(),this.#o?.appendChild(t)}let t={dataURI:n,width:i,height:o};if(this.calculateFileSize)try{let e=await fetch(n),i=(await e.blob()).size;i&&(t.size=i)}catch(t){}this.dispatchEvent(new CustomEvent(`${e}:success`,{bubbles:!0,composed:!0,detail:t}))}}catch(t){this.dispatchEvent(new CustomEvent(`${e}:error`,{bubbles:!0,composed:!0,detail:{error:t}}))}}getSupportedConstraints(){return n.isSupported()&&navigator.mediaDevices.getSupportedConstraints()||{}}getTrackCapabilities(){if(!this.#e)return{};let[t]=this.#e.getVideoTracks();return t&&\"function\"==typeof t.getCapabilities&&t.getCapabilities()||{}}getTrackSettings(){if(!this.#e)return{};let[t]=this.#e.getVideoTracks();return t&&\"function\"==typeof t.getSettings&&t.getSettings()||{}}static isSupported(){return!!navigator.mediaDevices?.getUserMedia}static defineCustomElement(t=e){\"undefined\"==typeof window||window.customElements.get(t)||window.customElements.define(t,n)}}n.defineCustomElement();export{n as CapturePhoto};\n//# sourceMappingURL=capture-photo-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $c290816263f90981$exports = {};\n\n$parcel$export($c290816263f90981$exports, \"CapturePhoto\", function () { return $c290816263f90981$export$cc30a98fe3890794; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ /**\n * @typedef {Object} ExtendedMediaTrackCapabilities\n * @property {ULongRange} [width] - The width of the video track.\n * @property {ULongRange} [height] - The height of the video track.\n * @property {ULongRange} [pan] - The pan level of the camera.\n * @property {ULongRange} [tilt] - The tilt level of the camera.\n * @property {ULongRange} [zoom] - The zoom level of the camera.\n * @property {MediaTrackCapabilities} [nativeMediaTrackCapabilities] - The native track capabilities.\n */ /**\n * @typedef {Object} ExtendedMediaTrackConstraints\n * @property {MediaTrackConstraints & {pan: boolean, tilt: boolean, zoom: boolean}} video - The video constraints.\n * @property {MediaTrackConstraints | boolean} audio - The audio constraints.\n */ // @ts-check\n/**\n * Clamps number within the inclusive `min` and `max` bounds,\n * making sure it does not go beyond them on either side.\n * If `min` is greater than `max` the parameters are swapped to support inverted ranges.\n *\n * @param {number} value - The number to clamp.\n * @param {number} lower - The lower bound.\n * @param {number} upper - The upper bound.\n * @throws {TypeError} - If one or more of the arguments passed is not a number.\n * @returns {number} - The clamped number.\n * @example\n *\n * clamp(10, -5, 5);\n * // => 5\n *\n * clamp(-10, -5, 5);\n * // => -5\n *\n * clamp(-15, 0, 100);\n * // => 0\n *\n * clamp(120, 0, 100);\n * // => 100\n *\n * clamp(-5, NaN, 5); // If any of lower or upper bound are `NaN`, they will be converted to `0`.\n * // => 0\n *\n * clamp(120, 100, 0); // The order of lower and upper bounds is reversed (100 > 0)\n * // => 100\n */ const $02ad8beec419df62$export$7d15b64cf5a3a4c4 = (value, lower, upper)=>{\n if (Number.isNaN(lower)) lower = 0;\n if (Number.isNaN(upper)) upper = 0;\n return Math.min(Math.max(value, Math.min(lower, upper)), Math.max(lower, upper));\n};\n\n\nconst $c290816263f90981$var$COMPONENT_NAME = \"capture-photo\";\nconst $c290816263f90981$var$styles = /* css */ `\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`;\nconst $c290816263f90981$var$template = document.createElement(\"template\");\n$c290816263f90981$var$template.innerHTML = /* html */ `\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\n/**\n * @summary A custom element that implements the MediaDevices.getUserMedia() method of the MediaDevices interface to capture a photo in the browser.\n * @documentation https://github.com/georapbox/capture-photo-element\n *\n * @tagname capture-photo This is the default tag name, unless overridden by the `defineCustomElement` method.\n * @extends HTMLElement\n *\n * @property {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @property {boolean} noImage - Whether or not to show the captured image.\n * @property {string} facingMode - The facing mode of the camera.\n * @property {string} cameraResolution - The resolution of the camera.\n * @property {number} pan - The pan value of the camera.\n * @property {number} tilt - The tilt value of the camera.\n * @property {number} zoom - The zoom value of the camera.\n * @property {boolean} loading - Whether or not the video stream is loading.\n * @property {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n *\n * @atttribute {boolean} auto-play - Reflects the autoPlay property.\n * @atttribute {boolean} no-image - Reflects the noImage property.\n * @atttribute {string} facing-mode - Reflects the facingMode property.\n * @atttribute {string} camera-resolution - Reflects the cameraResolution property.\n * @atttribute {number} pan - Reflects the pan property.\n * @atttribute {number} tilt - Reflects the tilt property.\n * @atttribute {number} zoom - Reflects the zoom property.\n * @atttribute {boolean} loading - Reflects the loading property.\n * @atttribute {boolean} calculate-file-size - Reflects the calculateFileSize property.\n *\n * @slot capture-button - The capture button.\n * @slot capture-button-content - The capture button content.\n * @slot facing-mode-button - The facing mode button.\n * @slot facing-mode-button-content - The facing mode button content.\n * @slot actions - The actions container.\n * @slot - A default un-named slot to add content inside the component.\n *\n * @csspart video - The video element.\n * @csspart actions-container - The actions container.\n * @csspart capture-button - The capture button.\n * @csspart facing-mode-button - The facing mode button.\n * @csspart output-container - The output container.\n * @csspart output-image - The output image.\n *\n * @event capture-photo:video-play - Fires when the video stream is successfully playing.\n * @event capture-photo:success - Fires when the photo is successfully captured.\n * @event capture-photo:error - Fires when an error occurs.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method isSupported - Static method. Checks if the MediaDevices.getUserMedia() method is supported.\n * @method startVideoStream - Instance method. Starts the video stream.\n * @method stopVideoStream - Instance method. Stops the video stream.\n * @method capture - Instance method. Captures a photo.\n * @method getSupportedConstraints - Instance method. Gets the supported constraints.\n * @method getTrackCapabilities - Instance method. Gets the track capabilities.\n * @method getTrackSettings - Instance method. Gets the track settings.\n */ class $c290816263f90981$export$cc30a98fe3890794 extends HTMLElement {\n /** @type {MediaTrackSupportedConstraints | {}}*/ #supportedConstraints = {};\n /** @type {Nullable} */ #stream = null;\n /** @type {Nullable} */ #canvasElement = null;\n /** @type {Nullable} */ #outputElement = null;\n /** @type {Nullable} */ #videoElement = null;\n /** @type {Nullable} */ #captureButtonSlot = null;\n /** @type {Nullable} */ #captureButton = null;\n /** @type {Nullable} */ #facingModeButtonSlot = null;\n /** @type {Nullable} */ #facingModeButton = null;\n constructor(){\n super();\n this.#supportedConstraints = this.getSupportedConstraints();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($c290816263f90981$var$template.content.cloneNode(true));\n }\n }\n static get observedAttributes() {\n return [\n \"no-image\",\n \"facing-mode\",\n \"camera-resolution\",\n \"pan\",\n \"tilt\",\n \"zoom\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (!this.isConnected) return;\n /** @type {ExtendedMediaTrackCapabilities} */ const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n if (name === \"no-image\" && oldValue !== newValue) this.#emptyOutputElement();\n if (name === \"facing-mode\" && oldValue !== newValue && \"facingMode\" in this.#supportedConstraints) {\n const isValidFacingMode = [\n \"user\",\n \"environment\"\n ].includes(this.facingMode || \"\");\n if (\"facingMode\" in trackSettings && isValidFacingMode) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n if (name === \"camera-resolution\" && oldValue !== newValue) {\n if (typeof this.cameraResolution === \"string\" && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split(\"x\").map((x)=>Number(x));\n if (width > 0 && height > 0 && \"width\" in trackCapabilities && \"height\" in trackCapabilities) {\n const widthInAllowedRange = trackCapabilities.width?.min && trackCapabilities.width?.max ? width >= trackCapabilities?.width?.min && width <= trackCapabilities?.width?.max : false;\n const heightInAllowedRange = trackCapabilities.height?.min && trackCapabilities.height?.max ? height >= trackCapabilities?.height?.min && height <= trackCapabilities?.height?.max : false;\n if (\"width\" in trackSettings && \"height\" in trackSettings && widthInAllowedRange && heightInAllowedRange) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n }\n }\n if (name === \"pan\" && oldValue !== newValue && \"pan\" in this.#supportedConstraints) {\n const panInAllowedRange = \"pan\" in trackCapabilities && trackCapabilities.pan?.min && trackCapabilities.pan?.max ? this.pan >= trackCapabilities.pan.min && this.pan <= trackCapabilities.pan.max : false;\n if (\"pan\" in trackSettings && typeof this.pan === \"number\" && panInAllowedRange) this.#applyPTZ(\"pan\", this.pan);\n }\n if (name === \"tilt\" && oldValue !== newValue && \"tilt\" in this.#supportedConstraints) {\n const tiltInAllowedRange = \"tilt\" in trackCapabilities && trackCapabilities.tilt?.min && trackCapabilities.tilt?.max ? this.tilt >= trackCapabilities.tilt.min && this.tilt <= trackCapabilities.tilt.max : false;\n if (\"tilt\" in trackSettings && typeof this.tilt === \"number\" && tiltInAllowedRange) this.#applyPTZ(\"tilt\", this.tilt);\n }\n if (name === \"zoom\" && oldValue !== newValue && \"zoom\" in this.#supportedConstraints) {\n const zoomInAllowedRange = \"zoom\" in trackCapabilities && trackCapabilities.zoom?.min && trackCapabilities.zoom?.max ? this.zoom >= trackCapabilities.zoom.min && this.zoom <= trackCapabilities.zoom.max : false;\n if (\"zoom\" in trackSettings && typeof this.zoom === \"number\" && zoomInAllowedRange) this.#applyPTZ(\"zoom\", this.zoom);\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"autpoPlay\");\n this.#upgradeProperty(\"noImage\");\n this.#upgradeProperty(\"facingMode\");\n this.#upgradeProperty(\"cameraResolution\");\n this.#upgradeProperty(\"pan\");\n this.#upgradeProperty(\"tilt\");\n this.#upgradeProperty(\"zoom\");\n this.#upgradeProperty(\"calculateFileSize\");\n this.#canvasElement = this.shadowRoot?.querySelector(\"canvas\") || null;\n this.#outputElement = this.shadowRoot?.getElementById(\"output\") || null;\n this.#videoElement = this.shadowRoot?.querySelector(\"video\") || null;\n this.#captureButtonSlot = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null;\n this.#captureButton = this.#getCaptureButton();\n this.#facingModeButtonSlot = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null;\n this.#facingModeButton = this.#getFacingModeButton();\n this.#videoElement?.addEventListener(\"loadedmetadata\", this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.addEventListener(\"slotchange\", this.#onCaptureButtonSlotChange);\n this.#captureButton?.addEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#facingModeButtonSlot?.addEventListener(\"slotchange\", this.#onFacingModeButtonSlotChange);\n this.#facingModeButton?.addEventListener(\"click\", this.#onFacingModeButtonClick);\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported()) return this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: {\n name: \"NotSupportedError\",\n message: \"Not supported\"\n }\n }\n }));\n if (this.autoPlay) this.startVideoStream();\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.stopVideoStream();\n this.#facingModeButton?.removeEventListener(\"click\", this.#onFacingModeButtonClick);\n this.#captureButton?.removeEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#videoElement?.removeEventListener(\"canplay\", this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.removeEventListener(\"slotchange\", this.#onCaptureButtonSlotChange);\n this.#facingModeButtonSlot?.removeEventListener(\"slotchange\", this.#onFacingModeButtonSlotChange);\n }\n /**\n * @type {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @attribute auto-play - Reflects the autoPlay attribute.\n */ get autoPlay() {\n return this.hasAttribute(\"auto-play\");\n }\n set autoPlay(value) {\n this.toggleAttribute(\"auto-play\", !!value);\n }\n /**\n * @type {boolean} noImage - Whether or not to show the captured image.\n * @attribute no-image - Reflects the noImage attribute.\n */ get noImage() {\n return this.hasAttribute(\"no-image\");\n }\n set noImage(value) {\n this.toggleAttribute(\"no-image\", !!value);\n }\n /**\n * @type {string} facingMode - The facing mode of the camera.\n * @attribute facing-mode - Reflects the facingMode attribute.\n */ get facingMode() {\n return this.getAttribute(\"facing-mode\") || \"user\";\n }\n set facingMode(value) {\n this.setAttribute(\"facing-mode\", value);\n }\n /**\n * @type {string} cameraResolution - The resolution of the camera.\n * @attribute camera-resolution - Reflects the cameraResolution attribute.\n */ get cameraResolution() {\n return this.getAttribute(\"camera-resolution\") || \"\";\n }\n set cameraResolution(value) {\n this.setAttribute(\"camera-resolution\", value);\n }\n /**\n * @type {number} pan - The pan value of the camera.\n * @attribute pan - Reflects the pan attribute.\n */ get pan() {\n return Number(this.getAttribute(\"pan\")) || 0;\n }\n set pan(value) {\n this.setAttribute(\"pan\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} tilt - The tilt value of the camera.\n * @attribute tilt - Reflects the tilt attribute.\n */ get tilt() {\n return Number(this.getAttribute(\"tilt\")) || 0;\n }\n set tilt(value) {\n this.setAttribute(\"tilt\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} zoom - The zoom value of the camera.\n * @attribute zoom - Reflects the zoom attribute.\n */ get zoom() {\n return Number(this.getAttribute(\"zoom\")) || 1;\n }\n set zoom(value) {\n this.setAttribute(\"zoom\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} loading - Whether or not the video stream is loading.\n * @attribute loading - Reflects the loading attribute.\n */ get loading() {\n return this.hasAttribute(\"loading\");\n }\n /**\n * @type {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n * @attribute calculate-file-size - Reflects the calculateFileSize attribute.\n */ get calculateFileSize() {\n return this.hasAttribute(\"calculate-file-size\");\n }\n set calculateFileSize(value) {\n this.toggleAttribute(\"calculate-file-size\", !!value);\n }\n /**\n * Handles the click event of the facing mode button.\n *\n * @param {*} evt - The click event.\n */ #onFacingModeButtonClick = (evt)=>{\n evt.preventDefault();\n if (this.loading) return;\n this.facingMode = this.facingMode === \"user\" || !this.facingMode ? \"environment\" : \"user\";\n };\n /**\n * Handles the click event of the capture button.\n *\n * @param {*} evt - The click event.\n */ #onCapturePhotoButtonClick = (evt)=>{\n evt.preventDefault();\n this.capture();\n };\n /**\n * Handles the loadedmetadata event of the video element.\n *\n * @param {*} evt - The loadedmetadata event.\n */ #onVideoLoadedMetaData = (evt)=>{\n const video = evt.target;\n video.play().then(()=>{\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:video-play`, {\n bubbles: true,\n composed: true,\n detail: {\n video: video\n }\n }));\n }).catch(/** @param {Error} error */ (error)=>{\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }).finally(()=>{\n this.removeAttribute(\"loading\");\n });\n };\n /**\n * Removes all child nodes from the output element.\n */ #emptyOutputElement() {\n if (!this.#outputElement) return;\n Array.from(this.#outputElement.childNodes).forEach((node)=>node.remove());\n }\n /**\n * Applies the pan, tilt or zoom constraint.\n *\n * @param {'pan' | 'tilt' | 'zoom'} constraintName - The name of the constraint.\n * @param {number} constraintValue - The value of the constraint.\n */ #applyPTZ(constraintName, constraintValue) {\n if (!this.#stream || !constraintName || !constraintValue) return;\n const [track] = this.#stream.getVideoTracks();\n /** @type {ExtendedMediaTrackCapabilities} */ const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n if (constraintName in trackSettings) track.applyConstraints({\n advanced: [\n {\n [constraintName]: (0, $02ad8beec419df62$export$7d15b64cf5a3a4c4)(Number(constraintValue), trackCapabilities[constraintName]?.min || 1, trackCapabilities[constraintName]?.max || 1)\n }\n ]\n });\n }\n /**\n * Handles the slotchange event of the capture button slot.\n *\n * @param {*} evt - The slotchange event.\n */ #onCaptureButtonSlotChange = (evt)=>{\n if (evt.target?.name === \"capture-button\") {\n this.#captureButton?.removeEventListener(\"click\", this.#onCapturePhotoButtonClick);\n this.#captureButton = this.#getCaptureButton();\n if (this.#captureButton) {\n this.#captureButton.addEventListener(\"click\", this.#onCapturePhotoButtonClick);\n if (this.#captureButton.nodeName !== \"BUTTON\" && !this.#captureButton.hasAttribute(\"role\")) this.#captureButton.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Handles the slotchange event of the facing mode button slot.\n *\n * @param {*} evt - The slotchange event.\n */ #onFacingModeButtonSlotChange = (evt)=>{\n if (evt.target?.name === \"facing-mode-button\") {\n this.#facingModeButton?.removeEventListener(\"click\", this.#onFacingModeButtonClick);\n this.#facingModeButton = this.#getFacingModeButton();\n if (this.#facingModeButton) {\n this.#facingModeButton.addEventListener(\"click\", this.#onFacingModeButtonClick);\n if (this.#facingModeButton.nodeName !== \"BUTTON\" && !this.#facingModeButton.hasAttribute(\"role\")) this.#facingModeButton.setAttribute(\"role\", \"button\");\n }\n }\n };\n /**\n * Returns the facing mode button.\n *\n * @returns {Nullable}\n */ #getFacingModeButton() {\n if (!this.#facingModeButtonSlot) return null;\n return this.#facingModeButtonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"facing-mode-button\";\n }) || null;\n }\n /**\n * Returns the capture button.\n *\n * @returns {Nullable}\n */ #getCaptureButton() {\n if (!this.#captureButtonSlot) return null;\n return this.#captureButtonSlot.assignedElements({\n flatten: true\n }).find((el)=>{\n return el.nodeName === \"BUTTON\" || el.getAttribute(\"slot\") === \"capture-button\";\n }) || null;\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and\n * set a value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would\n * miss that property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'autpoPlay' | 'noImage' | 'facingMode' | 'cameraResolution' | 'pan' | 'tilt' | 'zoom' | 'calculateFileSize'} prop\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Starts the video stream.\n *\n * @returns Promise\n */ async startVideoStream() {\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported() || this.#stream) return;\n this.setAttribute(\"loading\", \"\");\n /** @type {ExtendedMediaTrackConstraints} */ const constraints = {\n video: {\n facingMode: {\n ideal: this.facingMode || \"user\"\n },\n pan: true,\n tilt: true,\n zoom: true\n },\n audio: false\n };\n if (typeof this.cameraResolution === \"string\" && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split(\"x\").map((x)=>Number(x));\n if (width > 0 && height > 0) {\n constraints.video.width = width;\n constraints.video.height = height;\n }\n }\n try {\n this.#stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (this.#videoElement) this.#videoElement.srcObject = this.#stream;\n this.#applyPTZ(\"pan\", this.pan);\n this.#applyPTZ(\"tilt\", this.tilt);\n this.#applyPTZ(\"zoom\", this.zoom);\n const trackSettings = this.getTrackSettings();\n if (\"facingMode\" in trackSettings && this.#facingModeButtonSlot) this.#facingModeButtonSlot.hidden = false;\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n } finally{\n this.removeAttribute(\"loading\");\n }\n }\n /**\n * Stops the video stream.\n */ stopVideoStream() {\n if (!this.#videoElement || !this.#stream) return;\n const [track] = this.#stream.getVideoTracks();\n track?.stop();\n this.#videoElement.srcObject = null;\n this.#stream = null;\n }\n /**\n * Captures a photo using the element's properties.\n *\n * @returns Promise\n */ async capture() {\n if (this.loading || !this.#canvasElement || !this.#videoElement) return;\n try {\n const ctx = this.#canvasElement.getContext(\"2d\");\n const width = this.#videoElement.videoWidth;\n const height = this.#videoElement.videoHeight;\n this.#canvasElement.width = width;\n this.#canvasElement.height = height;\n ctx?.drawImage(this.#videoElement, 0, 0, width, height);\n const dataURI = this.#canvasElement.toDataURL(\"image/png\");\n if (typeof dataURI === \"string\" && dataURI.includes(\"data:image\")) {\n if (!this.noImage) {\n const image = new Image();\n image.src = dataURI;\n image.width = width;\n image.height = height;\n image.setAttribute(\"part\", \"output-image\");\n this.#emptyOutputElement();\n this.#outputElement?.appendChild(image);\n }\n /** @type {{ dataURI: string, width: number, height: number, size?: number }} */ const eventDetail = {\n dataURI: dataURI,\n width: width,\n height: height\n };\n if (this.calculateFileSize) try {\n const file = await fetch(dataURI);\n const blob = await file.blob();\n const size = blob.size;\n if (size) eventDetail.size = size;\n } catch (err) {\n // Fail silently...\n }\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:success`, {\n bubbles: true,\n composed: true,\n detail: eventDetail\n }));\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$c290816263f90981$var$COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n }\n /**\n * Returns an object based on the `MediaTrackSupportedConstraints` dictionary,\n * whose member fields each specify one ofthe constrainable properties the user agent understands.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaDevices/getSupportedConstraints\n * @returns {MediaTrackSupportedConstraints | {}}\n */ getSupportedConstraints() {\n if (!$c290816263f90981$export$cc30a98fe3890794.isSupported()) return {};\n return navigator.mediaDevices.getSupportedConstraints() || {};\n }\n /**\n * Returns a `MediaTrackCapabilities` object which specifies the values or range of values\n * which each constrainable property, based upon the platform and user agent.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getCapabilities\n * @returns {MediaTrackCapabilities | {}}\n */ getTrackCapabilities() {\n if (!this.#stream) return {};\n const [track] = this.#stream.getVideoTracks();\n if (track && typeof track.getCapabilities === \"function\") return track.getCapabilities() || {};\n return {};\n }\n /**\n * Returns a `MediaTrackSettings` object containing the current values of each of\n * the constrainable properties for the current MediaStreamTrack.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getSettings\n * @returns {MediaTrackSettings | {}}\n */ getTrackSettings() {\n if (!this.#stream) return {};\n const [track] = this.#stream.getVideoTracks();\n if (track && typeof track.getSettings === \"function\") return track.getSettings() || {};\n return {};\n }\n /**\n * Checks if the `MediaDevices.getUserMedia()` method is supported.\n *\n * @returns {boolean}\n */ static isSupported() {\n return Boolean(navigator.mediaDevices?.getUserMedia);\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='capture-photo'] - The name of the custom element.\n * @example\n *\n * CapturePhoto.defineCustomElement('my-capture-photo');\n */ static defineCustomElement(elementName = $c290816263f90981$var$COMPONENT_NAME) {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $c290816263f90981$export$cc30a98fe3890794);\n }\n}\n\n\n(0, $c290816263f90981$export$cc30a98fe3890794).defineCustomElement();\n\n\nexport {$c290816263f90981$export$cc30a98fe3890794 as CapturePhoto};\n//# sourceMappingURL=capture-photo-defined.js.map\n","import { CapturePhoto } from './capture-photo.js';\n\nCapturePhoto.defineCustomElement();\n\nexport { CapturePhoto };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\n/**\n * @typedef {Object} ExtendedMediaTrackCapabilities\n * @property {ULongRange} [width] - The width of the video track.\n * @property {ULongRange} [height] - The height of the video track.\n * @property {ULongRange} [pan] - The pan level of the camera.\n * @property {ULongRange} [tilt] - The tilt level of the camera.\n * @property {ULongRange} [zoom] - The zoom level of the camera.\n * @property {MediaTrackCapabilities} [nativeMediaTrackCapabilities] - The native track capabilities.\n */\n\n/**\n * @typedef {Object} ExtendedMediaTrackConstraints\n * @property {MediaTrackConstraints & {pan: boolean, tilt: boolean, zoom: boolean}} video - The video constraints.\n * @property {MediaTrackConstraints | boolean} audio - The audio constraints.\n */\n\nimport { clamp } from './utils/clamp.js';\n\nconst COMPONENT_NAME = 'capture-photo';\n\nconst styles = /* css */`\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([hidden]),\n [hidden],\n ::slotted([hidden]) {\n display: none;\n }\n\n video {\n display: block;\n }\n\n #output:empty {\n display: none;\n }\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */`\n \n\n \n\n \n\n
\n \n \n \n\n \n\n \n
\n\n \n\n
\n`;\n\n/**\n * @summary A custom element that implements the MediaDevices.getUserMedia() method of the MediaDevices interface to capture a photo in the browser.\n * @documentation https://github.com/georapbox/capture-photo-element\n *\n * @tagname capture-photo This is the default tag name, unless overridden by the `defineCustomElement` method.\n * @extends HTMLElement\n *\n * @property {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @property {boolean} noImage - Whether or not to show the captured image.\n * @property {string} facingMode - The facing mode of the camera.\n * @property {string} cameraResolution - The resolution of the camera.\n * @property {number} pan - The pan value of the camera.\n * @property {number} tilt - The tilt value of the camera.\n * @property {number} zoom - The zoom value of the camera.\n * @property {boolean} loading - Whether or not the video stream is loading.\n * @property {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n *\n * @atttribute {boolean} auto-play - Reflects the autoPlay property.\n * @atttribute {boolean} no-image - Reflects the noImage property.\n * @atttribute {string} facing-mode - Reflects the facingMode property.\n * @atttribute {string} camera-resolution - Reflects the cameraResolution property.\n * @atttribute {number} pan - Reflects the pan property.\n * @atttribute {number} tilt - Reflects the tilt property.\n * @atttribute {number} zoom - Reflects the zoom property.\n * @atttribute {boolean} loading - Reflects the loading property.\n * @atttribute {boolean} calculate-file-size - Reflects the calculateFileSize property.\n *\n * @slot capture-button - The capture button.\n * @slot capture-button-content - The capture button content.\n * @slot facing-mode-button - The facing mode button.\n * @slot facing-mode-button-content - The facing mode button content.\n * @slot actions - The actions container.\n * @slot - A default un-named slot to add content inside the component.\n *\n * @csspart video - The video element.\n * @csspart actions-container - The actions container.\n * @csspart capture-button - The capture button.\n * @csspart facing-mode-button - The facing mode button.\n * @csspart output-container - The output container.\n * @csspart output-image - The output image.\n *\n * @event capture-photo:video-play - Fires when the video stream is successfully playing.\n * @event capture-photo:success - Fires when the photo is successfully captured.\n * @event capture-photo:error - Fires when an error occurs.\n *\n * @method defineCustomElement - Static method. Defines the custom element with the given name.\n * @method isSupported - Static method. Checks if the MediaDevices.getUserMedia() method is supported.\n * @method startVideoStream - Instance method. Starts the video stream.\n * @method stopVideoStream - Instance method. Stops the video stream.\n * @method capture - Instance method. Captures a photo.\n * @method getSupportedConstraints - Instance method. Gets the supported constraints.\n * @method getTrackCapabilities - Instance method. Gets the track capabilities.\n * @method getTrackSettings - Instance method. Gets the track settings.\n */\nclass CapturePhoto extends HTMLElement {\n /** @type {MediaTrackSupportedConstraints | {}}*/\n #supportedConstraints = {};\n\n /** @type {Nullable} */\n #stream = null;\n\n /** @type {Nullable} */\n #canvasElement = null;\n\n /** @type {Nullable} */\n #outputElement = null;\n\n /** @type {Nullable} */\n #videoElement = null;\n\n /** @type {Nullable} */\n #captureButtonSlot = null;\n\n /** @type {Nullable} */\n #captureButton = null;\n\n /** @type {Nullable} */\n #facingModeButtonSlot = null;\n\n /** @type {Nullable} */\n #facingModeButton = null;\n\n constructor() {\n super();\n\n this.#supportedConstraints = this.getSupportedConstraints();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n }\n\n static get observedAttributes() {\n return ['no-image', 'facing-mode', 'camera-resolution', 'pan', 'tilt', 'zoom'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (!this.isConnected) {\n return;\n }\n\n /** @type {ExtendedMediaTrackCapabilities} */\n const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n\n if (name === 'no-image' && oldValue !== newValue) {\n this.#emptyOutputElement();\n }\n\n if (name === 'facing-mode' && oldValue !== newValue && 'facingMode' in this.#supportedConstraints) {\n const isValidFacingMode = ['user', 'environment'].includes(this.facingMode || '');\n\n if ('facingMode' in trackSettings && isValidFacingMode) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n\n if (name === 'camera-resolution' && oldValue !== newValue) {\n if (typeof this.cameraResolution === 'string' && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split('x').map(x => Number(x));\n\n if (width > 0 && height > 0 && 'width' in trackCapabilities && 'height' in trackCapabilities) {\n const widthInAllowedRange = trackCapabilities.width?.min && trackCapabilities.width?.max\n ? width >= trackCapabilities?.width?.min && width <= trackCapabilities?.width?.max\n : false;\n\n const heightInAllowedRange = trackCapabilities.height?.min && trackCapabilities.height?.max\n ? height >= trackCapabilities?.height?.min && height <= trackCapabilities?.height?.max\n : false;\n\n if ('width' in trackSettings && 'height' in trackSettings && widthInAllowedRange && heightInAllowedRange) {\n this.stopVideoStream();\n this.startVideoStream();\n }\n }\n }\n }\n\n if (name === 'pan' && oldValue !== newValue && 'pan' in this.#supportedConstraints) {\n const panInAllowedRange = 'pan' in trackCapabilities && trackCapabilities.pan?.min && trackCapabilities.pan?.max\n ? this.pan >= trackCapabilities.pan.min && this.pan <= trackCapabilities.pan.max\n : false;\n\n if ('pan' in trackSettings && typeof this.pan === 'number' && panInAllowedRange) {\n this.#applyPTZ('pan', this.pan);\n }\n }\n\n if (name === 'tilt' && oldValue !== newValue && 'tilt' in this.#supportedConstraints) {\n const tiltInAllowedRange = 'tilt' in trackCapabilities && trackCapabilities.tilt?.min && trackCapabilities.tilt?.max\n ? this.tilt >= trackCapabilities.tilt.min && this.tilt <= trackCapabilities.tilt.max\n : false;\n\n if ('tilt' in trackSettings && typeof this.tilt === 'number' && tiltInAllowedRange) {\n this.#applyPTZ('tilt', this.tilt);\n }\n }\n\n if (name === 'zoom' && oldValue !== newValue && 'zoom' in this.#supportedConstraints) {\n const zoomInAllowedRange = 'zoom' in trackCapabilities && trackCapabilities.zoom?.min && trackCapabilities.zoom?.max\n ? this.zoom >= trackCapabilities.zoom.min && this.zoom <= trackCapabilities.zoom.max\n : false;\n\n if ('zoom' in trackSettings && typeof this.zoom === 'number' && zoomInAllowedRange) {\n this.#applyPTZ('zoom', this.zoom);\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('autpoPlay');\n this.#upgradeProperty('noImage');\n this.#upgradeProperty('facingMode');\n this.#upgradeProperty('cameraResolution');\n this.#upgradeProperty('pan');\n this.#upgradeProperty('tilt');\n this.#upgradeProperty('zoom');\n this.#upgradeProperty('calculateFileSize');\n\n this.#canvasElement = this.shadowRoot?.querySelector('canvas') || null;\n this.#outputElement = this.shadowRoot?.getElementById('output') || null;\n this.#videoElement = this.shadowRoot?.querySelector('video') || null;\n this.#captureButtonSlot = this.shadowRoot?.querySelector('slot[name=\"capture-button\"]') || null;\n this.#captureButton = this.#getCaptureButton();\n this.#facingModeButtonSlot = this.shadowRoot?.querySelector('slot[name=\"facing-mode-button\"]') || null;\n this.#facingModeButton = this.#getFacingModeButton();\n\n this.#videoElement?.addEventListener('loadedmetadata', this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.addEventListener('slotchange', this.#onCaptureButtonSlotChange);\n this.#captureButton?.addEventListener('click', this.#onCapturePhotoButtonClick);\n this.#facingModeButtonSlot?.addEventListener('slotchange', this.#onFacingModeButtonSlotChange);\n this.#facingModeButton?.addEventListener('click', this.#onFacingModeButtonClick);\n\n if (!CapturePhoto.isSupported()) {\n return this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: {\n name: 'NotSupportedError',\n message: 'Not supported'\n }\n }\n }));\n }\n\n if (this.autoPlay) {\n this.startVideoStream();\n }\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.stopVideoStream();\n this.#facingModeButton?.removeEventListener('click', this.#onFacingModeButtonClick);\n this.#captureButton?.removeEventListener('click', this.#onCapturePhotoButtonClick);\n this.#videoElement?.removeEventListener('canplay', this.#onVideoLoadedMetaData);\n this.#captureButtonSlot?.removeEventListener('slotchange', this.#onCaptureButtonSlotChange);\n this.#facingModeButtonSlot?.removeEventListener('slotchange', this.#onFacingModeButtonSlotChange);\n }\n\n /**\n * @type {boolean} autoPlay - Whether or not to start the video stream automatically.\n * @attribute auto-play - Reflects the autoPlay attribute.\n */\n get autoPlay() {\n return this.hasAttribute('auto-play');\n }\n\n set autoPlay(value) {\n this.toggleAttribute('auto-play', !!value);\n }\n\n /**\n * @type {boolean} noImage - Whether or not to show the captured image.\n * @attribute no-image - Reflects the noImage attribute.\n */\n get noImage() {\n return this.hasAttribute('no-image');\n }\n\n set noImage(value) {\n this.toggleAttribute('no-image', !!value);\n }\n\n /**\n * @type {string} facingMode - The facing mode of the camera.\n * @attribute facing-mode - Reflects the facingMode attribute.\n */\n get facingMode() {\n return this.getAttribute('facing-mode') || 'user';\n }\n\n set facingMode(value) {\n this.setAttribute('facing-mode', value);\n }\n\n /**\n * @type {string} cameraResolution - The resolution of the camera.\n * @attribute camera-resolution - Reflects the cameraResolution attribute.\n */\n get cameraResolution() {\n return this.getAttribute('camera-resolution') || '';\n }\n\n set cameraResolution(value) {\n this.setAttribute('camera-resolution', value);\n }\n\n /**\n * @type {number} pan - The pan value of the camera.\n * @attribute pan - Reflects the pan attribute.\n */\n get pan() {\n return Number(this.getAttribute('pan')) || 0;\n }\n\n set pan(value) {\n this.setAttribute('pan', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} tilt - The tilt value of the camera.\n * @attribute tilt - Reflects the tilt attribute.\n */\n get tilt() {\n return Number(this.getAttribute('tilt')) || 0;\n }\n\n set tilt(value) {\n this.setAttribute('tilt', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} zoom - The zoom value of the camera.\n * @attribute zoom - Reflects the zoom attribute.\n */\n get zoom() {\n return Number(this.getAttribute('zoom')) || 1;\n }\n\n set zoom(value) {\n this.setAttribute('zoom', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} loading - Whether or not the video stream is loading.\n * @attribute loading - Reflects the loading attribute.\n */\n get loading() {\n return this.hasAttribute('loading');\n }\n\n /**\n * @type {boolean} calculateFileSize - Whether or not to calculate the file size of the captured image.\n * @attribute calculate-file-size - Reflects the calculateFileSize attribute.\n */\n get calculateFileSize() {\n return this.hasAttribute('calculate-file-size');\n }\n\n set calculateFileSize(value) {\n this.toggleAttribute('calculate-file-size', !!value);\n }\n\n /**\n * Handles the click event of the facing mode button.\n *\n * @param {*} evt - The click event.\n */\n #onFacingModeButtonClick = evt => {\n evt.preventDefault();\n\n if (this.loading) {\n return;\n }\n\n this.facingMode = this.facingMode === 'user' || !this.facingMode ? 'environment' : 'user';\n };\n\n /**\n * Handles the click event of the capture button.\n *\n * @param {*} evt - The click event.\n */\n #onCapturePhotoButtonClick = evt => {\n evt.preventDefault();\n this.capture();\n };\n\n /**\n * Handles the loadedmetadata event of the video element.\n *\n * @param {*} evt - The loadedmetadata event.\n */\n #onVideoLoadedMetaData = evt => {\n const video = evt.target;\n\n video.play().then(() => {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:video-play`, {\n bubbles: true,\n composed: true,\n detail: { video }\n }));\n }).catch(/** @param {Error} error */error => {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }).finally(() => {\n this.removeAttribute('loading');\n });\n };\n\n /**\n * Removes all child nodes from the output element.\n */\n #emptyOutputElement() {\n if (!this.#outputElement) {\n return;\n }\n\n Array.from(this.#outputElement.childNodes).forEach(node => node.remove());\n }\n\n /**\n * Applies the pan, tilt or zoom constraint.\n *\n * @param {'pan' | 'tilt' | 'zoom'} constraintName - The name of the constraint.\n * @param {number} constraintValue - The value of the constraint.\n */\n #applyPTZ(constraintName, constraintValue) {\n if (!this.#stream || !constraintName || !constraintValue) {\n return;\n }\n\n const [track] = this.#stream.getVideoTracks();\n /** @type {ExtendedMediaTrackCapabilities} */\n const trackCapabilities = this.getTrackCapabilities();\n const trackSettings = this.getTrackSettings();\n\n if (constraintName in trackSettings) {\n track.applyConstraints({\n advanced: [{\n [constraintName]: clamp(Number(constraintValue), trackCapabilities[constraintName]?.min || 1, trackCapabilities[constraintName]?.max || 1)\n }]\n });\n }\n }\n\n /**\n * Handles the slotchange event of the capture button slot.\n *\n * @param {*} evt - The slotchange event.\n */\n #onCaptureButtonSlotChange = evt => {\n if (evt.target?.name === 'capture-button') {\n this.#captureButton?.removeEventListener('click', this.#onCapturePhotoButtonClick);\n this.#captureButton = this.#getCaptureButton();\n\n if (this.#captureButton) {\n this.#captureButton.addEventListener('click', this.#onCapturePhotoButtonClick);\n\n if (this.#captureButton.nodeName !== 'BUTTON' && !this.#captureButton.hasAttribute('role')) {\n this.#captureButton.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Handles the slotchange event of the facing mode button slot.\n *\n * @param {*} evt - The slotchange event.\n */\n #onFacingModeButtonSlotChange = evt => {\n if (evt.target?.name === 'facing-mode-button') {\n this.#facingModeButton?.removeEventListener('click', this.#onFacingModeButtonClick);\n this.#facingModeButton = this.#getFacingModeButton();\n\n if (this.#facingModeButton) {\n this.#facingModeButton.addEventListener('click', this.#onFacingModeButtonClick);\n\n if (this.#facingModeButton.nodeName !== 'BUTTON' && !this.#facingModeButton.hasAttribute('role')) {\n this.#facingModeButton.setAttribute('role', 'button');\n }\n }\n }\n };\n\n /**\n * Returns the facing mode button.\n *\n * @returns {Nullable}\n */\n #getFacingModeButton() {\n if (!this.#facingModeButtonSlot) {\n return null;\n }\n\n return this.#facingModeButtonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'facing-mode-button';\n }) || null;\n }\n\n /**\n * Returns the capture button.\n *\n * @returns {Nullable}\n */\n #getCaptureButton() {\n if (!this.#captureButtonSlot) {\n return null;\n }\n\n return this.#captureButtonSlot.assignedElements({ flatten: true }).find(el => {\n return el.nodeName === 'BUTTON' || el.getAttribute('slot') === 'capture-button';\n }) || null;\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and\n * set a value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would\n * miss that property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'autpoPlay' | 'noImage' | 'facingMode' | 'cameraResolution' | 'pan' | 'tilt' | 'zoom' | 'calculateFileSize'} prop\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Starts the video stream.\n *\n * @returns Promise\n */\n async startVideoStream() {\n if (!CapturePhoto.isSupported() || this.#stream) {\n return;\n }\n\n this.setAttribute('loading', '');\n\n /** @type {ExtendedMediaTrackConstraints} */\n const constraints = {\n video: {\n facingMode: {\n ideal: this.facingMode || 'user'\n },\n pan: true,\n tilt: true,\n zoom: true\n },\n audio: false\n };\n\n if (typeof this.cameraResolution === 'string' && this.cameraResolution.trim().length > 0) {\n const [width = 0, height = 0] = this.cameraResolution.split('x').map(x => Number(x));\n\n if (width > 0 && height > 0) {\n constraints.video.width = width;\n constraints.video.height = height;\n }\n }\n\n try {\n this.#stream = await navigator.mediaDevices.getUserMedia(constraints);\n\n if (this.#videoElement) {\n this.#videoElement.srcObject = this.#stream;\n }\n\n this.#applyPTZ('pan', this.pan);\n this.#applyPTZ('tilt', this.tilt);\n this.#applyPTZ('zoom', this.zoom);\n\n const trackSettings = this.getTrackSettings();\n\n if ('facingMode' in trackSettings && this.#facingModeButtonSlot) {\n this.#facingModeButtonSlot.hidden = false;\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n } finally {\n this.removeAttribute('loading');\n }\n }\n\n /**\n * Stops the video stream.\n */\n stopVideoStream() {\n if (!this.#videoElement || !this.#stream) {\n return;\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n track?.stop();\n this.#videoElement.srcObject = null;\n this.#stream = null;\n }\n\n /**\n * Captures a photo using the element's properties.\n *\n * @returns Promise\n */\n async capture() {\n if (this.loading || !this.#canvasElement || !this.#videoElement) {\n return;\n }\n\n try {\n const ctx = this.#canvasElement.getContext('2d');\n const width = this.#videoElement.videoWidth;\n const height = this.#videoElement.videoHeight;\n this.#canvasElement.width = width;\n this.#canvasElement.height = height;\n ctx?.drawImage(this.#videoElement, 0, 0, width, height);\n const dataURI = this.#canvasElement.toDataURL('image/png');\n\n if (typeof dataURI === 'string' && dataURI.includes('data:image')) {\n if (!this.noImage) {\n const image = new Image();\n image.src = dataURI;\n image.width = width;\n image.height = height;\n image.setAttribute('part', 'output-image');\n this.#emptyOutputElement();\n this.#outputElement?.appendChild(image);\n }\n\n /** @type {{ dataURI: string, width: number, height: number, size?: number }} */\n const eventDetail = { dataURI, width, height };\n\n if (this.calculateFileSize) {\n try {\n const file = await fetch(dataURI);\n const blob = await file.blob();\n const size = blob.size;\n\n if (size) {\n eventDetail.size = size;\n }\n } catch (err) {\n // Fail silently...\n }\n }\n\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:success`, {\n bubbles: true,\n composed: true,\n detail: eventDetail\n }));\n }\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}:error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n }\n\n /**\n * Returns an object based on the `MediaTrackSupportedConstraints` dictionary,\n * whose member fields each specify one ofthe constrainable properties the user agent understands.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaDevices/getSupportedConstraints\n * @returns {MediaTrackSupportedConstraints | {}}\n */\n getSupportedConstraints() {\n if (!CapturePhoto.isSupported()) {\n return {};\n }\n\n return navigator.mediaDevices.getSupportedConstraints() || {};\n }\n\n /**\n * Returns a `MediaTrackCapabilities` object which specifies the values or range of values\n * which each constrainable property, based upon the platform and user agent.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getCapabilities\n * @returns {MediaTrackCapabilities | {}}\n */\n getTrackCapabilities() {\n if (!this.#stream) {\n return {};\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n if (track && typeof track.getCapabilities === 'function') {\n return track.getCapabilities() || {};\n }\n\n return {};\n }\n\n /**\n * Returns a `MediaTrackSettings` object containing the current values of each of\n * the constrainable properties for the current MediaStreamTrack.\n *\n * @see https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/getSettings\n * @returns {MediaTrackSettings | {}}\n */\n getTrackSettings() {\n if (!this.#stream) {\n return {};\n }\n\n const [track] = this.#stream.getVideoTracks();\n\n if (track && typeof track.getSettings === 'function') {\n return track.getSettings() || {};\n }\n\n return {};\n }\n\n /**\n * Checks if the `MediaDevices.getUserMedia()` method is supported.\n *\n * @returns {boolean}\n */\n static isSupported() {\n return Boolean(navigator.mediaDevices?.getUserMedia);\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='capture-photo'] - The name of the custom element.\n * @example\n *\n * CapturePhoto.defineCustomElement('my-capture-photo');\n */\n static defineCustomElement(elementName = COMPONENT_NAME) {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, CapturePhoto);\n }\n }\n}\n\nexport { CapturePhoto };\n","// @ts-check\n\n/**\n * Clamps number within the inclusive `min` and `max` bounds,\n * making sure it does not go beyond them on either side.\n * If `min` is greater than `max` the parameters are swapped to support inverted ranges.\n *\n * @param {number} value - The number to clamp.\n * @param {number} lower - The lower bound.\n * @param {number} upper - The upper bound.\n * @throws {TypeError} - If one or more of the arguments passed is not a number.\n * @returns {number} - The clamped number.\n * @example\n *\n * clamp(10, -5, 5);\n * // => 5\n *\n * clamp(-10, -5, 5);\n * // => -5\n *\n * clamp(-15, 0, 100);\n * // => 0\n *\n * clamp(120, 0, 100);\n * // => 100\n *\n * clamp(-5, NaN, 5); // If any of lower or upper bound are `NaN`, they will be converted to `0`.\n * // => 0\n *\n * clamp(120, 100, 0); // The order of lower and upper bounds is reversed (100 > 0)\n * // => 100\n */\nexport const clamp = (value, lower, upper) => {\n if (Number.isNaN(lower)) {\n lower = 0;\n }\n\n if (Number.isNaN(upper)) {\n upper = 0;\n }\n\n return Math.min(Math.max(value, Math.min(lower, upper)), Math.max(lower, upper));\n};\n","Object.defineProperty({},\"ModalElement\",{get:function(){return t},set:void 0,enumerable:!0,configurable:!0});let e=document.createElement(\"template\");e.innerHTML=/* html */`\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */class t extends HTMLElement{/** @type {Nullable} */#e=null;/** @type {Nullable} */#t=null;/** @type {ReturnType | undefined} */#o=void 0;constructor(){if(super(),!this.shadowRoot){let t=this.attachShadow({mode:\"open\"});t.appendChild(e.content.cloneNode(!0))}this.shadowRoot&&(this.#e=this.shadowRoot.querySelector(\"dialog\"),this.#t=this.shadowRoot.querySelector('slot[name=\"footer\"]'))}static get observedAttributes(){return[\"open\",\"no-header\",\"no-animations\",\"no-close-button\"]}/**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */attributeChangedCallback(e,t,o){if(null!==this.#e){if(\"open\"===e&&t!==o&&(this.open?(this.#e.showModal(),document.body&&(document.body.style.overflowY=\"hidden\"),this.dispatchEvent(new CustomEvent(\"me-open\",{bubbles:!0,composed:!0,detail:{element:this}}))):this.#e.close()),\"no-header\"===e&&t!==o){/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__header\");null!==e&&(e.hidden=this.noHeader)}if(\"no-animations\"===e&&t!==o&&this.#e.classList.toggle(\"dialog--no-animations\",this.noAnimations),\"no-close-button\"===e&&t!==o){/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__close\");null!==e&&(e.hidden=this.noCloseButton)}}}/**\n * Lifecycle method that is called when the element is added to the DOM.\n */connectedCallback(){this.#i(\"open\"),this.#i(\"staticBackdrop\"),this.#i(\"noHeader\"),this.#i(\"noAnimations\"),this.#i(\"noCloseButton\"),this.#i(\"fullscreen\"),this.#e?.addEventListener(\"click\",this.#a),this.#e?.addEventListener(\"close\",this.#l),this.#e?.addEventListener(\"cancel\",this.#s),this.#e?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\",this.#n),this.#t?.addEventListener(\"slotchange\",this.#r)}/**\n * Lifecycle method that is called when the element is removed from the DOM.\n */disconnectedCallback(){this.#o&&clearTimeout(this.#o),this.#e?.addEventListener(\"click\",this.#a),this.#e?.removeEventListener(\"close\",this.#l),this.#e?.removeEventListener(\"cancel\",this.#s),this.#e?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\",this.#n),this.#t?.removeEventListener(\"slotchange\",this.#r)}/**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */get open(){return this.hasAttribute(\"open\")}set open(e){e?this.setAttribute(\"open\",\"\"):this.removeAttribute(\"open\")}/**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */get staticBackdrop(){return this.hasAttribute(\"static-backdrop\")}set staticBackdrop(e){e?this.setAttribute(\"static-backdrop\",\"\"):this.removeAttribute(\"static-backdrop\")}/**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */get noHeader(){return this.hasAttribute(\"no-header\")}set noHeader(e){e?this.setAttribute(\"no-header\",\"\"):this.removeAttribute(\"no-header\")}/**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */get noAnimations(){return this.hasAttribute(\"no-animations\")}set noAnimations(e){e?this.setAttribute(\"no-animations\",\"\"):this.removeAttribute(\"no-animations\")}/**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */get noCloseButton(){return this.hasAttribute(\"no-close-button\")}set noCloseButton(e){e?this.setAttribute(\"no-close-button\",\"\"):this.removeAttribute(\"no-close-button\")}/**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */get fullscreen(){return this.hasAttribute(\"fullscreen\")}set fullscreen(e){e?this.setAttribute(\"fullscreen\",\"\"):this.removeAttribute(\"fullscreen\")}/**\n * Applies a pulse effect on the dialog.\n */#d(){this.#o||(this.#e?.classList.add(\"dialog--pulse\"),this.#o=setTimeout(()=>{this.#e?.classList.remove(\"dialog--pulse\"),clearTimeout(this.#o),this.#o=void 0},300))}/**\n * Handles the close event of the dialog.\n */#l=()=>{// This is needed because the dialog element does not reset\n// the open property when the dialog is closed by the user.\nthis.open=!1,document.body&&(document.body.style.overflowY=\"\"),this.dispatchEvent(new CustomEvent(\"me-close\",{bubbles:!0,composed:!0,detail:{element:this}}))};/**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */#s=e=>{let t=this.#c(\"escape-key\");this.dispatchEvent(t),t.defaultPrevented&&(e.preventDefault(),this.noAnimations||this.#d())};/**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */#n=e=>{let t=this.#c(\"close-button\");this.dispatchEvent(t),t.defaultPrevented&&(e.preventDefault(),this.noAnimations||this.#d())};/**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */#a=e=>{if(e.target!==e.currentTarget)return;let t=this.#c(\"backdrop-click\");if(this.dispatchEvent(t),t.defaultPrevented||this.staticBackdrop){this.noAnimations||this.#d();return}this.#e?.close()};/**\n * Handles the slotchange event of the footer slot.\n */#r=()=>{if(null===this.#e)return;/** @type {Nullable} */let e=this.#e.querySelector(\".dialog__footer\");if(null===e)return;let t=this.#t?.assignedNodes(),o=!!t&&t.length>0;e.hidden=!o};/**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */#c(e){return new CustomEvent(\"me-request-close\",{bubbles:!0,composed:!0,cancelable:!0,detail:{reason:e,element:this}})}/**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */#i(e){if(Object.prototype.hasOwnProperty.call(this,e)){let t=this[e];delete this[e],this[e]=t}}/**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */show(){this.open||(this.open=!0)}/**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */hide(){this.open&&(this.open=!1)}/**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */static defineCustomElement(e=\"modal-element\"){\"undefined\"==typeof window||window.customElements.get(e)||window.customElements.define(e,t)}}t.defineCustomElement();export{t as ModalElement};//# sourceMappingURL=modal-element-defined.js.map\n\n//# sourceMappingURL=modal-element-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $180b6dcf923bafc7$exports = {};\n\n$parcel$export($180b6dcf923bafc7$exports, \"ModalElement\", function () { return $180b6dcf923bafc7$export$32589115725b904b; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ const $180b6dcf923bafc7$var$PULSE_ANIMATION_DURATION = 300;\nconst $180b6dcf923bafc7$var$template = document.createElement(\"template\");\n$180b6dcf923bafc7$var$template.innerHTML = /* html */ `\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;\n/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */ class $180b6dcf923bafc7$export$32589115725b904b extends HTMLElement {\n /** @type {Nullable} */ #dialogEl = null;\n /** @type {Nullable} */ #footerSlotEl = null;\n /** @type {ReturnType | undefined} */ #pulseAnimationTimeout = void 0;\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($180b6dcf923bafc7$var$template.content.cloneNode(true));\n }\n if (this.shadowRoot) {\n this.#dialogEl = this.shadowRoot.querySelector(\"dialog\");\n this.#footerSlotEl = this.shadowRoot.querySelector('slot[name=\"footer\"]');\n }\n }\n static get observedAttributes() {\n return [\n \"open\",\n \"no-header\",\n \"no-animations\",\n \"no-close-button\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (this.#dialogEl === null) return;\n if (name === \"open\" && oldValue !== newValue) {\n if (this.open) {\n this.#dialogEl.showModal();\n if (document.body) document.body.style.overflowY = \"hidden\";\n this.dispatchEvent(new CustomEvent(\"me-open\", {\n bubbles: true,\n composed: true,\n detail: {\n element: this\n }\n }));\n } else this.#dialogEl.close();\n }\n if (name === \"no-header\" && oldValue !== newValue) {\n /** @type {Nullable} */ const headerEl = this.#dialogEl.querySelector(\".dialog__header\");\n if (headerEl !== null) headerEl.hidden = this.noHeader;\n }\n if (name === \"no-animations\" && oldValue !== newValue) this.#dialogEl.classList.toggle(\"dialog--no-animations\", this.noAnimations);\n if (name === \"no-close-button\" && oldValue !== newValue) {\n /** @type {Nullable} */ const closeBtnEl = this.#dialogEl.querySelector(\".dialog__close\");\n if (closeBtnEl !== null) closeBtnEl.hidden = this.noCloseButton;\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"open\");\n this.#upgradeProperty(\"staticBackdrop\");\n this.#upgradeProperty(\"noHeader\");\n this.#upgradeProperty(\"noAnimations\");\n this.#upgradeProperty(\"noCloseButton\");\n this.#upgradeProperty(\"fullscreen\");\n this.#dialogEl?.addEventListener(\"click\", this.#handleDialogClick);\n this.#dialogEl?.addEventListener(\"close\", this.#handleDialogClose);\n this.#dialogEl?.addEventListener(\"cancel\", this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.addEventListener(\"submit\", this.#handleCloseButtonClick);\n this.#footerSlotEl?.addEventListener(\"slotchange\", this.#handleFooterSlotChange);\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#pulseAnimationTimeout && clearTimeout(this.#pulseAnimationTimeout);\n this.#dialogEl?.addEventListener(\"click\", this.#handleDialogClick);\n this.#dialogEl?.removeEventListener(\"close\", this.#handleDialogClose);\n this.#dialogEl?.removeEventListener(\"cancel\", this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.removeEventListener(\"submit\", this.#handleCloseButtonClick);\n this.#footerSlotEl?.removeEventListener(\"slotchange\", this.#handleFooterSlotChange);\n }\n /**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */ get open() {\n return this.hasAttribute(\"open\");\n }\n set open(value) {\n if (value) this.setAttribute(\"open\", \"\");\n else this.removeAttribute(\"open\");\n }\n /**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */ get staticBackdrop() {\n return this.hasAttribute(\"static-backdrop\");\n }\n set staticBackdrop(value) {\n if (value) this.setAttribute(\"static-backdrop\", \"\");\n else this.removeAttribute(\"static-backdrop\");\n }\n /**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */ get noHeader() {\n return this.hasAttribute(\"no-header\");\n }\n set noHeader(value) {\n if (value) this.setAttribute(\"no-header\", \"\");\n else this.removeAttribute(\"no-header\");\n }\n /**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */ get noAnimations() {\n return this.hasAttribute(\"no-animations\");\n }\n set noAnimations(value) {\n if (value) this.setAttribute(\"no-animations\", \"\");\n else this.removeAttribute(\"no-animations\");\n }\n /**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */ get noCloseButton() {\n return this.hasAttribute(\"no-close-button\");\n }\n set noCloseButton(value) {\n if (value) this.setAttribute(\"no-close-button\", \"\");\n else this.removeAttribute(\"no-close-button\");\n }\n /**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */ get fullscreen() {\n return this.hasAttribute(\"fullscreen\");\n }\n set fullscreen(value) {\n if (value) this.setAttribute(\"fullscreen\", \"\");\n else this.removeAttribute(\"fullscreen\");\n }\n /**\n * Applies a pulse effect on the dialog.\n */ #applyPulseEffectOnDialog() {\n if (this.#pulseAnimationTimeout) return;\n this.#dialogEl?.classList.add(\"dialog--pulse\");\n this.#pulseAnimationTimeout = setTimeout(()=>{\n this.#dialogEl?.classList.remove(\"dialog--pulse\");\n clearTimeout(this.#pulseAnimationTimeout);\n this.#pulseAnimationTimeout = void 0;\n }, $180b6dcf923bafc7$var$PULSE_ANIMATION_DURATION);\n }\n /**\n * Handles the close event of the dialog.\n */ #handleDialogClose = ()=>{\n // This is needed because the dialog element does not reset\n // the open property when the dialog is closed by the user.\n this.open = false;\n if (document.body) document.body.style.overflowY = \"\";\n this.dispatchEvent(new CustomEvent(\"me-close\", {\n bubbles: true,\n composed: true,\n detail: {\n element: this\n }\n }));\n };\n /**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */ #handleDialogCancel = (evt)=>{\n const requestCloseEvent = this.#createRequestCloseEvent(\"escape-key\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n /**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */ #handleCloseButtonClick = (evt)=>{\n const requestCloseEvent = this.#createRequestCloseEvent(\"close-button\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n /**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */ #handleDialogClick = (evt)=>{\n if (evt.target !== evt.currentTarget) return;\n const requestCloseEvent = this.#createRequestCloseEvent(\"backdrop-click\");\n this.dispatchEvent(requestCloseEvent);\n if (requestCloseEvent.defaultPrevented || this.staticBackdrop) {\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n return;\n }\n this.#dialogEl?.close();\n };\n /**\n * Handles the slotchange event of the footer slot.\n */ #handleFooterSlotChange = ()=>{\n if (this.#dialogEl === null) return;\n /** @type {Nullable} */ const footerEl = this.#dialogEl.querySelector(\".dialog__footer\");\n if (footerEl === null) return;\n const footerSlotNodes = this.#footerSlotEl?.assignedNodes();\n const hasFooterSlotNodes = footerSlotNodes ? footerSlotNodes.length > 0 : false;\n footerEl.hidden = !hasFooterSlotNodes;\n };\n /**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */ #createRequestCloseEvent(reason) {\n return new CustomEvent(\"me-request-close\", {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n reason: reason,\n element: this\n }\n });\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */ show() {\n if (this.open) return;\n this.open = true;\n }\n /**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */ hide() {\n if (!this.open) return;\n this.open = false;\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */ static defineCustomElement(elementName = \"modal-element\") {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $180b6dcf923bafc7$export$32589115725b904b);\n }\n}\n\n\n(0, $180b6dcf923bafc7$export$32589115725b904b).defineCustomElement();\n\n\nexport {$180b6dcf923bafc7$export$32589115725b904b as ModalElement};\n//# sourceMappingURL=modal-element-defined.js.map\n","import { ModalElement } from './modal-element.js';\n\nModalElement.defineCustomElement();\n\nexport { ModalElement };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\nconst PULSE_ANIMATION_DURATION = 300;\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /* html */`\n \n\n \n
\n
\n \n\n
\n \n
\n
\n\n \n\n
\n \n
\n
\n
\n`;\n\n/**\n * @summary A custom element that renders a modal dialog.\n * @extends HTMLElement\n *\n * @property {boolean} open - Determines if the modal is open or not.\n * @property {boolean} staticBackdrop - Determines if the modal should close when the backdrop is clicked.\n * @property {boolean} noHeader - Determines if the modal should have a header or not.\n * @property {boolean} noAnimations - Determines if the modal should have animations or not when opening and closing.\n * @property {boolean} noCloseButton - Determines if the modal should have a default close button or not.\n * @property {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @attribute {boolean} open - Determines if the modal is open or not.\n * @attribute {boolean} static-backdrop - Determines if the modal should close when the backdrop is clicked.\n * @attribute {boolean} no-header - Determines if the modal should have a header or not.\n * @attribute {boolean} no-animations - Determines if the modal should have animations or not when opening and closing.\n * @attribute {boolean} no-close-button - Determines if the modal should have a default close button or not.\n * @attribute {boolean} fullscreen - Determines if the modal should be fullscreen or not.\n *\n * @slot - The modal's main content (default/unnamed slot).\n * @slot header - The modal's header content, usually a title.\n * @slot footer - The modals' footer content. Usually used for buttons or other actions.\n * @slot close - The content of the close button that appears in the modal's header.\n *\n * @cssproperty --me-width - The width of the modal. Default is 32rem.\n * @cssproperty --me-height - The height of the modal. Default is fit-content.\n * @cssproperty --me-border-color - The border color of the modal. Default is initial.\n * @cssproperty --me-border-style - The border style of the modal. Default is solid.\n * @cssproperty --me-border-width - The border width of the modal. Default is initial.\n * @cssproperty --me-border-radius - The border radius of the modal. Default is 0.\n * @cssproperty --me-box-shadow - The box shadow of the modal. Default is none.\n * @cssproperty --me-background-color - The background color of the modal. Default is canvas.\n * @cssproperty --me-header-spacing - The spacing of the header. Default is 1rem.\n * @cssproperty --me-body-spacing - The spacing of the body. Default is 1rem.\n * @cssproperty --me-footer-spacing - The spacing of the footer. Default is 1rem.\n * @cssproperty --me-header-background-color - The background color of the header. Default is transparent.\n * @cssproperty --me-body-background-color - The background color of the body. Default is transparent.\n * @cssproperty --me-footer-background-color - The background color of the footer. Default is transparent.\n * @cssproperty --me-close-border-radius - The border radius of the close button. Default is 0.\n * @cssproperty --me-close-background-color - The background color of the close button. Default is transparent.\n * @cssproperty --me-backdrop-background - The background shorthand property of the backdrop. Default is rgba(0, 0, 0, 0.5).\n * @cssproperty --me-backdrop-filter - The backdrop filter property of the backdrop. Default is none.\n *\n * @csspart base - The base wrapper of the modal.\n * @csspart panel - The panel wrapper of the modal.\n * @csspart header - The header wrapper of the modal.\n * @csspart title - The title wrapper of the modal.\n * @csspart body - The body wrapper of the modal.\n * @csspart footer - The footer wrapper of the modal.\n * @csspart close - The close button of the modal.\n *\n * @fires me-open - Dispatched when the modal is opened.\n * @fires me-close - Dispatched when the modal is closed.\n * @fires me-request-close - Dispatched when the modal is about to close.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method show - Instance method. Opens the modal if it is closed, otherwise does nothing.\n * @method hide - Instance method. Closes the modal if it is open, otherwise does nothing.\n *\n * @tagname modal-element - This is the default tag name, unless overridden by the `defineCustomElement` method.\n */\nclass ModalElement extends HTMLElement {\n /** @type {Nullable} */\n #dialogEl = null;\n\n /** @type {Nullable} */\n #footerSlotEl = null;\n\n /** @type {ReturnType | undefined} */\n #pulseAnimationTimeout = void 0;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n if (this.shadowRoot) {\n this.#dialogEl = this.shadowRoot.querySelector('dialog');\n this.#footerSlotEl = this.shadowRoot.querySelector('slot[name=\"footer\"]');\n }\n }\n\n static get observedAttributes() {\n return ['open', 'no-header', 'no-animations', 'no-close-button'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (this.#dialogEl === null) {\n return;\n }\n\n if (name === 'open' && oldValue !== newValue) {\n if (this.open) {\n this.#dialogEl.showModal();\n\n if (document.body) {\n document.body.style.overflowY = 'hidden';\n }\n\n this.dispatchEvent(new CustomEvent('me-open', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n }));\n } else {\n this.#dialogEl.close();\n }\n }\n\n if (name === 'no-header' && oldValue !== newValue) {\n /** @type {Nullable} */\n const headerEl = this.#dialogEl.querySelector('.dialog__header');\n\n if (headerEl !== null) {\n headerEl.hidden = this.noHeader;\n }\n }\n\n if (name === 'no-animations' && oldValue !== newValue) {\n this.#dialogEl.classList.toggle('dialog--no-animations', this.noAnimations);\n }\n\n if (name === 'no-close-button' && oldValue !== newValue) {\n /** @type {Nullable} */\n const closeBtnEl = this.#dialogEl.querySelector('.dialog__close');\n\n if (closeBtnEl !== null) {\n closeBtnEl.hidden = this.noCloseButton;\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('open');\n this.#upgradeProperty('staticBackdrop');\n this.#upgradeProperty('noHeader');\n this.#upgradeProperty('noAnimations');\n this.#upgradeProperty('noCloseButton');\n this.#upgradeProperty('fullscreen');\n\n this.#dialogEl?.addEventListener('click', this.#handleDialogClick);\n this.#dialogEl?.addEventListener('close', this.#handleDialogClose);\n this.#dialogEl?.addEventListener('cancel', this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.addEventListener('submit', this.#handleCloseButtonClick);\n this.#footerSlotEl?.addEventListener('slotchange', this.#handleFooterSlotChange);\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#pulseAnimationTimeout && clearTimeout(this.#pulseAnimationTimeout);\n this.#dialogEl?.addEventListener('click', this.#handleDialogClick);\n this.#dialogEl?.removeEventListener('close', this.#handleDialogClose);\n this.#dialogEl?.removeEventListener('cancel', this.#handleDialogCancel);\n this.#dialogEl?.querySelector('form[method=\"dialog\"]')?.removeEventListener('submit', this.#handleCloseButtonClick);\n this.#footerSlotEl?.removeEventListener('slotchange', this.#handleFooterSlotChange);\n }\n\n /**\n * Deternimes if the modal is open or not.\n *\n * @type {boolean} - True if the modal is open, otherwise false.\n * @default false\n * @attribute open - Reflects the open property.\n */\n get open() {\n return this.hasAttribute('open');\n }\n\n set open(value) {\n if (value) {\n this.setAttribute('open', '');\n } else {\n this.removeAttribute('open');\n }\n }\n\n /**\n * Determines if the modal should close when the backdrop is clicked.\n *\n * @type {boolean} - True if the modal should close when the backdrop is clicked, otherwise false.\n * @default false\n * @attribute static-backdrop - Reflects the staticBackdrop property.\n */\n get staticBackdrop() {\n return this.hasAttribute('static-backdrop');\n }\n\n set staticBackdrop(value) {\n if (value) {\n this.setAttribute('static-backdrop', '');\n } else {\n this.removeAttribute('static-backdrop');\n }\n }\n\n /**\n * Determines if the modal should have a header or not.\n *\n * @type {boolean} - True if the modal should have a header, otherwise false.\n * @default false\n * @attribute no-header - Reflects the noHeader property.\n */\n get noHeader() {\n return this.hasAttribute('no-header');\n }\n\n set noHeader(value) {\n if (value) {\n this.setAttribute('no-header', '');\n } else {\n this.removeAttribute('no-header');\n }\n }\n\n /**\n * Determines if the modal should have animations or not when opening and closing.\n *\n * @type {boolean} - True if the modal should have animations, otherwise false.\n * @default false\n * @attribute no-animations - Reflects the noAnimations property.\n */\n get noAnimations() {\n return this.hasAttribute('no-animations');\n }\n\n set noAnimations(value) {\n if (value) {\n this.setAttribute('no-animations', '');\n } else {\n this.removeAttribute('no-animations');\n }\n }\n\n /**\n * Determines if the modal should have a default close button or not.\n *\n * @type {boolean} - True if the modal should have a close button, otherwise false.\n * @default false\n * @attribute no-close-button - Reflects the noCloseButton property.\n */\n get noCloseButton() {\n return this.hasAttribute('no-close-button');\n }\n\n set noCloseButton(value) {\n if (value) {\n this.setAttribute('no-close-button', '');\n } else {\n this.removeAttribute('no-close-button');\n }\n }\n\n /**\n * Determines if the modal should be fullscreen or not.\n *\n * @type {boolean} - True if the modal should be fullscreen, otherwise false.\n * @default false\n * @attribute fullscreen - Reflects the fullscreen property.\n */\n get fullscreen() {\n return this.hasAttribute('fullscreen');\n }\n\n set fullscreen(value) {\n if (value) {\n this.setAttribute('fullscreen', '');\n } else {\n this.removeAttribute('fullscreen');\n }\n }\n\n /**\n * Applies a pulse effect on the dialog.\n */\n #applyPulseEffectOnDialog() {\n if (this.#pulseAnimationTimeout) {\n return;\n }\n\n this.#dialogEl?.classList.add('dialog--pulse');\n\n this.#pulseAnimationTimeout = setTimeout(() => {\n this.#dialogEl?.classList.remove('dialog--pulse');\n clearTimeout(this.#pulseAnimationTimeout);\n this.#pulseAnimationTimeout = void 0;\n }, PULSE_ANIMATION_DURATION);\n }\n\n /**\n * Handles the close event of the dialog.\n */\n #handleDialogClose = () => {\n // This is needed because the dialog element does not reset\n // the open property when the dialog is closed by the user.\n this.open = false;\n\n if (document.body) {\n document.body.style.overflowY = '';\n }\n\n this.dispatchEvent(new CustomEvent('me-close', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n }));\n };\n\n /**\n * Handles the cancel event of the dialog.\n * This event is fired when the user presses the escape key.\n *\n * @param {Event} evt - The cancel event.\n */\n #handleDialogCancel = evt => {\n const requestCloseEvent = this.#createRequestCloseEvent('escape-key');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n\n /**\n * Handles the click event of the close button.\n *\n * @param {Event} evt - The click event.\n */\n #handleCloseButtonClick = evt => {\n const requestCloseEvent = this.#createRequestCloseEvent('close-button');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented) {\n evt.preventDefault();\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n }\n };\n\n /**\n * Handles the click event of the dialog.\n *\n * @param {MouseEvent} evt - The click event.\n */\n #handleDialogClick = evt => {\n if (evt.target !== evt.currentTarget) {\n return;\n }\n\n const requestCloseEvent = this.#createRequestCloseEvent('backdrop-click');\n\n this.dispatchEvent(requestCloseEvent);\n\n if (requestCloseEvent.defaultPrevented || this.staticBackdrop) {\n !this.noAnimations && this.#applyPulseEffectOnDialog();\n return;\n }\n\n this.#dialogEl?.close();\n };\n\n /**\n * Handles the slotchange event of the footer slot.\n */\n #handleFooterSlotChange = () => {\n if (this.#dialogEl === null) {\n return;\n }\n\n /** @type {Nullable} */\n const footerEl = this.#dialogEl.querySelector('.dialog__footer');\n\n if (footerEl === null) {\n return;\n }\n\n const footerSlotNodes = this.#footerSlotEl?.assignedNodes();\n const hasFooterSlotNodes = footerSlotNodes ? footerSlotNodes.length > 0 : false;\n\n footerEl.hidden = !hasFooterSlotNodes;\n };\n\n /**\n * Creates a request close event.\n *\n * @param {'close-button' | 'escape-key' | 'backdrop-click'} reason - The reason that the modal is about to close.\n */\n #createRequestCloseEvent(reason) {\n return new CustomEvent('me-request-close', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n reason,\n element: this\n }\n });\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'open' | 'staticBackdrop' | 'noHeader' | 'noAnimations' | 'noCloseButton' | 'fullscreen'} prop - The property to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Opens the modal if it is closed, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.show();\n */\n show() {\n if (this.open) {\n return;\n }\n\n this.open = true;\n }\n\n /**\n * Closes the modal if it is open, otherwise does nothing.\n * Make sure that the custom element is defined before calling this method.\n *\n * @example\n * const modal = document.querySelector('modal-element');\n * modal.hide();\n */\n hide() {\n if (!this.open) {\n return;\n }\n\n this.open = false;\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='modal-element']\n * @example\n * ModalElement.defineCustomElement('my-modal');\n */\n static defineCustomElement(elementName = 'modal-element') {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, ModalElement);\n }\n }\n}\n\nexport { ModalElement };\n","Object.defineProperty({},\"FilesDropzone\",{get:function(){return m},set:void 0,enumerable:!0,configurable:!0});let e=new Map([[\"aac\",\"audio/aac\"],[\"abw\",\"application/x-abiword\"],[\"arc\",\"application/x-freearc\"],[\"avif\",\"image/avif\"],[\"avi\",\"video/x-msvideo\"],[\"azw\",\"application/vnd.amazon.ebook\"],[\"bin\",\"application/octet-stream\"],[\"bmp\",\"image/bmp\"],[\"bz\",\"application/x-bzip\"],[\"bz2\",\"application/x-bzip2\"],[\"cda\",\"application/x-cdf\"],[\"csh\",\"application/x-csh\"],[\"css\",\"text/css\"],[\"csv\",\"text/csv\"],[\"doc\",\"application/msword\"],[\"docx\",\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"],[\"eot\",\"application/vnd.ms-fontobject\"],[\"epub\",\"application/epub+zip\"],[\"gz\",\"application/gzip\"],[\"gif\",\"image/gif\"],[\"heic\",\"image/heic\"],[\"heif\",\"image/heif\"],[\"htm\",\"text/html\"],[\"html\",\"text/html\"],[\"ico\",\"image/vnd.microsoft.icon\"],[\"ics\",\"text/calendar\"],[\"jar\",\"application/java-archive\"],[\"jpeg\",\"image/jpeg\"],[\"jpg\",\"image/jpeg\"],[\"jxl\",\"image/jxl\"],[\"js\",\"text/javascript\"],[\"json\",\"application/json\"],[\"jsonld\",\"application/ld+json\"],[\"markdown\",\"text/markdown\"],[\"md\",\"text/markdown\"],[\"mid\",\"audio/midi\"],[\"midi\",\"audio/midi\"],[\"mjs\",\"text/javascript\"],[\"mp3\",\"audio/mpeg\"],[\"mp4\",\"video/mp4\"],[\"mpeg\",\"video/mpeg\"],[\"mpkg\",\"application/vnd.apple.installer+xml\"],[\"odp\",\"application/vnd.oasis.opendocument.presentation\"],[\"ods\",\"application/vnd.oasis.opendocument.spreadsheet\"],[\"odt\",\"application/vnd.oasis.opendocument.text\"],[\"oga\",\"audio/ogg\"],[\"ogv\",\"video/ogg\"],[\"ogx\",\"application/ogg\"],[\"opus\",\"audio/opus\"],[\"otf\",\"font/otf\"],[\"png\",\"image/png\"],[\"pdf\",\"application/pdf\"],[\"php\",\"application/x-httpd-php\"],[\"ppt\",\"application/vnd.ms-powerpoint\"],[\"pptx\",\"application/vnd.openxmlformats-officedocument.presentationml.presentation\"],[\"rar\",\"application/vnd.rar\"],[\"rtf\",\"application/rtf\"],[\"sh\",\"application/x-sh\"],[\"svg\",\"image/svg+xml\"],[\"swf\",\"application/x-shockwave-flash\"],[\"tar\",\"application/x-tar\"],[\"tif\",\"image/tiff\"],[\"tiff\",\"image/tiff\"],[\"ts\",\"video/mp2t\"],[\"ttf\",\"font/ttf\"],[\"txt\",\"text/plain\"],[\"vsd\",\"application/vnd.visio\"],[\"wav\",\"audio/wav\"],[\"weba\",\"audio/webm\"],[\"webm\",\"video/webm\"],[\"webp\",\"image/webp\"],[\"woff\",\"font/woff\"],[\"woff2\",\"font/woff2\"],[\"xhtml\",\"application/xhtml+xml\"],[\"xls\",\"application/vnd.ms-excel\"],[\"xlsx\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],[\"xml\",\"application/xml\"],[\"xul\",\"application/vnd.mozilla.xul+xml\"],[\"zip\",\"application/zip\"],[\"7z\",\"application/x-7z-compressed\"],[\"mkv\",\"video/x-matroska\"],[\"mov\",\"video/quicktime\"],[\"msg\",\"application/vnd.ms-outlook\"]]),t=[\".DS_Store\",\"Thumbs.db\"],o=t=>{let{name:o}=t;if(o&&-1!==o.lastIndexOf(\".\")&&!t.type){let i=(o.split(\".\").pop()||\"\").toLowerCase(),r=e.get(i);r&&Object.defineProperty(t,\"type\",{value:r,writable:!1,configurable:!1,enumerable:!0})}return t},i=(e,t)=>{let i=o(e);if(\"string\"!=typeof i.path){let{webkitRelativePath:o}=e;Object.defineProperty(i,\"path\",{value:\"string\"==typeof t?t:o||e.name,writable:!1,configurable:!1,enumerable:!0})}return i},r=async e=>await new Promise((t,o)=>{e.readEntries(t,o)}),a=async e=>{let t=[],o=await r(e);for(;o.length>0;)t.push(...o),o=await r(e);return t},n=e=>new Promise((t,o)=>{e.file(o=>t(i(o,e.fullPath)),o)}),s=async e=>{let o=[],i=[];for(let t of e){if(\"file\"!==t.kind)continue;let e=t.getAsEntry?t.getAsEntry():t.webkitGetAsEntry();i.push(e)}for(;i.length>0;){let e=i.shift();if(e){if(e.isFile){let i=await n(e);-1===t.indexOf(i.name)&&o.push(i)}else e.isDirectory&&i.push(...await a(e.createReader()))}}return o},d=async e=>{let o=[];for(let r of e)-1===t.indexOf(r.name)&&o.push(i(r));return o},l=async e=>e.dataTransfer?e.dataTransfer.items?await s(e.dataTransfer.items):await d(e.dataTransfer.files):await d(e.target.files),p=\"files-dropzone\",c=\"TOO_MANY_FILES\",h=document.createElement(\"template\"),u=`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;h.innerHTML=`\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;class m extends HTMLElement{#e=null;#t=null;constructor(){super(),this.shadowRoot||this.attachShadow({mode:\"open\"}).appendChild(h.content.cloneNode(!0)),this.shadowRoot&&(this.#e=this.shadowRoot.getElementById(\"fileInput\"),this.#t=this.shadowRoot.getElementById(\"dropzoneEl\"))}static get observedAttributes(){return[\"accept\",\"disabled\",\"multiple\",\"no-keyboard\"]}attributeChangedCallback(e,t,o){\"accept\"===e&&t!==o&&this.#e&&(this.#e.accept=this.accept),\"disabled\"===e&&t!==o&&this.#e&&(this.#e.disabled=this.disabled,this.disabled?this.#t?.removeAttribute(\"tabindex\"):this.#t?.setAttribute(\"tabindex\",\"0\")),\"multiple\"===e&&t!==o&&this.#e&&(this.#e.multiple=this.multiple),\"no-keyboard\"===e&&t!==o&&this.#t&&(this.noKeyboard?this.#t.removeAttribute(\"tabindex\"):this.#t.setAttribute(\"tabindex\",\"0\"))}connectedCallback(){this.#o(\"accept\"),this.#o(\"disabled\"),this.#o(\"maxFiles\"),this.#o(\"maxSize\"),this.#o(\"minSize\"),this.#o(\"multiple\"),this.#o(\"noClick\"),this.#o(\"noDrag\"),this.#o(\"noKeyboard\"),this.#o(\"autoFocus\"),this.#o(\"noStyle\"),this.#e?.addEventListener(\"change\",this.#i),this.#t?.addEventListener(\"dragenter\",this.#r),this.#t?.addEventListener(\"dragover\",this.#a),this.#t?.addEventListener(\"dragleave\",this.#n),this.#t?.addEventListener(\"drop\",this.#s),this.#t?.addEventListener(\"click\",this.#d),this.#t?.addEventListener(\"keyup\",this.#l),this.autoFocus&&this.#t?.focus()}disconnectedCallback(){this.#e?.removeEventListener(\"change\",this.#i),this.#t?.removeEventListener(\"dragenter\",this.#r),this.#t?.removeEventListener(\"dragover\",this.#a),this.#t?.removeEventListener(\"dragleave\",this.#n),this.#t?.removeEventListener(\"drop\",this.#s),this.#t?.removeEventListener(\"click\",this.#d),this.#t?.removeEventListener(\"keyup\",this.#l)}get accept(){return this.getAttribute(\"accept\")||\"\"}set accept(e){this.setAttribute(\"accept\",null!=e?e.toString():e)}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(e){this.toggleAttribute(\"disabled\",!!e)}get maxFiles(){let e=Number(this.getAttribute(\"max-files\"))||0;return e<=0?1/0:Math.floor(Math.abs(e))}set maxFiles(e){this.setAttribute(\"max-files\",null!=e?e.toString():e)}get maxSize(){let e=this.getAttribute(\"max-size\");if(null===e)return 1/0;let t=Number(e);return Number.isNaN(t)?1/0:t}set maxSize(e){this.setAttribute(\"max-size\",null!=e?e.toString():e)}get minSize(){let e=this.getAttribute(\"min-size\");if(null===e)return 0;let t=Number(e);return Number.isNaN(t)?0:t}set minSize(e){this.setAttribute(\"min-size\",null!=e?e.toString():e)}get multiple(){return this.hasAttribute(\"multiple\")}set multiple(e){this.toggleAttribute(\"multiple\",!!e)}get noClick(){return this.hasAttribute(\"no-click\")}set noClick(e){this.toggleAttribute(\"no-click\",!!e)}get noDrag(){return this.hasAttribute(\"no-drag\")}set noDrag(e){this.toggleAttribute(\"no-drag\",!!e)}get noKeyboard(){return this.hasAttribute(\"no-keyboard\")}set noKeyboard(e){this.toggleAttribute(\"no-keyboard\",!!e)}get autoFocus(){return this.hasAttribute(\"auto-focus\")}set autoFocus(e){this.toggleAttribute(\"auto-focus\",!!e)}get noStyle(){return this.hasAttribute(\"no-style\")}set noStyle(e){this.toggleAttribute(\"no-style\",!!e)}#i=async e=>{try{this.#p(await l(e))}catch(e){this.dispatchEvent(new CustomEvent(`${p}-error`,{bubbles:!0,composed:!0,detail:{error:e}}))}};#r=()=>{this.disabled||this.noDrag||this.dispatchEvent(new Event(`${p}-dragenter`,{bubbles:!0,composed:!0}))};#a=e=>{if(e.preventDefault(),this.disabled||this.noDrag){e.dataTransfer.dropEffect=\"none\";return}e.dataTransfer.dropEffect=\"copy\",this.#t&&(this.#t.classList.add(\"dropzone--dragover\"),this.#t.part.add(\"dropzone--dragover\")),this.dispatchEvent(new Event(`${p}-dragover`,{bubbles:!0,composed:!0}))};#n=()=>{this.disabled||this.noDrag||(this.#t&&(this.#t.classList.remove(\"dropzone--dragover\"),this.#t.part.remove(\"dropzone--dragover\")),this.dispatchEvent(new Event(`${p}-dragleave`,{bubbles:!0,composed:!0})))};#s=async e=>{if(!this.disabled&&!this.noDrag){e.preventDefault(),this.#t&&(this.#t.classList.remove(\"dropzone--dragover\"),this.#t.part.remove(\"dropzone--dragover\"));try{this.#p(await l(e))}catch(e){this.dispatchEvent(new CustomEvent(`${p}-error`,{bubbles:!0,composed:!0,detail:{error:e}}))}}};#d=()=>{this.disabled||this.noClick||this.#e?.click()};#l=e=>{this.disabled||this.noKeyboard||\" \"!==e.key&&\"Enter\"!==e.key||this.#e?.click()};#p(e){if(!Array.isArray(e)||!e.length)return;let t=[],o=[],i=e.length;if(!this.multiple&&i>1)for(let t of e)o.push({file:t,errors:[{code:c,message:\"Too many files selected. Only 1 file is allowed.\"}]});else if(this.multiple&&i>this.maxFiles)for(let t of e)o.push({file:t,errors:[{code:c,message:`Too many files selected. Only ${this.maxFiles} ${this.maxFiles>1?\"files are\":\"file is\"} allowed.`}]});else for(let i of e){let e=function(e,t=\"\"){if(!t)return!0;let o=[...new Set(t.split(\",\").map(e=>e.trim()).filter(Boolean))],i=e.type,r=i.replace(/\\/.*$/,\"\");for(let t of o)if(\".\"===t.charAt(0)){if(-1!==e.name.toLowerCase().indexOf(t.toLowerCase(),e.name.length-t.length))return!0}else if(/\\/\\*$/.test(t)){if(r===t.replace(/\\/.*$/,\"\"))return!0}else if(i===t)return!0;return!1}(i,this.accept),r=i.size>this.maxSize,a=i.size0&&this.dispatchEvent(new CustomEvent(`${p}-drop-accepted`,{bubbles:!0,composed:!0,detail:{acceptedFiles:t}})),o.length>0&&this.dispatchEvent(new CustomEvent(`${p}-drop-rejected`,{bubbles:!0,composed:!0,detail:{rejectedFiles:o}})),this.#e&&(this.#e.value=this.#e.defaultValue)}openFileDialog(){this.disabled||this.#e?.click()}#o(e){if(Object.prototype.hasOwnProperty.call(this,e)){let t=this[e];delete this[e],this[e]=t}}static defineCustomElement(e=p){\"undefined\"==typeof window||window.customElements.get(e)||window.customElements.define(e,m)}}m.defineCustomElement();export{m as FilesDropzone};\n//# sourceMappingURL=files-dropzone-defined.js.map\n","function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $862aa3736b0514bc$exports = {};\n\n$parcel$export($862aa3736b0514bc$exports, \"FilesDropzone\", function () { return $862aa3736b0514bc$export$6ccd1735166caad9; });\n// @ts-check\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */ // @ts-check\n/**\n * Checks if a file is valid based on the accepted file type specifiers.\n *\n * @param {File} file - The File object to validate.\n * @param {string} [acceptedTypeSpecifiers=''] - The accepted file type specifiers.\n * @returns {boolean} - True if the file is valid, false otherwise.\n */ function $38f222170fd4d21a$export$7c47054fed488f80(file, acceptedTypeSpecifiers = \"\") {\n if (!acceptedTypeSpecifiers) return true;\n const acceptedMimeTypesList = [\n ...new Set(acceptedTypeSpecifiers.split(\",\").map((v)=>v.trim()).filter(Boolean))\n ];\n const fileMimeType = file.type;\n const baseMimeType = fileMimeType.replace(/\\/.*$/, \"\");\n for (const validType of acceptedMimeTypesList){\n if (validType.charAt(0) === \".\") {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) return true;\n } else if (/\\/\\*$/.test(validType)) {\n // Check for mime type that looks like \"image/*\" or similar.\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) return true;\n } else {\n if (fileMimeType === validType) return true;\n }\n }\n return false;\n}\n\n\n// @ts-check\n/**\n * A map of common file extensions and their associated MIME types.\n */ const $f31161edf38949e9$var$COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n [\n \"aac\",\n \"audio/aac\"\n ],\n [\n \"abw\",\n \"application/x-abiword\"\n ],\n [\n \"arc\",\n \"application/x-freearc\"\n ],\n [\n \"avif\",\n \"image/avif\"\n ],\n [\n \"avi\",\n \"video/x-msvideo\"\n ],\n [\n \"azw\",\n \"application/vnd.amazon.ebook\"\n ],\n [\n \"bin\",\n \"application/octet-stream\"\n ],\n [\n \"bmp\",\n \"image/bmp\"\n ],\n [\n \"bz\",\n \"application/x-bzip\"\n ],\n [\n \"bz2\",\n \"application/x-bzip2\"\n ],\n [\n \"cda\",\n \"application/x-cdf\"\n ],\n [\n \"csh\",\n \"application/x-csh\"\n ],\n [\n \"css\",\n \"text/css\"\n ],\n [\n \"csv\",\n \"text/csv\"\n ],\n [\n \"doc\",\n \"application/msword\"\n ],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ],\n [\n \"eot\",\n \"application/vnd.ms-fontobject\"\n ],\n [\n \"epub\",\n \"application/epub+zip\"\n ],\n [\n \"gz\",\n \"application/gzip\"\n ],\n [\n \"gif\",\n \"image/gif\"\n ],\n [\n \"heic\",\n \"image/heic\"\n ],\n [\n \"heif\",\n \"image/heif\"\n ],\n [\n \"htm\",\n \"text/html\"\n ],\n [\n \"html\",\n \"text/html\"\n ],\n [\n \"ico\",\n \"image/vnd.microsoft.icon\"\n ],\n [\n \"ics\",\n \"text/calendar\"\n ],\n [\n \"jar\",\n \"application/java-archive\"\n ],\n [\n \"jpeg\",\n \"image/jpeg\"\n ],\n [\n \"jpg\",\n \"image/jpeg\"\n ],\n [\n \"jxl\",\n \"image/jxl\"\n ],\n [\n \"js\",\n \"text/javascript\"\n ],\n [\n \"json\",\n \"application/json\"\n ],\n [\n \"jsonld\",\n \"application/ld+json\"\n ],\n [\n \"markdown\",\n \"text/markdown\"\n ],\n [\n \"md\",\n \"text/markdown\"\n ],\n [\n \"mid\",\n \"audio/midi\"\n ],\n [\n \"midi\",\n \"audio/midi\"\n ],\n [\n \"mjs\",\n \"text/javascript\"\n ],\n [\n \"mp3\",\n \"audio/mpeg\"\n ],\n [\n \"mp4\",\n \"video/mp4\"\n ],\n [\n \"mpeg\",\n \"video/mpeg\"\n ],\n [\n \"mpkg\",\n \"application/vnd.apple.installer+xml\"\n ],\n [\n \"odp\",\n \"application/vnd.oasis.opendocument.presentation\"\n ],\n [\n \"ods\",\n \"application/vnd.oasis.opendocument.spreadsheet\"\n ],\n [\n \"odt\",\n \"application/vnd.oasis.opendocument.text\"\n ],\n [\n \"oga\",\n \"audio/ogg\"\n ],\n [\n \"ogv\",\n \"video/ogg\"\n ],\n [\n \"ogx\",\n \"application/ogg\"\n ],\n [\n \"opus\",\n \"audio/opus\"\n ],\n [\n \"otf\",\n \"font/otf\"\n ],\n [\n \"png\",\n \"image/png\"\n ],\n [\n \"pdf\",\n \"application/pdf\"\n ],\n [\n \"php\",\n \"application/x-httpd-php\"\n ],\n [\n \"ppt\",\n \"application/vnd.ms-powerpoint\"\n ],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n ],\n [\n \"rar\",\n \"application/vnd.rar\"\n ],\n [\n \"rtf\",\n \"application/rtf\"\n ],\n [\n \"sh\",\n \"application/x-sh\"\n ],\n [\n \"svg\",\n \"image/svg+xml\"\n ],\n [\n \"swf\",\n \"application/x-shockwave-flash\"\n ],\n [\n \"tar\",\n \"application/x-tar\"\n ],\n [\n \"tif\",\n \"image/tiff\"\n ],\n [\n \"tiff\",\n \"image/tiff\"\n ],\n [\n \"ts\",\n \"video/mp2t\"\n ],\n [\n \"ttf\",\n \"font/ttf\"\n ],\n [\n \"txt\",\n \"text/plain\"\n ],\n [\n \"vsd\",\n \"application/vnd.visio\"\n ],\n [\n \"wav\",\n \"audio/wav\"\n ],\n [\n \"weba\",\n \"audio/webm\"\n ],\n [\n \"webm\",\n \"video/webm\"\n ],\n [\n \"webp\",\n \"image/webp\"\n ],\n [\n \"woff\",\n \"font/woff\"\n ],\n [\n \"woff2\",\n \"font/woff2\"\n ],\n [\n \"xhtml\",\n \"application/xhtml+xml\"\n ],\n [\n \"xls\",\n \"application/vnd.ms-excel\"\n ],\n [\n \"xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ],\n [\n \"xml\",\n \"application/xml\"\n ],\n [\n \"xul\",\n \"application/vnd.mozilla.xul+xml\"\n ],\n [\n \"zip\",\n \"application/zip\"\n ],\n [\n \"7z\",\n \"application/x-7z-compressed\"\n ],\n // Others\n [\n \"mkv\",\n \"video/x-matroska\"\n ],\n [\n \"mov\",\n \"video/quicktime\"\n ],\n [\n \"msg\",\n \"application/vnd.ms-outlook\"\n ]\n]);\nconst $f31161edf38949e9$var$FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n \".DS_Store\",\n \"Thumbs.db\" // Windows\n];\n/**\n * Adds a `type` property to the file object if it doesn't have one and the file has an extension.\n * This is needed because Firefox doesn't add a type property to files dragged from the desktop.\n * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=1424689\n *\n * @param {File} file - The file object to add the type property to.\n * @returns {File} - The file object with the type property added.\n */ const $f31161edf38949e9$var$toFileWithMimeType = (file)=>{\n const { name: name } = file;\n const hasExtension = name && name.lastIndexOf(\".\") !== -1;\n if (hasExtension && !file.type) {\n const extension = (name.split(\".\").pop() || \"\").toLowerCase();\n const type = $f31161edf38949e9$var$COMMON_MIME_TYPES.get(extension);\n if (type) Object.defineProperty(file, \"type\", {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return file;\n};\n/**\n * Adds a `path` property to the file object if it doesn't have one.\n * If `path` is not provided, the `webkitRelativePath` property of the file will be used\n * or the file's name if `webkitRelativePath` is not available.\n *\n * @param {File} file - The file object to add the path property to.\n * @param {string} [path] - The path to set on the file object.\n * @returns {File} - The file object with the path property added.\n */ const $f31161edf38949e9$var$toFileWithPath = (file, path)=>{\n const fileWithMimeType = $f31161edf38949e9$var$toFileWithMimeType(file);\n // @ts-ignore\n if (typeof fileWithMimeType.path !== \"string\") {\n const { webkitRelativePath: webkitRelativePath } = file;\n Object.defineProperty(fileWithMimeType, \"path\", {\n value: typeof path === \"string\" ? path : webkitRelativePath || file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return fileWithMimeType;\n};\n/**\n * Wrap `FileSystemDirectoryReader.readEntries` in a promise to make working with read entries easier.\n * https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */ const $f31161edf38949e9$var$readEntriesPromise = async (directoryReader)=>{\n return await new Promise((resolve, reject)=>{\n directoryReader.readEntries(resolve, reject);\n });\n};\n/**\n * Read all entries in a directory or sub-directory\n * by calling `readEntries` until it returns an empty array.\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */ const $f31161edf38949e9$var$readAllDirectoryEntries = async (directoryReader)=>{\n const entries = [];\n let readEntries = await $f31161edf38949e9$var$readEntriesPromise(directoryReader);\n while(readEntries.length > 0){\n entries.push(...readEntries);\n readEntries = await $f31161edf38949e9$var$readEntriesPromise(directoryReader);\n }\n return entries;\n};\n/**\n * Get a `File` object from a `FileSystemFileEntry` object.\n *\n * @param {FileSystemFileEntry} fileEntry - The file entry to get a `File` object from.\n * @returns {Promise} - A promise that resolves with a `File` object.\n */ const $f31161edf38949e9$var$getFileFromFileEntry = (fileEntry)=>{\n return new Promise((resolve, reject)=>{\n fileEntry.file((file)=>resolve($f31161edf38949e9$var$toFileWithPath(file, fileEntry.fullPath)), reject);\n });\n};\n/**\n * Get an array of `File` objects from a `DataTransferItemList` object.\n *\n * @param {DataTransferItemList} dataTransferItemList - The item list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */ const $f31161edf38949e9$var$getFilesFromDataTransferItemList = async (dataTransferItemList)=>{\n const files = [];\n // Chromium browsers read only 100 files at a time as per the spec, so we need to use\n // BFS (Breadth-first search) to traverse the entire directory/file structure.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#javascript_content\n const queue = [];\n for (const item of dataTransferItemList){\n if (item.kind !== \"file\") continue;\n // https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry\n // This function is implemented as `webkitGetAsEntry()` in non-WebKit browsers\n // including Firefox at this time but it may be renamed to `getAsEntry()` in the future.\n // @ts-ignore\n const entry = item.getAsEntry ? item.getAsEntry() : item.webkitGetAsEntry();\n queue.push(entry);\n }\n while(queue.length > 0){\n const entry = queue.shift();\n if (!entry) continue;\n else if (entry.isFile) {\n const file = await $f31161edf38949e9$var$getFileFromFileEntry(entry);\n if ($f31161edf38949e9$var$FILES_TO_IGNORE.indexOf(file.name) === -1) files.push(file);\n } else if (entry.isDirectory) queue.push(...await $f31161edf38949e9$var$readAllDirectoryEntries(entry.createReader()));\n }\n return files;\n};\n/**\n * Get an array of `File` objects from a `FileList` object.\n *\n * @param {FileList} fileList - The file list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */ const $f31161edf38949e9$var$getFilesFromFileList = async (fileList)=>{\n const files = [];\n for (const file of fileList)if ($f31161edf38949e9$var$FILES_TO_IGNORE.indexOf(file.name) === -1) files.push($f31161edf38949e9$var$toFileWithPath(file));\n return files;\n};\nconst $f31161edf38949e9$export$6d52664cd15c442 = async (evt)=>{\n if (evt.dataTransfer) return evt.dataTransfer.items ? await $f31161edf38949e9$var$getFilesFromDataTransferItemList(evt.dataTransfer.items) : await $f31161edf38949e9$var$getFilesFromFileList(evt.dataTransfer.files);\n return await $f31161edf38949e9$var$getFilesFromFileList(evt.target.files);\n};\n\n\nconst $862aa3736b0514bc$var$COMPONENT_NAME = \"files-dropzone\";\nconst $862aa3736b0514bc$var$TOO_MANY_FILES = \"TOO_MANY_FILES\";\nconst $862aa3736b0514bc$var$FILE_TOO_LARGE = \"FILE_TOO_LARGE\";\nconst $862aa3736b0514bc$var$FILE_TOO_SMALL = \"FILE_TOO_SMALL\";\nconst $862aa3736b0514bc$var$INVALID_MIME_TYPE = \"INVALID_MIME_TYPE\";\nconst $862aa3736b0514bc$var$template = document.createElement(\"template\");\nconst $862aa3736b0514bc$var$styles = /* css */ `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n$862aa3736b0514bc$var$template.innerHTML = /* html */ `\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\n/**\n * @summary A custom element that allows users to drag and drop files into it.\n * @documentation https://github.com/georapbox/files-dropzone-element\n *\n * @tagname files-dropzone - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {string} accept - A comma-separated list of unique file type specifiers describing file types to allow.\n * @property {boolean} disabled - Determines whether the dropzone is disabled.\n * @property {number} maxFiles - The maximum number of files allowed to be dropped.\n * @property {number} maxSize - The maximum file size allowed in bytes.\n * @property {number} minSize - The minimum file size allowed in bytes.\n * @property {boolean} multiple - Allows multiple files to be dropped.\n * @property {boolean} noClick - Prevents the file dialog from opening when the dropzone is clicked.\n * @property {boolean} noDrag - Prevents the dropzone from reacting to drag events.\n * @property {boolean} noKeyboard - Prevents the dropzone from reacting to keyboard events.\n * @property {boolean} autoFocus - Automatically focuses the dropzone when it's connected to the DOM.\n * @property {boolean} noStyle - Prevents the dropzone from applying any styling.\n *\n * @attribute {string} accept - Reflects the accept property.\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {number} max-files - Reflects the maxFiles property.\n * @attribute {number} max-size - Reflects the maxSize property.\n * @attribute {number} min-size - Reflects the minSize property.\n * @attribute {boolean} multiple - Reflects the multiple property.\n * @attribute {boolean} no-click - Reflects the noClick property.\n * @attribute {boolean} no-drag - Reflects the noDrag property.\n * @attribute {boolean} no-keyboard - Reflects the noKeyboard property.\n * @attribute {boolean} auto-focus - Reflects the autoFocus property.\n * @attribute {boolean} no-style - Reflects the noStyle property.\n *\n * @slot - The default slot content of the dropzone.\n *\n * @csspart dropzone - The dropzone element.\n * @csspart dropzone--dragover - The state of the dropzone when dragging over it.\n *\n * @cssproperty --dropzone-border-width - The border width of the dropzone.\n * @cssproperty --dropzone-border-style - The border style of the dropzone.\n * @cssproperty --dropzone-border-radius - The border radius of the dropzone.\n * @cssproperty --dropzone-border-color - The border color of the dropzone.\n * @cssproperty --dropzone-border-color-dragover - The border color of the dropzone when dragging over it.\n * @cssproperty --dropzone-border-color-hover - The border color of the dropzone when hovering over it.\n * @cssproperty --dropzone-background-color - The background color of the dropzone.\n * @cssproperty --dropzone-background-color-dragover - The background color of the dropzone when dragging over it.\n * @cssproperty --dropzone-background-color-hover - The background color of the dropzone when hovering over it.\n * @cssproperty --dropzone-body-color - The text color of the dropzone.\n * @cssproperty --dropzone-body-color-dragover - The text color of the dropzone when dragging over it.\n * @cssproperty --dropzone-body-color-hover - The text color of the dropzone when hovering over it.\n * @cssproperty --dropzone-focus-shadow-rgb - The RGB value of the dropzone's focus shadow.\n * @cssproperty --dropzone-focus-box-shadow - The box shadow of the dropzone when focused.\n * @cssproperty --dropzone-transition-duration - The transition's duration for the dropzone area.\n *\n * @event files-dropzone-drop - Fired when files are dropped.\n * @event files-dropzone-drop-accepted - Fired when files dropped files are accepted.\n * @event files-dropzone-drop-rejected - Fired when files dropped files are rejected.\n * @event files-dropzone-dragenter - Fired when files are dragged into the dropzone.\n * @event files-dropzone-dragover - Fired when files are dragged over the dropzone.\n * @event files-dropzone-dragleave - Fired when files are dragged out of the dropzone.\n * @event files-dropzone-error - Fired when there is any error in the process of reading dropped files or directories.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method openFileDialog - Instance method. Opens the file dialog programmatically.\n */ class $862aa3736b0514bc$export$6ccd1735166caad9 extends HTMLElement {\n /** @type {Nullable} */ #fileInput = null;\n /** @type {Nullable} */ #dropzoneEl = null;\n constructor(){\n super();\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({\n mode: \"open\"\n });\n shadowRoot.appendChild($862aa3736b0514bc$var$template.content.cloneNode(true));\n }\n if (this.shadowRoot) {\n this.#fileInput = /** @type {Nullable} */ this.shadowRoot.getElementById(\"fileInput\");\n this.#dropzoneEl = this.shadowRoot.getElementById(\"dropzoneEl\");\n }\n }\n static get observedAttributes() {\n return [\n \"accept\",\n \"disabled\",\n \"multiple\",\n \"no-keyboard\"\n ];\n }\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */ attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"accept\" && oldValue !== newValue && this.#fileInput) this.#fileInput.accept = this.accept;\n if (name === \"disabled\" && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.disabled = this.disabled;\n if (this.disabled) this.#dropzoneEl?.removeAttribute(\"tabindex\");\n else this.#dropzoneEl?.setAttribute(\"tabindex\", \"0\");\n }\n if (name === \"multiple\" && oldValue !== newValue && this.#fileInput) this.#fileInput.multiple = this.multiple;\n if (name === \"no-keyboard\" && oldValue !== newValue && this.#dropzoneEl) {\n if (this.noKeyboard) this.#dropzoneEl.removeAttribute(\"tabindex\");\n else this.#dropzoneEl.setAttribute(\"tabindex\", \"0\");\n }\n }\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */ connectedCallback() {\n this.#upgradeProperty(\"accept\");\n this.#upgradeProperty(\"disabled\");\n this.#upgradeProperty(\"maxFiles\");\n this.#upgradeProperty(\"maxSize\");\n this.#upgradeProperty(\"minSize\");\n this.#upgradeProperty(\"multiple\");\n this.#upgradeProperty(\"noClick\");\n this.#upgradeProperty(\"noDrag\");\n this.#upgradeProperty(\"noKeyboard\");\n this.#upgradeProperty(\"autoFocus\");\n this.#upgradeProperty(\"noStyle\");\n this.#fileInput?.addEventListener(\"change\", this.#handleFileInputChange);\n this.#dropzoneEl?.addEventListener(\"dragenter\", this.#handleDragEnter);\n this.#dropzoneEl?.addEventListener(\"dragover\", this.#handleDragOver);\n this.#dropzoneEl?.addEventListener(\"dragleave\", this.#handleDragLeave);\n this.#dropzoneEl?.addEventListener(\"drop\", this.#handleDrop);\n this.#dropzoneEl?.addEventListener(\"click\", this.#handleClick);\n this.#dropzoneEl?.addEventListener(\"keyup\", this.#handleKeyUp);\n this.autoFocus && this.#dropzoneEl?.focus();\n }\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */ disconnectedCallback() {\n this.#fileInput?.removeEventListener(\"change\", this.#handleFileInputChange);\n this.#dropzoneEl?.removeEventListener(\"dragenter\", this.#handleDragEnter);\n this.#dropzoneEl?.removeEventListener(\"dragover\", this.#handleDragOver);\n this.#dropzoneEl?.removeEventListener(\"dragleave\", this.#handleDragLeave);\n this.#dropzoneEl?.removeEventListener(\"drop\", this.#handleDrop);\n this.#dropzoneEl?.removeEventListener(\"click\", this.#handleClick);\n this.#dropzoneEl?.removeEventListener(\"keyup\", this.#handleKeyUp);\n }\n /**\n * @type {string} - A comma-separated list of unique file type specifiers describing file types to allow.\n * @attribute accept - Reflects the accept property.\n */ get accept() {\n return this.getAttribute(\"accept\") || \"\";\n }\n set accept(value) {\n this.setAttribute(\"accept\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} - Determines whether the dropzone is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */ get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n this.toggleAttribute(\"disabled\", !!value);\n }\n /**\n * @type {number} - The maximum number of files allowed to be dropped.\n * @default Infinity\n * @attribute max-files - Reflects the maxFiles property.\n */ get maxFiles() {\n const num = Number(this.getAttribute(\"max-files\")) || 0;\n if (num <= 0) return Infinity;\n return Math.floor(Math.abs(num));\n }\n set maxFiles(value) {\n this.setAttribute(\"max-files\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} - The maximum file size allowed in bytes.\n * @default Infinity\n * @attribute max-size - Reflects the maxSize property.\n */ get maxSize() {\n const value = this.getAttribute(\"max-size\");\n if (value === null) return Infinity;\n const num = Number(value);\n return Number.isNaN(num) ? Infinity : num;\n }\n set maxSize(value) {\n this.setAttribute(\"max-size\", value != null ? value.toString() : value);\n }\n /**\n * @type {number} - The minimum file size allowed in bytes.\n * @default 0\n * @attribute min-size - Reflects the minSize property.\n */ get minSize() {\n const value = this.getAttribute(\"min-size\");\n if (value === null) return 0;\n const num = Number(value);\n return Number.isNaN(num) ? 0 : num;\n }\n set minSize(value) {\n this.setAttribute(\"min-size\", value != null ? value.toString() : value);\n }\n /**\n * @type {boolean} - Allows multiple files to be dropped.\n * @default false\n * @attribute multiple - Reflects the multiple property.\n */ get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(value) {\n this.toggleAttribute(\"multiple\", !!value);\n }\n /**\n * @type {boolean} - Prevents the file dialog from opening when the dropzone is clicked.\n * @default false\n * @attribute no-click - Reflects the noClick property.\n */ get noClick() {\n return this.hasAttribute(\"no-click\");\n }\n set noClick(value) {\n this.toggleAttribute(\"no-click\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from reacting to drag events.\n * @default false\n * @attribute no-drag - Reflects the noDrag property.\n */ get noDrag() {\n return this.hasAttribute(\"no-drag\");\n }\n set noDrag(value) {\n this.toggleAttribute(\"no-drag\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from reacting to keyboard events.\n * @default false\n * @attribute no-keyboard - Reflects the noKeyboard property.\n */ get noKeyboard() {\n return this.hasAttribute(\"no-keyboard\");\n }\n set noKeyboard(value) {\n this.toggleAttribute(\"no-keyboard\", !!value);\n }\n /**\n * @type {boolean} - Automatically focuses the dropzone when it's connected to the DOM.\n * @default false\n * @attribute auto-focus - Reflects the autoFocus property.\n */ get autoFocus() {\n return this.hasAttribute(\"auto-focus\");\n }\n set autoFocus(value) {\n this.toggleAttribute(\"auto-focus\", !!value);\n }\n /**\n * @type {boolean} - Prevents the dropzone from applying any styling.\n * @default false\n * @attribute no-style - Reflects the noStyle property.\n */ get noStyle() {\n return this.hasAttribute(\"no-style\");\n }\n set noStyle(value) {\n this.toggleAttribute(\"no-style\", !!value);\n }\n /**\n * Handles the change event of the file input.\n *\n * @param {*} evt - The event object.\n */ #handleFileInputChange = async (evt)=>{\n try {\n this.#handleFilesSelect(await (0, $f31161edf38949e9$export$6d52664cd15c442)(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n };\n /**\n * Handles the dragenter event of the dropzone.\n */ #handleDragEnter = ()=>{\n if (this.disabled || this.noDrag) return;\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragenter`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the dragover event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleDragOver = (evt)=>{\n evt.preventDefault();\n if (this.disabled || this.noDrag) {\n evt.dataTransfer.dropEffect = \"none\";\n return;\n }\n evt.dataTransfer.dropEffect = \"copy\";\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.add(\"dropzone--dragover\");\n this.#dropzoneEl.part.add(\"dropzone--dragover\");\n }\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragover`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the dragleave event of the dropzone.\n */ #handleDragLeave = ()=>{\n if (this.disabled || this.noDrag) return;\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove(\"dropzone--dragover\");\n this.#dropzoneEl.part.remove(\"dropzone--dragover\");\n }\n this.dispatchEvent(new Event(`${$862aa3736b0514bc$var$COMPONENT_NAME}-dragleave`, {\n bubbles: true,\n composed: true\n }));\n };\n /**\n * Handles the drop event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleDrop = async (evt)=>{\n if (this.disabled || this.noDrag) return;\n evt.preventDefault();\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove(\"dropzone--dragover\");\n this.#dropzoneEl.part.remove(\"dropzone--dragover\");\n }\n try {\n this.#handleFilesSelect(await (0, $f31161edf38949e9$export$6d52664cd15c442)(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: {\n error: error\n }\n }));\n }\n };\n /**\n * Handles the click event of the dropzone.\n */ #handleClick = ()=>{\n if (this.disabled || this.noClick) return;\n this.#fileInput?.click();\n };\n /**\n * Handles the keyup event of the dropzone.\n *\n * @param {*} evt - The event object.\n */ #handleKeyUp = (evt)=>{\n if (this.disabled || this.noKeyboard) return;\n if (evt.key === \" \" || evt.key === \"Enter\") this.#fileInput?.click();\n };\n /**\n * Handles the selection of files.\n *\n * @param {File[]} files - The files to handle.\n */ #handleFilesSelect(files) {\n if (!Array.isArray(files) || !files.length) return;\n const acceptedFiles = [];\n const rejectedFiles = [];\n const filesLength = files.length;\n // If the component is not in multiple mode, reject all files.\n if (!this.multiple && filesLength > 1) for (const file of files)rejectedFiles.push({\n file: file,\n errors: [\n {\n code: $862aa3736b0514bc$var$TOO_MANY_FILES,\n message: `Too many files selected. Only 1 file is allowed.`\n }\n ]\n });\n else if (this.multiple && filesLength > this.maxFiles) // If the component is in multiple mode, but the number of files exceeds\n // the maxFiles attribute, reject all files.\n for (const file of files)rejectedFiles.push({\n file: file,\n errors: [\n {\n code: $862aa3736b0514bc$var$TOO_MANY_FILES,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? \"files are\" : \"file is\"} allowed.`\n }\n ]\n });\n else // Validate each file. If it's valid, add it to the accepted files array,\n // otherwise add it to the rejected files array.\n for (const file of files){\n const fileHasValidType = (0, $38f222170fd4d21a$export$7c47054fed488f80)(file, this.accept);\n const fileExceedsMaxSize = file.size > this.maxSize;\n const fileIsSmallerThanMinSize = file.size < this.minSize;\n if (fileHasValidType && !fileExceedsMaxSize && !fileIsSmallerThanMinSize) acceptedFiles.push(file);\n else {\n const errors = [];\n if (!fileHasValidType) errors.push({\n code: $862aa3736b0514bc$var$INVALID_MIME_TYPE,\n message: `File type \"${file.type}\" is not accepted.`\n });\n if (fileExceedsMaxSize) errors.push({\n code: $862aa3736b0514bc$var$FILE_TOO_LARGE,\n message: `File size ${file.size} exceeds the maximum size of ${this.maxSize}.`\n });\n if (fileIsSmallerThanMinSize) errors.push({\n code: $862aa3736b0514bc$var$FILE_TOO_SMALL,\n message: `File size ${file.size} is smaller than the minimum size of ${this.minSize}.`\n });\n rejectedFiles.push({\n file: file,\n errors: errors\n });\n }\n }\n this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles: acceptedFiles,\n rejectedFiles: rejectedFiles\n }\n }));\n if (acceptedFiles.length > 0) this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop-accepted`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles: acceptedFiles\n }\n }));\n if (rejectedFiles.length > 0) this.dispatchEvent(new CustomEvent(`${$862aa3736b0514bc$var$COMPONENT_NAME}-drop-rejected`, {\n bubbles: true,\n composed: true,\n detail: {\n rejectedFiles: rejectedFiles\n }\n }));\n if (this.#fileInput) this.#fileInput.value = this.#fileInput.defaultValue;\n }\n /**\n * Opens the file dialog programmatically.\n */ openFileDialog() {\n if (this.disabled) return;\n this.#fileInput?.click();\n }\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'accept' | 'disabled' | 'maxFiles' | 'maxSize' | 'minSize' | 'multiple' | 'noClick' | 'noDrag' | 'noKeyboard' | 'autoFocus' | 'noStyle'} prop - The property name to upgrade.\n */ #upgradeProperty(prop) {\n /** @type {any} */ const instance = this;\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='files-dropzone'] - The name of the custom element.\n * @example\n *\n * FilesDropzone.defineCustomElement('my-dropzone');\n */ static defineCustomElement(elementName = $862aa3736b0514bc$var$COMPONENT_NAME) {\n if (typeof window !== \"undefined\" && !window.customElements.get(elementName)) window.customElements.define(elementName, $862aa3736b0514bc$export$6ccd1735166caad9);\n }\n}\n\n\n(0, $862aa3736b0514bc$export$6ccd1735166caad9).defineCustomElement();\n\n\nexport {$862aa3736b0514bc$export$6ccd1735166caad9 as FilesDropzone};\n//# sourceMappingURL=files-dropzone-defined.js.map\n","import { FilesDropzone } from './files-dropzone.js';\n\nFilesDropzone.defineCustomElement();\n\nexport { FilesDropzone };\n","// @ts-check\n\n/**\n * Represents a value that may be of type T, or null.\n *\n * @template T\n * @typedef {T | null} Nullable\n */\n\nimport { isValidFile } from './utils/is-valid-file.js';\nimport { getFilesFromEvent } from './utils/files-selector.js';\n\nconst COMPONENT_NAME = 'files-dropzone';\nconst TOO_MANY_FILES = 'TOO_MANY_FILES';\nconst FILE_TOO_LARGE = 'FILE_TOO_LARGE';\nconst FILE_TOO_SMALL = 'FILE_TOO_SMALL';\nconst INVALID_MIME_TYPE = 'INVALID_MIME_TYPE';\nconst template = document.createElement('template');\n\nconst styles = /* css */`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host([hidden]),\n [hidden] {\n display: none !important;\n }\n\n :host {\n --dropzone-border-width: 2px;\n --dropzone-border-style: dashed;\n --dropzone-border-radius: 0.25rem;\n --dropzone-border-color: #6c757d;\n --dropzone-border-color-dragover: #0d6efd;\n --dropzone-border-color-hover: var(--dropzone-border-color-dragover);\n --dropzone-background-color: #ffffff;\n --dropzone-background-color-dragover: #f4f4f5;\n --dropzone-background-color-hover: var(--dropzone-background-color-dragover);\n --dropzone-body-color: #3f3f46;\n --dropzone-body-color-dragover: var(--dropzone-body-color);\n --dropzone-body-color-hover: var(--dropzone-body-color-dragover);\n --dropzone-focus-shadow-rgb: 49,132,253;\n --dropzone-focus-box-shadow: 0 0 0 0.25rem rgba(var(--dropzone-focus-shadow-rgb), 0.5);\n --transition-duration: 0.2s; /* for backwards compatibility */\n --dropzone-transition-duration: var(--transition-duration);\n\n display: block;\n }\n\n :host(:not([no-style])) .dropzone {\n border: var(--dropzone-border-width) var(--dropzone-border-style) var(--dropzone-border-color);\n border-radius: var(--dropzone-border-radius);\n padding: 3rem 1rem;\n overflow: hidden;\n background-color: var(--dropzone-background-color);\n color: var(--dropzone-body-color);\n text-align: center;\n cursor: pointer;\n transition: border var(--dropzone-transition-duration) ease-in-out, background-color var(--dropzone-transition-duration) ease-in-out, color var(--dropzone-transition-duration) ease-in-out, box-shadow var(--dropzone-transition-duration) ease-in-out;\n }\n\n :host(:not([no-style])[no-click]) .dropzone {\n cursor: default;\n }\n\n :host(:not([no-style])[disabled]) .dropzone {\n opacity: 0.8;\n cursor: not-allowed;\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone--dragover {\n border-color: var(--dropzone-border-color-dragover);\n background-color: var(--dropzone-background-color-dragover);\n color: var(--dropzone-body-color-dragover);\n }\n\n :host(:not([no-style]):not([disabled])) .dropzone:focus-visible {\n outline: none;\n box-shadow: var(--dropzone-focus-box-shadow);\n }\n\n @media (hover: hover) {\n :host(:not([no-style]):not([disabled])) .dropzone:not(.dropzone--dragover):hover {\n border-color: var(--dropzone-border-color-hover);\n background-color: var(--dropzone-background-color-hover);\n color: var(--dropzone-body-color-hover);\n }\n }\n`;\n\ntemplate.innerHTML = /* html */`\n \n\n \n\n
\n Drag 'n' drop files here, or click to select files\n
\n`;\n\n/**\n * @summary A custom element that allows users to drag and drop files into it.\n * @documentation https://github.com/georapbox/files-dropzone-element\n *\n * @tagname files-dropzone - This is the default tag name, unless overridden by the `defineCustomElement` method.\n *\n * @property {string} accept - A comma-separated list of unique file type specifiers describing file types to allow.\n * @property {boolean} disabled - Determines whether the dropzone is disabled.\n * @property {number} maxFiles - The maximum number of files allowed to be dropped.\n * @property {number} maxSize - The maximum file size allowed in bytes.\n * @property {number} minSize - The minimum file size allowed in bytes.\n * @property {boolean} multiple - Allows multiple files to be dropped.\n * @property {boolean} noClick - Prevents the file dialog from opening when the dropzone is clicked.\n * @property {boolean} noDrag - Prevents the dropzone from reacting to drag events.\n * @property {boolean} noKeyboard - Prevents the dropzone from reacting to keyboard events.\n * @property {boolean} autoFocus - Automatically focuses the dropzone when it's connected to the DOM.\n * @property {boolean} noStyle - Prevents the dropzone from applying any styling.\n *\n * @attribute {string} accept - Reflects the accept property.\n * @attribute {boolean} disabled - Reflects the disabled property.\n * @attribute {number} max-files - Reflects the maxFiles property.\n * @attribute {number} max-size - Reflects the maxSize property.\n * @attribute {number} min-size - Reflects the minSize property.\n * @attribute {boolean} multiple - Reflects the multiple property.\n * @attribute {boolean} no-click - Reflects the noClick property.\n * @attribute {boolean} no-drag - Reflects the noDrag property.\n * @attribute {boolean} no-keyboard - Reflects the noKeyboard property.\n * @attribute {boolean} auto-focus - Reflects the autoFocus property.\n * @attribute {boolean} no-style - Reflects the noStyle property.\n *\n * @slot - The default slot content of the dropzone.\n *\n * @csspart dropzone - The dropzone element.\n * @csspart dropzone--dragover - The state of the dropzone when dragging over it.\n *\n * @cssproperty --dropzone-border-width - The border width of the dropzone.\n * @cssproperty --dropzone-border-style - The border style of the dropzone.\n * @cssproperty --dropzone-border-radius - The border radius of the dropzone.\n * @cssproperty --dropzone-border-color - The border color of the dropzone.\n * @cssproperty --dropzone-border-color-dragover - The border color of the dropzone when dragging over it.\n * @cssproperty --dropzone-border-color-hover - The border color of the dropzone when hovering over it.\n * @cssproperty --dropzone-background-color - The background color of the dropzone.\n * @cssproperty --dropzone-background-color-dragover - The background color of the dropzone when dragging over it.\n * @cssproperty --dropzone-background-color-hover - The background color of the dropzone when hovering over it.\n * @cssproperty --dropzone-body-color - The text color of the dropzone.\n * @cssproperty --dropzone-body-color-dragover - The text color of the dropzone when dragging over it.\n * @cssproperty --dropzone-body-color-hover - The text color of the dropzone when hovering over it.\n * @cssproperty --dropzone-focus-shadow-rgb - The RGB value of the dropzone's focus shadow.\n * @cssproperty --dropzone-focus-box-shadow - The box shadow of the dropzone when focused.\n * @cssproperty --dropzone-transition-duration - The transition's duration for the dropzone area.\n *\n * @event files-dropzone-drop - Fired when files are dropped.\n * @event files-dropzone-drop-accepted - Fired when files dropped files are accepted.\n * @event files-dropzone-drop-rejected - Fired when files dropped files are rejected.\n * @event files-dropzone-dragenter - Fired when files are dragged into the dropzone.\n * @event files-dropzone-dragover - Fired when files are dragged over the dropzone.\n * @event files-dropzone-dragleave - Fired when files are dragged out of the dropzone.\n * @event files-dropzone-error - Fired when there is any error in the process of reading dropped files or directories.\n *\n * @method defineCustomElement - Static method. Defines a custom element with the given name.\n * @method openFileDialog - Instance method. Opens the file dialog programmatically.\n */\nclass FilesDropzone extends HTMLElement {\n /** @type {Nullable} */\n #fileInput = null;\n\n /** @type {Nullable} */\n #dropzoneEl = null;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n if (this.shadowRoot) {\n this.#fileInput = /** @type {Nullable} */(this.shadowRoot.getElementById('fileInput'));\n this.#dropzoneEl = this.shadowRoot.getElementById('dropzoneEl');\n }\n }\n\n static get observedAttributes() {\n return ['accept', 'disabled', 'multiple', 'no-keyboard'];\n }\n\n /**\n * Lifecycle method that is called when attributes are changed, added, removed, or replaced.\n *\n * @param {string} name - The name of the attribute.\n * @param {string} oldValue - The old value of the attribute.\n * @param {string} newValue - The new value of the attribute.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'accept' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.accept = this.accept;\n }\n\n if (name === 'disabled' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.disabled = this.disabled;\n\n if (this.disabled) {\n this.#dropzoneEl?.removeAttribute('tabindex');\n } else {\n this.#dropzoneEl?.setAttribute('tabindex', '0');\n }\n }\n\n if (name === 'multiple' && oldValue !== newValue && this.#fileInput) {\n this.#fileInput.multiple = this.multiple;\n }\n\n if (name === 'no-keyboard' && oldValue !== newValue && this.#dropzoneEl) {\n if (this.noKeyboard) {\n this.#dropzoneEl.removeAttribute('tabindex');\n } else {\n this.#dropzoneEl.setAttribute('tabindex', '0');\n }\n }\n }\n\n /**\n * Lifecycle method that is called when the element is added to the DOM.\n */\n connectedCallback() {\n this.#upgradeProperty('accept');\n this.#upgradeProperty('disabled');\n this.#upgradeProperty('maxFiles');\n this.#upgradeProperty('maxSize');\n this.#upgradeProperty('minSize');\n this.#upgradeProperty('multiple');\n this.#upgradeProperty('noClick');\n this.#upgradeProperty('noDrag');\n this.#upgradeProperty('noKeyboard');\n this.#upgradeProperty('autoFocus');\n this.#upgradeProperty('noStyle');\n\n this.#fileInput?.addEventListener('change', this.#handleFileInputChange);\n this.#dropzoneEl?.addEventListener('dragenter', this.#handleDragEnter);\n this.#dropzoneEl?.addEventListener('dragover', this.#handleDragOver);\n this.#dropzoneEl?.addEventListener('dragleave', this.#handleDragLeave);\n this.#dropzoneEl?.addEventListener('drop', this.#handleDrop);\n this.#dropzoneEl?.addEventListener('click', this.#handleClick);\n this.#dropzoneEl?.addEventListener('keyup', this.#handleKeyUp);\n\n this.autoFocus && this.#dropzoneEl?.focus();\n }\n\n /**\n * Lifecycle method that is called when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.#fileInput?.removeEventListener('change', this.#handleFileInputChange);\n this.#dropzoneEl?.removeEventListener('dragenter', this.#handleDragEnter);\n this.#dropzoneEl?.removeEventListener('dragover', this.#handleDragOver);\n this.#dropzoneEl?.removeEventListener('dragleave', this.#handleDragLeave);\n this.#dropzoneEl?.removeEventListener('drop', this.#handleDrop);\n this.#dropzoneEl?.removeEventListener('click', this.#handleClick);\n this.#dropzoneEl?.removeEventListener('keyup', this.#handleKeyUp);\n }\n\n /**\n * @type {string} - A comma-separated list of unique file type specifiers describing file types to allow.\n * @attribute accept - Reflects the accept property.\n */\n get accept() {\n return this.getAttribute('accept') || '';\n }\n\n set accept(value) {\n this.setAttribute('accept', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} - Determines whether the dropzone is disabled.\n * @default false\n * @attribute disabled - Reflects the disabled property.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n set disabled(value) {\n this.toggleAttribute('disabled', !!value);\n }\n\n /**\n * @type {number} - The maximum number of files allowed to be dropped.\n * @default Infinity\n * @attribute max-files - Reflects the maxFiles property.\n */\n get maxFiles() {\n const num = Number(this.getAttribute('max-files')) || 0;\n\n if (num <= 0) {\n return Infinity;\n }\n\n return Math.floor(Math.abs(num));\n }\n\n set maxFiles(value) {\n this.setAttribute('max-files', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} - The maximum file size allowed in bytes.\n * @default Infinity\n * @attribute max-size - Reflects the maxSize property.\n */\n get maxSize() {\n const value = this.getAttribute('max-size');\n\n if (value === null) {\n return Infinity;\n }\n\n const num = Number(value);\n\n return Number.isNaN(num) ? Infinity : num;\n }\n\n set maxSize(value) {\n this.setAttribute('max-size', value != null ? value.toString() : value);\n }\n\n /**\n * @type {number} - The minimum file size allowed in bytes.\n * @default 0\n * @attribute min-size - Reflects the minSize property.\n */\n get minSize() {\n const value = this.getAttribute('min-size');\n\n if (value === null) {\n return 0;\n }\n\n const num = Number(value);\n\n return Number.isNaN(num) ? 0 : num;\n }\n\n set minSize(value) {\n this.setAttribute('min-size', value != null ? value.toString() : value);\n }\n\n /**\n * @type {boolean} - Allows multiple files to be dropped.\n * @default false\n * @attribute multiple - Reflects the multiple property.\n */\n get multiple() {\n return this.hasAttribute('multiple');\n }\n\n set multiple(value) {\n this.toggleAttribute('multiple', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the file dialog from opening when the dropzone is clicked.\n * @default false\n * @attribute no-click - Reflects the noClick property.\n */\n get noClick() {\n return this.hasAttribute('no-click');\n }\n\n set noClick(value) {\n this.toggleAttribute('no-click', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from reacting to drag events.\n * @default false\n * @attribute no-drag - Reflects the noDrag property.\n */\n get noDrag() {\n return this.hasAttribute('no-drag');\n }\n\n set noDrag(value) {\n this.toggleAttribute('no-drag', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from reacting to keyboard events.\n * @default false\n * @attribute no-keyboard - Reflects the noKeyboard property.\n */\n get noKeyboard() {\n return this.hasAttribute('no-keyboard');\n }\n\n set noKeyboard(value) {\n this.toggleAttribute('no-keyboard', !!value);\n }\n\n /**\n * @type {boolean} - Automatically focuses the dropzone when it's connected to the DOM.\n * @default false\n * @attribute auto-focus - Reflects the autoFocus property.\n */\n get autoFocus() {\n return this.hasAttribute('auto-focus');\n }\n\n set autoFocus(value) {\n this.toggleAttribute('auto-focus', !!value);\n }\n\n /**\n * @type {boolean} - Prevents the dropzone from applying any styling.\n * @default false\n * @attribute no-style - Reflects the noStyle property.\n */\n get noStyle() {\n return this.hasAttribute('no-style');\n }\n\n set noStyle(value) {\n this.toggleAttribute('no-style', !!value);\n }\n\n /**\n * Handles the change event of the file input.\n *\n * @param {*} evt - The event object.\n */\n #handleFileInputChange = async evt => {\n try {\n this.#handleFilesSelect(await getFilesFromEvent(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n };\n\n /**\n * Handles the dragenter event of the dropzone.\n */\n #handleDragEnter = () => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragenter`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the dragover event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleDragOver = evt => {\n evt.preventDefault();\n\n if (this.disabled || this.noDrag) {\n evt.dataTransfer.dropEffect = 'none';\n return;\n }\n\n evt.dataTransfer.dropEffect = 'copy';\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.add('dropzone--dragover');\n this.#dropzoneEl.part.add('dropzone--dragover');\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragover`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the dragleave event of the dropzone.\n */\n #handleDragLeave = () => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove('dropzone--dragover');\n this.#dropzoneEl.part.remove('dropzone--dragover');\n }\n\n this.dispatchEvent(new Event(`${COMPONENT_NAME}-dragleave`, {\n bubbles: true,\n composed: true\n }));\n };\n\n /**\n * Handles the drop event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleDrop = async evt => {\n if (this.disabled || this.noDrag) {\n return;\n }\n\n evt.preventDefault();\n\n if (this.#dropzoneEl) {\n this.#dropzoneEl.classList.remove('dropzone--dragover');\n this.#dropzoneEl.part.remove('dropzone--dragover');\n }\n\n try {\n this.#handleFilesSelect(await getFilesFromEvent(evt));\n } catch (error) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-error`, {\n bubbles: true,\n composed: true,\n detail: { error }\n }));\n }\n };\n\n /**\n * Handles the click event of the dropzone.\n */\n #handleClick = () => {\n if (this.disabled || this.noClick) {\n return;\n }\n\n this.#fileInput?.click();\n };\n\n /**\n * Handles the keyup event of the dropzone.\n *\n * @param {*} evt - The event object.\n */\n #handleKeyUp = evt => {\n if (this.disabled || this.noKeyboard) {\n return;\n }\n\n if (evt.key === ' ' || evt.key === 'Enter') {\n this.#fileInput?.click();\n }\n };\n\n /**\n * Handles the selection of files.\n *\n * @param {File[]} files - The files to handle.\n */\n #handleFilesSelect(files) {\n if (!Array.isArray(files) || !files.length) {\n return;\n }\n\n const acceptedFiles = [];\n const rejectedFiles = [];\n const filesLength = files.length;\n\n // If the component is not in multiple mode, reject all files.\n if (!this.multiple && filesLength > 1) {\n for (const file of files) {\n rejectedFiles.push({\n file,\n errors: [{\n code: TOO_MANY_FILES,\n message: `Too many files selected. Only 1 file is allowed.`\n }]\n });\n }\n } else if (this.multiple && filesLength > this.maxFiles) {\n // If the component is in multiple mode, but the number of files exceeds\n // the maxFiles attribute, reject all files.\n for (const file of files) {\n rejectedFiles.push({\n file,\n errors: [{\n code: TOO_MANY_FILES,\n message: `Too many files selected. Only ${this.maxFiles} ${this.maxFiles > 1 ? 'files are' : 'file is'} allowed.`\n }]\n });\n }\n } else {\n // Validate each file. If it's valid, add it to the accepted files array,\n // otherwise add it to the rejected files array.\n for (const file of files) {\n const fileHasValidType = isValidFile(file, this.accept);\n const fileExceedsMaxSize = file.size > this.maxSize;\n const fileIsSmallerThanMinSize = file.size < this.minSize;\n\n if (fileHasValidType && !fileExceedsMaxSize && !fileIsSmallerThanMinSize) {\n acceptedFiles.push(file);\n } else {\n const errors = [];\n\n if (!fileHasValidType) {\n errors.push({\n code: INVALID_MIME_TYPE,\n message: `File type \"${file.type}\" is not accepted.`\n });\n }\n\n if (fileExceedsMaxSize) {\n errors.push({\n code: FILE_TOO_LARGE,\n message: `File size ${file.size} exceeds the maximum size of ${this.maxSize}.`\n });\n }\n\n if (fileIsSmallerThanMinSize) {\n errors.push({\n code: FILE_TOO_SMALL,\n message: `File size ${file.size} is smaller than the minimum size of ${this.minSize}.`\n });\n }\n\n rejectedFiles.push({ file, errors });\n }\n }\n }\n\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles,\n rejectedFiles\n }\n }));\n\n if (acceptedFiles.length > 0) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop-accepted`, {\n bubbles: true,\n composed: true,\n detail: {\n acceptedFiles\n }\n }));\n }\n\n if (rejectedFiles.length > 0) {\n this.dispatchEvent(new CustomEvent(`${COMPONENT_NAME}-drop-rejected`, {\n bubbles: true,\n composed: true,\n detail: {\n rejectedFiles\n }\n }));\n }\n\n if (this.#fileInput) {\n this.#fileInput.value = this.#fileInput.defaultValue;\n }\n }\n\n /**\n * Opens the file dialog programmatically.\n */\n openFileDialog() {\n if (this.disabled) {\n return;\n }\n\n this.#fileInput?.click();\n }\n\n /**\n * This is to safe guard against cases where, for instance, a framework may have added the element to the page and set a\n * value on one of its properties, but lazy loaded its definition. Without this guard, the upgraded element would miss that\n * property and the instance property would prevent the class property setter from ever being called.\n *\n * https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n *\n * @param {'accept' | 'disabled' | 'maxFiles' | 'maxSize' | 'minSize' | 'multiple' | 'noClick' | 'noDrag' | 'noKeyboard' | 'autoFocus' | 'noStyle'} prop - The property name to upgrade.\n */\n #upgradeProperty(prop) {\n /** @type {any} */\n const instance = this;\n\n if (Object.prototype.hasOwnProperty.call(instance, prop)) {\n const value = instance[prop];\n delete instance[prop];\n instance[prop] = value;\n }\n }\n\n /**\n * Defines a custom element with the given name.\n * The name must contain a dash (-).\n *\n * @param {string} [elementName='files-dropzone'] - The name of the custom element.\n * @example\n *\n * FilesDropzone.defineCustomElement('my-dropzone');\n */\n static defineCustomElement(elementName = COMPONENT_NAME) {\n if (typeof window !== 'undefined' && !window.customElements.get(elementName)) {\n window.customElements.define(elementName, FilesDropzone);\n }\n }\n}\n\nexport { FilesDropzone };\n","// @ts-check\n\n/**\n * Checks if a file is valid based on the accepted file type specifiers.\n *\n * @param {File} file - The File object to validate.\n * @param {string} [acceptedTypeSpecifiers=''] - The accepted file type specifiers.\n * @returns {boolean} - True if the file is valid, false otherwise.\n */\nexport function isValidFile(file, acceptedTypeSpecifiers = '') {\n if (!acceptedTypeSpecifiers) {\n return true;\n }\n\n const acceptedMimeTypesList = [\n ...new Set(acceptedTypeSpecifiers.split(',').map(v => v.trim()).filter(Boolean))\n ];\n\n const fileMimeType = file.type;\n const baseMimeType = fileMimeType.replace(/\\/.*$/, '');\n\n for (const validType of acceptedMimeTypesList) {\n if (validType.charAt(0) === '.') {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n return true;\n }\n } else if (/\\/\\*$/.test(validType)) {\n // Check for mime type that looks like \"image/*\" or similar.\n if (baseMimeType === validType.replace(/\\/.*$/, '')) {\n return true;\n }\n } else {\n if (fileMimeType === validType) {\n return true;\n }\n }\n }\n\n return false;\n}\n","// @ts-check\n\n/**\n * A map of common file extensions and their associated MIME types.\n */\nconst COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n ['aac', 'audio/aac'],\n ['abw', 'application/x-abiword'],\n ['arc', 'application/x-freearc'],\n ['avif', 'image/avif'],\n ['avi', 'video/x-msvideo'],\n ['azw', 'application/vnd.amazon.ebook'],\n ['bin', 'application/octet-stream'],\n ['bmp', 'image/bmp'],\n ['bz', 'application/x-bzip'],\n ['bz2', 'application/x-bzip2'],\n ['cda', 'application/x-cdf'],\n ['csh', 'application/x-csh'],\n ['css', 'text/css'],\n ['csv', 'text/csv'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n ['eot', 'application/vnd.ms-fontobject'],\n ['epub', 'application/epub+zip'],\n ['gz', 'application/gzip'],\n ['gif', 'image/gif'],\n ['heic', 'image/heic'],\n ['heif', 'image/heif'],\n ['htm', 'text/html'],\n ['html', 'text/html'],\n ['ico', 'image/vnd.microsoft.icon'],\n ['ics', 'text/calendar'],\n ['jar', 'application/java-archive'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['jxl', 'image/jxl'],\n ['js', 'text/javascript'],\n ['json', 'application/json'],\n ['jsonld', 'application/ld+json'],\n ['markdown', 'text/markdown'],\n ['md', 'text/markdown'],\n ['mid', 'audio/midi'],\n ['midi', 'audio/midi'],\n ['mjs', 'text/javascript'],\n ['mp3', 'audio/mpeg'],\n ['mp4', 'video/mp4'],\n ['mpeg', 'video/mpeg'],\n ['mpkg', 'application/vnd.apple.installer+xml'],\n ['odp', 'application/vnd.oasis.opendocument.presentation'],\n ['ods', 'application/vnd.oasis.opendocument.spreadsheet'],\n ['odt', 'application/vnd.oasis.opendocument.text'],\n ['oga', 'audio/ogg'],\n ['ogv', 'video/ogg'],\n ['ogx', 'application/ogg'],\n ['opus', 'audio/opus'],\n ['otf', 'font/otf'],\n ['png', 'image/png'],\n ['pdf', 'application/pdf'],\n ['php', 'application/x-httpd-php'],\n ['ppt', 'application/vnd.ms-powerpoint'],\n ['pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'],\n ['rar', 'application/vnd.rar'],\n ['rtf', 'application/rtf'],\n ['sh', 'application/x-sh'],\n ['svg', 'image/svg+xml'],\n ['swf', 'application/x-shockwave-flash'],\n ['tar', 'application/x-tar'],\n ['tif', 'image/tiff'],\n ['tiff', 'image/tiff'],\n ['ts', 'video/mp2t'],\n ['ttf', 'font/ttf'],\n ['txt', 'text/plain'],\n ['vsd', 'application/vnd.visio'],\n ['wav', 'audio/wav'],\n ['weba', 'audio/webm'],\n ['webm', 'video/webm'],\n ['webp', 'image/webp'],\n ['woff', 'font/woff'],\n ['woff2', 'font/woff2'],\n ['xhtml', 'application/xhtml+xml'],\n ['xls', 'application/vnd.ms-excel'],\n ['xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],\n ['xml', 'application/xml'],\n ['xul', 'application/vnd.mozilla.xul+xml'],\n ['zip', 'application/zip'],\n ['7z', 'application/x-7z-compressed'],\n\n // Others\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['msg', 'application/vnd.ms-outlook']\n]);\n\nconst FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store', // macOs\n 'Thumbs.db' // Windows\n];\n\n/**\n * Adds a `type` property to the file object if it doesn't have one and the file has an extension.\n * This is needed because Firefox doesn't add a type property to files dragged from the desktop.\n * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=1424689\n *\n * @param {File} file - The file object to add the type property to.\n * @returns {File} - The file object with the type property added.\n */\nconst toFileWithMimeType = file => {\n const { name } = file;\n const hasExtension = name && name.lastIndexOf('.') !== -1;\n\n if (hasExtension && !file.type) {\n const extension = (name.split('.').pop() || '').toLowerCase();\n const type = COMMON_MIME_TYPES.get(extension);\n\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n\n return file;\n};\n\n/**\n * Adds a `path` property to the file object if it doesn't have one.\n * If `path` is not provided, the `webkitRelativePath` property of the file will be used\n * or the file's name if `webkitRelativePath` is not available.\n *\n * @param {File} file - The file object to add the path property to.\n * @param {string} [path] - The path to set on the file object.\n * @returns {File} - The file object with the path property added.\n */\nconst toFileWithPath = (file, path) => {\n const fileWithMimeType = toFileWithMimeType(file);\n\n // @ts-ignore\n if (typeof fileWithMimeType.path !== 'string') {\n const { webkitRelativePath } = file;\n\n Object.defineProperty(fileWithMimeType, 'path', {\n value: typeof path === 'string' ? path : webkitRelativePath || file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n\n return fileWithMimeType;\n};\n\n/**\n * Wrap `FileSystemDirectoryReader.readEntries` in a promise to make working with read entries easier.\n * https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */\nconst readEntriesPromise = async directoryReader => {\n return await new Promise((resolve, reject) => {\n directoryReader.readEntries(resolve, reject);\n });\n};\n\n/**\n * Read all entries in a directory or sub-directory\n * by calling `readEntries` until it returns an empty array.\n *\n * @param {FileSystemDirectoryReader} directoryReader - The directory reader to read entries from.\n * @returns {Promise} - A promise that resolves with an array of `FileSystemEntry` objects.\n */\nconst readAllDirectoryEntries = async directoryReader => {\n const entries = [];\n let readEntries = await readEntriesPromise(directoryReader);\n\n while (readEntries.length > 0) {\n entries.push(...readEntries);\n readEntries = await readEntriesPromise(directoryReader);\n }\n\n return entries;\n};\n\n/**\n * Get a `File` object from a `FileSystemFileEntry` object.\n *\n * @param {FileSystemFileEntry} fileEntry - The file entry to get a `File` object from.\n * @returns {Promise} - A promise that resolves with a `File` object.\n */\nconst getFileFromFileEntry = fileEntry => {\n return new Promise((resolve, reject) => {\n fileEntry.file(file => resolve(toFileWithPath(file, fileEntry.fullPath)), reject);\n });\n};\n\n/**\n * Get an array of `File` objects from a `DataTransferItemList` object.\n *\n * @param {DataTransferItemList} dataTransferItemList - The item list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nconst getFilesFromDataTransferItemList = async dataTransferItemList => {\n const files = [];\n\n // Chromium browsers read only 100 files at a time as per the spec, so we need to use\n // BFS (Breadth-first search) to traverse the entire directory/file structure.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#javascript_content\n const queue = [];\n\n for (const item of dataTransferItemList) {\n if (item.kind !== 'file') {\n // Ignore non-file items, such as links.\n continue;\n }\n\n // https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry\n // This function is implemented as `webkitGetAsEntry()` in non-WebKit browsers\n // including Firefox at this time but it may be renamed to `getAsEntry()` in the future.\n // @ts-ignore\n const entry = item.getAsEntry ? item.getAsEntry() : item.webkitGetAsEntry();\n\n queue.push(entry);\n }\n\n while (queue.length > 0) {\n const entry = queue.shift();\n\n if (!entry) {\n continue;\n } else if (entry.isFile) {\n const file = await getFileFromFileEntry(entry);\n\n if (FILES_TO_IGNORE.indexOf(file.name) === -1) {\n files.push(file);\n }\n } else if (entry.isDirectory) {\n queue.push(...await readAllDirectoryEntries(entry.createReader()));\n }\n }\n\n return files;\n};\n\n/**\n * Get an array of `File` objects from a `FileList` object.\n *\n * @param {FileList} fileList - The file list to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nconst getFilesFromFileList = async fileList => {\n const files = [];\n\n for (const file of fileList) {\n if (FILES_TO_IGNORE.indexOf(file.name) === -1) {\n files.push(toFileWithPath(file));\n }\n }\n\n return files;\n};\n\n/**\n * Get an array of `File` objects from an event.\n * This function supports both `drop` and `change` events.\n *\n * @param {*} evt - The event to get an array of `File` objects from.\n * @returns {Promise} - A promise that resolves with an array of `File` objects.\n */\nexport const getFilesFromEvent = async evt => {\n if (evt.dataTransfer) {\n return evt.dataTransfer.items\n ? await getFilesFromDataTransferItemList(evt.dataTransfer.items)\n : await getFilesFromFileList(evt.dataTransfer.files);\n }\n\n return await getFilesFromFileList(evt.target.files);\n};\n","/**\n * Removes one or more elements from an array at the specified index(es).\n *\n * @param {Array} array The initial array to remove elements from.\n * @param {Number} ...indexes The index(es) of the elements to be removed. Non numbers are ignored.\n * @throws {TypeError} If `array` is not array.\n * @returns {Array} The result array with the elements specified removed.\n * @example\n *\n * const arr = [1, 2, 3, 4, 5];\n *\n * remove(arr, 0);\n * // => [2, 3, 4, 5]\n *\n * remove(arr, 0, 1);\n * // => [3, 4, 5]\n *\n * remove(arr, 0, 4);\n * // => [2, 3, 4]\n *\n * remove(arr);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length);\n * // => [1, 2, 3, 4, 5]\n *\n * remove(arr, arr.length - 1);\n * // => [1, 2, 3, 4]\n *\n * remove(arr, NaN);\n * // => [1, 2, 3, 4, 5]\n */\nexport const arrayRemove = (array, ...indexes) => {\n if (!Array.isArray(array)) {\n throw new TypeError('Expected an array for first argument');\n }\n\n return array.filter((_, i) => indexes.indexOf(i) === -1);\n};\n","/**\n * Generates a unique id of the form `${prefix}-${randomString}-${suffix}`.\n *\n * @param {string} [prefix=''] - The prefix to use for the id.\n * @param {string} [suffix=''] - The suffix to use for the id.\n * @returns {string} - The unique id.\n */\nconst uid = (prefix = '', suffix = '') => {\n const prefixString = typeof prefix === 'string' && prefix !== '' ? prefix + '-' : '';\n const suffixString = typeof suffix === 'string' && suffix !== '' ? '-' + suffix : '';\n const randomString = Math.random().toString(36).substring(2, 8); // Pseudo-random string of six alphanumeric characters.\n\n return `${prefixString}${randomString}${suffixString}`;\n};\n\nexport { uid };\n","export const ACCEPTED_MIME_TYPES = ['image/jpg', 'image/jpeg', 'image/png', 'image/apng', 'image/gif', 'image/webp', 'image/avif'];\n","import Pressuru from 'url:../assets/fonts/Pressuru/Pressuru.ttf';\nimport OswaldRegular from 'url:../assets/fonts/Oswald/Oswald-Regular.ttf';\nimport OswaldBold from 'url:../assets/fonts/Oswald/Oswald-Bold.ttf';\nimport RobotoRegular from 'url:../assets/fonts/Roboto/Roboto-Regular.ttf';\nimport RobotoBold from 'url:../assets/fonts/Roboto/Roboto-Bold.ttf';\nimport RobotoCondensedRegular from 'url:../assets/fonts/RobotoCondensed/RobotoCondensed-Regular.ttf';\nimport RobotoCondensedBold from 'url:../assets/fonts/RobotoCondensed/RobotoCondensed-Bold.ttf';\nimport CourierPrimeRegular from 'url:../assets/fonts/CourierPrime/CourierPrime-Regular.ttf';\nimport CourierPrimeBold from 'url:../assets/fonts/CourierPrime/CourierPrime-Bold.ttf';\nimport OpenSansRegular from 'url:../assets/fonts/OpenSans/OpenSans-Regular.ttf';\nimport OpenSansBold from 'url:../assets/fonts/OpenSans/OpenSans-Bold.ttf';\n\nexport const customFonts = [\n { name: 'Pressuru', label: 'Pressuru', path: Pressuru, style: 'normal', weight: '400' },\n { name: 'Oswald-Regular', label: 'Oswald', path: OswaldRegular, style: 'normal', weight: '400' },\n { name: 'Oswald-Bold', label: 'Oswald Bold', path: OswaldBold, style: 'normal', weight: '700' },\n { name: 'Roboto-Regular', label: 'Roboto', path: RobotoRegular, style: 'normal', weight: '400' },\n { name: 'Roboto-Bold', label: 'Roboto Bold', path: RobotoBold, style: 'normal', weight: '700' },\n { name: 'RobotoCondensed-Regular', label: 'Roboto Condensed', path: RobotoCondensedRegular, style: 'normal', weight: '400' },\n { name: 'RobotoCondensed-Bold', label: 'Roboto Condensed Bold', path: RobotoCondensedBold, style: 'normal', weight: '700' },\n { name: 'CourierPrime-Regular', label: 'Courier Prime', path: CourierPrimeRegular, style: 'normal', weight: '400' },\n { name: 'CourierPrime-Bold', label: 'Courier Prime Bold', path: CourierPrimeBold, style: 'normal', weight: '700' },\n { name: 'OpenSans-Regular', label: 'Open Sans', path: OpenSansRegular, style: 'normal', weight: '400' },\n { name: 'OpenSans-Bold', label: 'Open Sans Bold', path: OpenSansBold, style: 'normal', weight: '400' }\n];\n\nexport const loadCustomFont = async (name, path, options = {}) => {\n try {\n const font = new FontFace(name, `url(${path})`, { ...options });\n await font.load();\n document.fonts.add(font);\n } catch (err) {\n console.error(err);\n }\n};\n","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Pressuru.684952ea.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Oswald-Regular.89ec7d89.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Oswald-Bold.0f6a7ca6.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Roboto-Regular.ca197847.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"Roboto-Bold.fdb9b54a.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"RobotoCondensed-Regular.d585f5c7.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"RobotoCondensed-Bold.e1f96d4b.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"CourierPrime-Regular.3a25a501.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"CourierPrime-Bold.3d6bf689.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"OpenSans-Regular.edf9e01b.ttf\";","module.exports = require('./helpers/bundle-url').getBundleURL('8tAhj') + \"OpenSans-Bold.8fceb72b.ttf\";","import { ACCEPTED_MIME_TYPES } from './constants.js';\n\nexport const fileFromUrl = async (options = {}) => {\n const res = await fetch(options.url);\n const blob = await res.blob();\n const mimeType = options.mimeType || blob.type || '';\n\n if (!ACCEPTED_MIME_TYPES.includes(mimeType)) {\n throw new Error(`This is not an accepted image format. Accepted MIME types are: ${ACCEPTED_MIME_TYPES.join(', ')}`);\n }\n\n return new File([blob], options.filename || '', blob);\n};\n","const errorsContainer = document.getElementById('errorsContainer');\n\nconst hideError = evt => {\n const target = evt.currentTarget;\n target.removeEventListener('click', hideError);\n errorsContainer.removeChild(target.parentNode);\n};\n\nexport const toastAlert = (message = '', type = 'info') => {\n const types = ['info', 'warning', 'danger'];\n\n if (!types.includes(type)) {\n type = 'info';\n }\n\n const template = /* html */`\n ${message}\n \n `;\n\n const div = document.createElement('div');\n div.className = `alert alert-${type} alert-dismissible text-break mb-2 fade`;\n div.innerHTML = template;\n div.querySelector('button').addEventListener('click', hideError);\n errorsContainer.appendChild(div);\n setTimeout(() => div.classList.add('show'), 100);\n};\n","import { customFonts } from './custom-fonts.js';\n\nexport const createTextBox = (index, data = {}) => {\n const inputTemplate = /* html */`\n
\n \n\n \n\n
\n \n \n \n
\n
\n\n
\n
\n
\n \n\n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n
\n `;\n\n const fragment = document.createDocumentFragment();\n const div = document.createElement('div');\n\n div.className = 'bg-light border shadow-sm mb-3 rounded';\n div.setAttribute('data-section', 'textBox');\n div.setAttribute('data-index', index);\n div.innerHTML = inputTemplate;\n div.querySelector('[data-input=\"font\"]').value = data.font;\n div.querySelector('[data-input=\"textAlign\"]').value = data.textAlign;\n div.querySelector('[data-input=\"allCaps\"]').checked = data.allCaps;\n\n return fragment.appendChild(div);\n};\n","export const drawCanvas = (image, canvas, ctx, textOptions = []) => {\n if (image == null) {\n return;\n }\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (typeof image === 'string') { // Assume it's a color\n ctx.fillStyle = image;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else {\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n }\n\n textOptions.forEach(function (item, index) {\n ctx.save();\n\n ctx.font = `${item.fontWeight} ${item.fontSize}px ${item.font}`;\n ctx.fillStyle = item.fillColor;\n ctx.textAlign = item.textAlign;\n ctx.strokeStyle = item.shadowColor;\n\n const multiplier = index + 1;\n const lineHeight = ctx.measureText('M').width + item.fontSize / 2;\n const xPos = canvas.width / 2;\n const shadowBlur = item.shadowBlur;\n const text = item.allCaps === true ? item.text.toUpperCase() : item.text;\n const textLines = text.split('\\n');\n\n if (shadowBlur !== 0) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = item.shadowColor;\n }\n\n ctx.translate(xPos + item.offsetX, lineHeight * multiplier + item.offsetY);\n ctx.rotate(item.rotate * Math.PI / 180);\n // first draw each line with shadow\n textLines.forEach((text, index) => ctx.fillText(text, 0, index * lineHeight));\n // since shadows of multiline text may be drawn over letters of neighbour lines\n // (when shadow blur is big enough), re-draw text without shadows.\n ctx.shadowBlur = 0;\n textLines.forEach((text, index) => ctx.fillText(text, 0, index * lineHeight));\n if (item.borderWidth > 0) {\n ctx.lineWidth = item.borderWidth;\n textLines.forEach((text, index) => ctx.strokeText(text, 0, index * lineHeight));\n }\n\n ctx.restore();\n });\n};\n"],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","$94933cc6427541bd$export$c37129e465f64ef0","navigator","canShare","$0380ce8f1f064ccc$export$6503ec6e8aabbaf","$0380ce8f1f064ccc$var$mapping","Map","baseUrl","manifest","i","length","path","$7dd1ddf6834435ca$export$bdfd709ae4826697","$7dd1ddf6834435ca$var$bundleURL","value","$7dd1ddf6834435ca$var$getBundleURL","matches","stack","match","replace","getBundleURL","JSON","parse","$4f74a8126e204146$export$30b344bef3e55b67","$4f74a8126e204146$var$t","$4f74a8126e204146$var$e","document","createElement","innerHTML","HTMLElement","t","constructor","shadowRoot","attachShadow","mode","delegatesFocus","appendChild","content","cloneNode","querySelector","observedAttributes","attributeChangedCallback","toggleAttribute","disabled","setAttribute","toString","part","contains","toggle","connectedCallback","r","addEventListener","disconnectedCallback","removeEventListener","hasAttribute","shareUrl","getAttribute","shareTitle","shareText","shareFiles","Array","isArray","share","url","title","text","files","dispatchEvent","CustomEvent","bubbles","composed","detail","shareData","name","error","preventDefault","target","nodeName","assignedElements","flatten","find","prototype","hasOwnProperty","defineCustomElement","customElements","define","$636b0cf1ed0b9f88$export$cc30a98fe3890794","$636b0cf1ed0b9f88$var$t","Number","isNaN","Math","min","max","$636b0cf1ed0b9f88$var$e","$636b0cf1ed0b9f88$var$i","$636b0cf1ed0b9f88$var$o","o","l","getSupportedConstraints","isConnected","getTrackCapabilities","getTrackSettings","u","includes","facingMode","stopVideoStream","startVideoStream","cameraResolution","trim","split","map","width","height","pan","h","tilt","zoom","d","getElementById","c","m","p","g","b","f","isSupported","message","autoPlay","noImage","loading","calculateFileSize","capture","play","then","video","catch","finally","removeAttribute","from","childNodes","forEach","remove","getVideoTracks","applyConstraints","advanced","ideal","audio","mediaDevices","getUserMedia","srcObject","hidden","stop","getContext","videoWidth","videoHeight","drawImage","toDataURL","Image","src","dataURI","fetch","blob","size","getCapabilities","getSettings","$4da30046ce6d9325$export$32589115725b904b","$4da30046ce6d9325$var$e","open","showModal","body","style","overflowY","element","close","noHeader","classList","noAnimations","noCloseButton","clearTimeout","staticBackdrop","fullscreen","add","setTimeout","defaultPrevented","currentTarget","assignedNodes","cancelable","reason","show","hide","$7aad62ebc3d6fae8$export$6ccd1735166caad9","$7aad62ebc3d6fae8$var$e","$7aad62ebc3d6fae8$var$t","$7aad62ebc3d6fae8$var$o","lastIndexOf","type","pop","toLowerCase","writable","$7aad62ebc3d6fae8$var$i","webkitRelativePath","$7aad62ebc3d6fae8$var$r","Promise","readEntries","$7aad62ebc3d6fae8$var$a","push","$7aad62ebc3d6fae8$var$n","file","fullPath","$7aad62ebc3d6fae8$var$s","kind","getAsEntry","webkitGetAsEntry","shift","isFile","indexOf","isDirectory","createReader","$7aad62ebc3d6fae8$var$d","$7aad62ebc3d6fae8$var$l","dataTransfer","items","$7aad62ebc3d6fae8$var$p","$7aad62ebc3d6fae8$var$c","$7aad62ebc3d6fae8$var$h","$7aad62ebc3d6fae8$var$u","accept","multiple","noKeyboard","autoFocus","focus","maxFiles","floor","abs","maxSize","minSize","noClick","noDrag","noStyle","Event","dropEffect","click","key","errors","Set","filter","Boolean","charAt","test","acceptedFiles","rejectedFiles","defaultValue","openFileDialog","$5742c9e143620cb1$export$30a014203d0d7e4f","array","indexes","TypeError","_","$21c3f3a8dccfa4fd$export$e2a22331486dcca0","prefix","suffix","randomString","random","substring","$33dea9d9a6da4c9a$export$63e7bed68b07a85c","$02ee0bedf4ff7ef0$exports","$6f8f0ad93b4f4fec$exports","$60f12aeb358e1d01$exports","$b312cc3e2ac443c7$exports","$481315e8ee95f8f9$exports","$7cee0a691e2711a6$exports","$12b7043e62e67366$exports","$f224edc54658ebde$exports","$33ce2f42587a9c55$exports","$1375393a097acb0e$exports","$728f6ce83c7b6e27$exports","$055531bbd0af154c$export$6874249d87f2602a","label","weight","$055531bbd0af154c$export$59eceaef0c7797b2","options","font","FontFace","load","fonts","console","$008970865eefc93d$export$6539e087749cf9d3","res","mimeType","join","File","filename","$166cfb2484b08c80$var$errorsContainer","$166cfb2484b08c80$var$hideError","evt","removeChild","parentNode","$166cfb2484b08c80$export$af04143326425dbd","types","template","div","className","$50a37fdc18d479c2$export$293a4b86a6fe2398","index","data","inputTemplate","fillColor","shadowColor","_isSettingsOpen","fontSize","shadowBlur","borderWidth","offsetY","offsetX","rotate","fragment","createDocumentFragment","textAlign","checked","allCaps","$d346fdc99aed49b3$export$e653a2de0f3a8b89","image","canvas","ctx","textOptions","clearRect","fillStyle","fillRect","item","save","fontWeight","strokeStyle","lineHeight","measureText","xPos","textLines","toUpperCase","shadowOffsetX","shadowOffsetY","translate","PI","fillText","lineWidth","strokeText","restore","$44ae6d9db4eaca0f$var$videoModal","$44ae6d9db4eaca0f$var$downloadModal","$44ae6d9db4eaca0f$var$canvas","$44ae6d9db4eaca0f$var$dropzoneEl","$44ae6d9db4eaca0f$var$instructionsEl","$44ae6d9db4eaca0f$var$ctx","$44ae6d9db4eaca0f$var$imageUploadMethodSelect","$44ae6d9db4eaca0f$var$fileSelectBtn","$44ae6d9db4eaca0f$var$imageUrlForm","$44ae6d9db4eaca0f$var$addTextboxBtn","$44ae6d9db4eaca0f$var$inputsContainer","$44ae6d9db4eaca0f$var$generateMemeBtn","$44ae6d9db4eaca0f$var$openVideoModalBtn","$44ae6d9db4eaca0f$var$downloadMemeBtn","$44ae6d9db4eaca0f$var$downloadMemePreview","$44ae6d9db4eaca0f$var$webShareComponent","$44ae6d9db4eaca0f$var$galleryEl","$44ae6d9db4eaca0f$var$gallerySearchEl","$44ae6d9db4eaca0f$var$galleryNoResultsEl","$44ae6d9db4eaca0f$var$solidColorForm","$44ae6d9db4eaca0f$var$uploadMethodEls","querySelectorAll","$44ae6d9db4eaca0f$var$selectedImage","$44ae6d9db4eaca0f$var$reqAnimFrame","$44ae6d9db4eaca0f$var$defaultTextOptions","$44ae6d9db4eaca0f$var$textOptions","$44ae6d9db4eaca0f$var$generateMeme","dataUrl","downloadLink","download","href","requestAnimationFrame","$44ae6d9db4eaca0f$var$onImageLoaded","MAX_WIDTH","MAX_HEIGHT","$44ae6d9db4eaca0f$var$handleFileSelect","reader","FileReader","result","readAsDataURL","$44ae6d9db4eaca0f$var$handleTextPropChange","prop","$44ae6d9db4eaca0f$var$handleImageUploadFromURL","form","submitButton","imageUrl","$44ae6d9db4eaca0f$var$moveText","offsetDir","sign","textBoxSection","offsetYInput","offsetXInput","$44ae6d9db4eaca0f$var$handleGalleryClick","button","closest","img","alt","newTextBox","textBoxIndex","textBoxEls","el","settingsEl","confirm","isOffsetYButton","isOffsetXButton","cancelAnimationFrame","query","galleryItems","capturePhotoComponent","$442be162a818aed4$export$c37129e465f64ef0","isWebShareSupported","$e179325634270afd$export$30b344bef3e55b67","$e179325634270afd$var$styles","$e179325634270afd$var$template","buttonSlot","buttonEl","getButton","oldValue","newValue","upgradeProperty","handleSlotChange","handleClick","instance","elementName","WebShare","$c290816263f90981$export$cc30a98fe3890794","$02ad8beec419df62$export$7d15b64cf5a3a4c4","lower","upper","$c290816263f90981$var$COMPONENT_NAME","$c290816263f90981$var$styles","$c290816263f90981$var$template","supportedConstraints","stream","canvasElement","outputElement","videoElement","captureButtonSlot","captureButton","facingModeButtonSlot","facingModeButton","trackCapabilities","trackSettings","emptyOutputElement","isValidFacingMode","x","widthInAllowedRange","heightInAllowedRange","panInAllowedRange","applyPTZ","tiltInAllowedRange","zoomInAllowedRange","getCaptureButton","getFacingModeButton","onVideoLoadedMetaData","onCaptureButtonSlotChange","onCapturePhotoButtonClick","onFacingModeButtonSlotChange","onFacingModeButtonClick","node","constraintName","constraintValue","track","constraints","eventDetail","CapturePhoto","$180b6dcf923bafc7$export$32589115725b904b","$180b6dcf923bafc7$var$template","dialogEl","footerSlotEl","pulseAnimationTimeout","headerEl","closeBtnEl","handleDialogClick","handleDialogClose","handleDialogCancel","handleCloseButtonClick","handleFooterSlotChange","applyPulseEffectOnDialog","requestCloseEvent","createRequestCloseEvent","footerEl","footerSlotNodes","hasFooterSlotNodes","ModalElement","$862aa3736b0514bc$export$6ccd1735166caad9","$f31161edf38949e9$var$COMMON_MIME_TYPES","$f31161edf38949e9$var$FILES_TO_IGNORE","$f31161edf38949e9$var$toFileWithMimeType","hasExtension","extension","$f31161edf38949e9$var$toFileWithPath","fileWithMimeType","$f31161edf38949e9$var$readEntriesPromise","directoryReader","resolve","reject","$f31161edf38949e9$var$readAllDirectoryEntries","entries","$f31161edf38949e9$var$getFileFromFileEntry","fileEntry","$f31161edf38949e9$var$getFilesFromDataTransferItemList","dataTransferItemList","queue","entry","$f31161edf38949e9$var$getFilesFromFileList","fileList","$f31161edf38949e9$export$6d52664cd15c442","$862aa3736b0514bc$var$COMPONENT_NAME","$862aa3736b0514bc$var$TOO_MANY_FILES","$862aa3736b0514bc$var$template","$862aa3736b0514bc$var$styles","fileInput","dropzoneEl","handleFileInputChange","handleDragEnter","handleDragOver","handleDragLeave","handleDrop","handleKeyUp","num","Infinity","handleFilesSelect","filesLength","fileHasValidType","acceptedTypeSpecifiers","acceptedMimeTypesList","fileMimeType","baseMimeType","validType","fileExceedsMaxSize","fileIsSmallerThanMinSize","FilesDropzone"],"version":3,"file":"index.ac06585e.js.map"} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index a0c5959..376a58e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ -Meme Generator
add image icon

Drag & Drop an image here or click to select an image from your device.

All uploaded images are processed locally in your browser. No data is sent to any server.

Image selection options
Text options
Licensed under The MIT License (MIT)
Capture image
Download Meme
meme preview
Generate meme Download
\ No newline at end of file +Meme Generator
add image icon

Drag & Drop an image here or click to select an image from your device.

All uploaded images are processed locally in your browser. No data is sent to any server.

Image selection options
Text options
Licensed under The MIT License (MIT)
Capture image
Download Meme
meme preview
Generate meme Download
\ No newline at end of file diff --git a/docs/service-worker.js b/docs/service-worker.js index 1ce5897..0d48dfc 100644 --- a/docs/service-worker.js +++ b/docs/service-worker.js @@ -1,2 +1,2 @@ -if(!self.define){let e,a={};const d=(d,i)=>(d=new URL(d+".js",i).href,a[d]||new Promise((a=>{if("document"in self){const e=document.createElement("script");e.src=d,e.onload=a,document.head.appendChild(e)}else e=d,importScripts(d),a()})).then((()=>{let e=a[d];if(!e)throw new Error(`Module ${d} didn’t register its module`);return e})));self.define=(i,f)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(a[r])return;let b={};const c=e=>d(e,r),n={module:{uri:r},exports:b,require:c};a[r]=Promise.all(i.map((e=>n[e]||c(e)))).then((e=>(f(...e),b)))}}define(["./workbox-1c3383c2"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"180.ad1ffa6f.png",revision:"e500d9d7377de6d701630c6345a20b99"},{url:"192.02439c4c.png",revision:"799182a75ab5b10e8b2088a717f0eff2"},{url:"384.3d08a4a6.png",revision:"3eb04d3a80b60e082d7f79e1614070fe"},{url:"512.00f88ae0.png",revision:"511ad055b1865aa9bda7886cb0b9e336"},{url:"add-image.bd815785.svg",revision:"8c00e51567cbd039981fffb87c61dab1"},{url:"always-has-been.08a66422.jpg",revision:"d1b6401abd9cb8d382b7246bdb8ce0b5"},{url:"anakin-padme.03c6b194.jpg",revision:"baa00e8faccb9c63073f1db59274bd0d"},{url:"aperture.4bf28ce8.svg",revision:"1a6a5d3b06ba8aaa3e96658810752663"},{url:"bad-luck-brian.8b018588.jpg",revision:"2bb70408a0ab18038a376d80da91d336"},{url:"batman-slapping-robin.aa8b8054.jpg",revision:"6695faabd1eb772936f31ff0af36111d"},{url:"bell-curve.1167fe19.jpg",revision:"e26dac38583f6f98ea8ef98e4dab71e1"},{url:"ben-affleck-smoking.17cc6114.jpg",revision:"512c246cb818579340a6dc8dddea4f87"},{url:"camera-reverse.284e8ac9.svg",revision:"86e592b72bb2472bbacd0c823b3a3c78"},{url:"camera.ed7aa43f.svg",revision:"46f0c02466282ec5c4bf26141624316e"},{url:"captain-picard-facepalm.7690614a.jpg",revision:"926eecb6292d72fe2f99fd3113444c0b"},{url:"car-drift.9255750c.jpg",revision:"55b3735095d73c764704bccdda6f2bc1"},{url:"change-my-mind.b49b92c2.jpg",revision:"35e498b8b3c3b62e485ce4ffbe4cdfd1"},{url:"chevron-down.ad14d981.svg",revision:"5635cc35f04030576a62d2d649824495"},{url:"chevron-left.20a2f252.svg",revision:"a8334bfa7ef65b1095bfd54557d69beb"},{url:"chevron-right.1be074ac.svg",revision:"3d72992183afc0c2f0b6bf010dadc2a1"},{url:"chevron-up.f532d8b6.svg",revision:"e1bd8bbacf48b185c4b3deb18b9e0f2d"},{url:"CourierPrime-Bold.3d6bf689.ttf",revision:"4acfa45d29d240044e0075a8e58f0862"},{url:"CourierPrime-Regular.3a25a501.ttf",revision:"fba4686ed1d1b4ef05ab14db78805dbe"},{url:"disaster-girl.536b1af4.jpg",revision:"07542c2e7ea315f6a7b7311d2a88d074"},{url:"distracted-boyfriend.22708891.jpg",revision:"4ee61cd7c20689e2c8b7fa2dbffbdbc4"},{url:"drake-hotline-bling.99013af7.jpg",revision:"edce37df305e1b9c78d0a41ade363e29"},{url:"drowning-kid-in-the-pool.37435682.jpg",revision:"99e976a664709f7fe0b7141e2661a42b"},{url:"favicon-192.02439c4c.png",revision:"799182a75ab5b10e8b2088a717f0eff2"},{url:"finding-neverland.25f9c4f0.jpg",revision:"4557c9d30b0e3114953f9cc8e981c622"},{url:"gear.b3b5d1a5.svg",revision:"5e0b2045d7dc4768b1ceb199d83ab6f0"},{url:"gibson-jesus.1224d195.jpg",revision:"b26e0d89414371dfbf7a1e1bbada7e15"},{url:"girls-gossiping.da75b154.jpg",revision:"97f0d159d65349dfdd821f6294d8b177"},{url:"greta-thunberg-how-dare-you.ddceea0b.jpg",revision:"dbe7e341b66c0e71da9db2f49eddbd9c"},{url:"grinning-girl.9a1a3b6a.jpg",revision:"133c4124813f1dfeff00a9e0a735b5c3"},{url:"group-therapy.c82c3502.jpg",revision:"a79a27311d3969bf370b8846bea1789c"},{url:"hack-the-planet.29b5550a.jpg",revision:"207de9c3f83de707d99ea7255f743fc1"},{url:"hide-the-pain-harold.dc41d0f5.jpg",revision:"af3a4d69c625740558a9adc66967797c"},{url:"i-bet-hes-thinking-about-other-women.c80f1ce0.jpg",revision:"df6904f1480a0210525311a594cd51b7"},{url:"i-dont-always.cd8fe191.jpg",revision:"6c0fa2f7428f252d177a52b34c93aacb"},{url:"i-see-dead-people.89330beb.jpg",revision:"16ff33b79a8ce266b890d2f2e53fdbc1"},{url:"index.4e55d6a2.css",revision:"eec5434764d9d63cc7c3298cf000b06a"},{url:"index.4e55d6a2.css.map",revision:"21c1c7659d6accb2a979c93d9a428803"},{url:"index.4f090451.js",revision:"b16f3c2872fc9b1f8fcaebe0d5e90374"},{url:"index.4f090451.js.map",revision:"dcf7631d232b5240ff81cae0c911bb19"},{url:"index.671cb7f2.js",revision:"5b0c0ec1a3555a1978b9a817a19eb98f"},{url:"index.671cb7f2.js.map",revision:"660967fb2344356d7d6e1672b0399057"},{url:"index.89efe45b.js",revision:"6814a61841cd719f59765d1ee48ea09a"},{url:"index.89efe45b.js.map",revision:"c88920bec0571a6511e504850de79c03"},{url:"index.d44e81ec.js",revision:"b90a75d7c5128c18c30bf621d43c8122"},{url:"index.d44e81ec.js.map",revision:"4f7febc735b0a98935455f8329214edd"},{url:"index.html",revision:"8f1de0ad5c10da1dd43408256146b92d"},{url:"jurassic-park-no-one-cares.4b16d8e3.jpg",revision:"5971adaaec085b176061d7d98577a089"},{url:"knight-with-arrow-in-helmet.70d7b8ea.jpg",revision:"2d51aa7ceccfacf6e1fae33cf5279abb"},{url:"laughing-leo.ff4cf9b5.png",revision:"ffd00816a11fb66f16d05a5a06506e3a"},{url:"leonardo-dicaprio-cheers.1f5072fc.jpg",revision:"0c9762d1044fde55cfccc6d3f8abfedb"},{url:"logo.02439c4c.png",revision:"799182a75ab5b10e8b2088a717f0eff2"},{url:"manifest.webmanifest",revision:"1e34d4d2fb0da2246a35db6beeace137"},{url:"matrix-morpheus.2a17fef0.jpg",revision:"4306d531845e95029b5219f178ce546c"},{url:"milk-girls.c67a099a.jpg",revision:"d2a3c2d80f01fb790a6557978920ec36"},{url:"monk-temptation.9fa9b52f.jpg",revision:"f993e88e46226fb560559b5c8392ba6e"},{url:"monkey_puppet.a1128702.jpg",revision:"e3dd1d281e372a02ca2955eb62ce7dbb"},{url:"nervous.ecca1da9.jpg",revision:"f9500924e2154f15ff3249573963e867"},{url:"obama-medal.da4528cd.jpg",revision:"0b7d29347fd9bdf850b46293c8870fd8"},{url:"office-congrats.f658c72e.jpg",revision:"5e5823dd68191151a2313a3ec158e9cf"},{url:"one-does-not-simply.bd73a129.jpg",revision:"94eaa0e921189e88fe35ba1954988564"},{url:"OpenSans-Bold.8fceb72b.ttf",revision:"8ff9b5735ccb338267f0034d83fe8214"},{url:"OpenSans-Regular.edf9e01b.ttf",revision:"22ab03a6b890f2f142a137a38bf1d4ae"},{url:"Oswald-Bold.0f6a7ca6.ttf",revision:"452bfeb5bf78e71cc3cd6e720ac24bd4"},{url:"Oswald-Regular.89ec7d89.ttf",revision:"a7ccbd3cd9a9ff21ec41086dcc23ebe6"},{url:"photo.0328c485.svg",revision:"6b3fccb8598a897d641cc1dc75ed3592"},{url:"plague-hackers.01c70709.jpg",revision:"70712ddea9f2dd86ec34c1ffedffb3d0"},{url:"Pressuru.684952ea.ttf",revision:"60b45237c258b8e8f5d2fba5b304064e"},{url:"Roboto-Bold.fdb9b54a.ttf",revision:"b8e42971dec8d49207a8c8e2b919a6ac"},{url:"Roboto-Regular.ca197847.ttf",revision:"8a36205bd9b83e03af0591a004bc97f4"},{url:"RobotoCondensed-Bold.e1f96d4b.ttf",revision:"e38804ae070b58fbf4fdd88fd6853929"},{url:"RobotoCondensed-Regular.d585f5c7.ttf",revision:"0134dd8fe6fe708de73909a71d842780"},{url:"sad-pablo-escobar.48ee550d.jpg",revision:"1a49f6decc10da3ee849a1f94132c794"},{url:"save.46fbf12f.svg",revision:"3e1d90c414fadfd6727cc77f150e79e5"},{url:"say-that-again-i-dare-you.0c8b53b9.jpg",revision:"948be03975e613eaa08ac7f284491b40"},{url:"screenshot.3fbaa9cf.png",revision:"9df64fac2f8267d4f7db45082d60b09c"},{url:"share.0fccb277.svg",revision:"19d01499fa1fe8707366653db087ebac"},{url:"shirley-temple-laugh.8125357d.png",revision:"c2e13fffe87a3a1ff91d5a955a280fe1"},{url:"sparta-leonidas.0b603b26.jpg",revision:"e9ba2efb8ff797d0a9adf13135927c82"},{url:"spinner.4452ed29.svg",revision:"609c6274c68c19f6badaf5488b6aeef2"},{url:"star-wars-yoda.c7579c93.jpg",revision:"951e4ee52db27001190248f449651c4b"},{url:"success-kid.5d6212f8.jpg",revision:"b58ffaf338ffc8f4f06ef45478365c13"},{url:"sweating-bullets.f3c2d84f.jpg",revision:"3c9c50281665c688cacdd0d1da8f8f7d"},{url:"tell-me-the-truth-I-am-ready-to-hear-it.34eb1bcc.png",revision:"ecd53156061e4fdabf386c5f802035cf"},{url:"think-about-it.f4fc185d.jpg",revision:"f70b62834ba3ec34a2c9f2a80a5068b9"},{url:"this-is-fine.db15aaeb.jpg",revision:"dac2b7e7d3b1f18c72e48373cb4275e1"},{url:"toilet_guy.812f73a4.jpg",revision:"3f488def302d190dca09eb12c878d228"},{url:"trash.d9edab78.svg",revision:"db8971c7dab936bbe799ede7c1b9ac4b"},{url:"two-buttons.a42b7a04.jpg",revision:"611756fac300eb0f010491cbd95dda28"},{url:"waiting-skeleton.26f2ec8f.jpg",revision:"0eef934549392da6aa193fb86f9a8ab2"},{url:"water-tank-leaking-fix.772173b9.png",revision:"3ebfc2b2c42be514ec35fd3b9948686a"},{url:"whisper-and-goosebumps.2bc61488.jpg",revision:"962ccff862d6c9d416a330c8be901be9"},{url:"x-x-everywhere.4732733a.jpg",revision:"ca16fab0846148556e776aec3ff00739"},{url:"you-guys-are-getting-paid.ba5678cc.png",revision:"feb2da8a1fae966adae92bd1f8318153"}],{})})); +if(!self.define){let e,a={};const d=(d,i)=>(d=new URL(d+".js",i).href,a[d]||new Promise((a=>{if("document"in self){const e=document.createElement("script");e.src=d,e.onload=a,document.head.appendChild(e)}else e=d,importScripts(d),a()})).then((()=>{let e=a[d];if(!e)throw new Error(`Module ${d} didn’t register its module`);return e})));self.define=(i,f)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(a[r])return;let c={};const b=e=>d(e,r),n={module:{uri:r},exports:c,require:b};a[r]=Promise.all(i.map((e=>n[e]||b(e)))).then((e=>(f(...e),c)))}}define(["./workbox-1c3383c2"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"180.ad1ffa6f.png",revision:"e500d9d7377de6d701630c6345a20b99"},{url:"192.02439c4c.png",revision:"799182a75ab5b10e8b2088a717f0eff2"},{url:"384.3d08a4a6.png",revision:"3eb04d3a80b60e082d7f79e1614070fe"},{url:"512.00f88ae0.png",revision:"511ad055b1865aa9bda7886cb0b9e336"},{url:"add-image.bd815785.svg",revision:"8c00e51567cbd039981fffb87c61dab1"},{url:"always-has-been.08a66422.jpg",revision:"d1b6401abd9cb8d382b7246bdb8ce0b5"},{url:"anakin-padme.03c6b194.jpg",revision:"baa00e8faccb9c63073f1db59274bd0d"},{url:"aperture.4bf28ce8.svg",revision:"1a6a5d3b06ba8aaa3e96658810752663"},{url:"bad-luck-brian.8b018588.jpg",revision:"2bb70408a0ab18038a376d80da91d336"},{url:"batman-slapping-robin.aa8b8054.jpg",revision:"6695faabd1eb772936f31ff0af36111d"},{url:"bell-curve.1167fe19.jpg",revision:"e26dac38583f6f98ea8ef98e4dab71e1"},{url:"ben-affleck-smoking.17cc6114.jpg",revision:"512c246cb818579340a6dc8dddea4f87"},{url:"camera-reverse.284e8ac9.svg",revision:"86e592b72bb2472bbacd0c823b3a3c78"},{url:"camera.ed7aa43f.svg",revision:"46f0c02466282ec5c4bf26141624316e"},{url:"captain-picard-facepalm.7690614a.jpg",revision:"926eecb6292d72fe2f99fd3113444c0b"},{url:"car-drift.9255750c.jpg",revision:"55b3735095d73c764704bccdda6f2bc1"},{url:"change-my-mind.b49b92c2.jpg",revision:"35e498b8b3c3b62e485ce4ffbe4cdfd1"},{url:"chevron-down.ad14d981.svg",revision:"5635cc35f04030576a62d2d649824495"},{url:"chevron-left.20a2f252.svg",revision:"a8334bfa7ef65b1095bfd54557d69beb"},{url:"chevron-right.1be074ac.svg",revision:"3d72992183afc0c2f0b6bf010dadc2a1"},{url:"chevron-up.f532d8b6.svg",revision:"e1bd8bbacf48b185c4b3deb18b9e0f2d"},{url:"CourierPrime-Bold.3d6bf689.ttf",revision:"4acfa45d29d240044e0075a8e58f0862"},{url:"CourierPrime-Regular.3a25a501.ttf",revision:"fba4686ed1d1b4ef05ab14db78805dbe"},{url:"disaster-girl.536b1af4.jpg",revision:"07542c2e7ea315f6a7b7311d2a88d074"},{url:"distracted-boyfriend.22708891.jpg",revision:"4ee61cd7c20689e2c8b7fa2dbffbdbc4"},{url:"drake-hotline-bling.99013af7.jpg",revision:"edce37df305e1b9c78d0a41ade363e29"},{url:"drowning-kid-in-the-pool.37435682.jpg",revision:"99e976a664709f7fe0b7141e2661a42b"},{url:"favicon-192.02439c4c.png",revision:"799182a75ab5b10e8b2088a717f0eff2"},{url:"finding-neverland.25f9c4f0.jpg",revision:"4557c9d30b0e3114953f9cc8e981c622"},{url:"gear.b3b5d1a5.svg",revision:"5e0b2045d7dc4768b1ceb199d83ab6f0"},{url:"gibson-jesus.1224d195.jpg",revision:"b26e0d89414371dfbf7a1e1bbada7e15"},{url:"girls-gossiping.da75b154.jpg",revision:"97f0d159d65349dfdd821f6294d8b177"},{url:"greta-thunberg-how-dare-you.ddceea0b.jpg",revision:"dbe7e341b66c0e71da9db2f49eddbd9c"},{url:"grinning-girl.9a1a3b6a.jpg",revision:"133c4124813f1dfeff00a9e0a735b5c3"},{url:"group-therapy.c82c3502.jpg",revision:"a79a27311d3969bf370b8846bea1789c"},{url:"hack-the-planet.29b5550a.jpg",revision:"207de9c3f83de707d99ea7255f743fc1"},{url:"hide-the-pain-harold.dc41d0f5.jpg",revision:"af3a4d69c625740558a9adc66967797c"},{url:"i-bet-hes-thinking-about-other-women.c80f1ce0.jpg",revision:"df6904f1480a0210525311a594cd51b7"},{url:"i-dont-always.cd8fe191.jpg",revision:"6c0fa2f7428f252d177a52b34c93aacb"},{url:"i-see-dead-people.89330beb.jpg",revision:"16ff33b79a8ce266b890d2f2e53fdbc1"},{url:"index.47ef8ac4.css",revision:"a39b9a36c2b88296d2f053a0b8939458"},{url:"index.47ef8ac4.css.map",revision:"f7562c07c38c3e1bc460220272dad54e"},{url:"index.89efe45b.js",revision:"6814a61841cd719f59765d1ee48ea09a"},{url:"index.89efe45b.js.map",revision:"c88920bec0571a6511e504850de79c03"},{url:"index.a2b8f4c4.js",revision:"f87f9946fac65f0e0592ebd224679ff4"},{url:"index.a2b8f4c4.js.map",revision:"5cb520d3efdc0698178c960708066aa5"},{url:"index.ac06585e.js",revision:"41abeaec61906010979f0471f8da0dfe"},{url:"index.ac06585e.js.map",revision:"dd16adbb40680dc35e9ee12e08e9577b"},{url:"index.d44e81ec.js",revision:"b90a75d7c5128c18c30bf621d43c8122"},{url:"index.d44e81ec.js.map",revision:"4f7febc735b0a98935455f8329214edd"},{url:"index.html",revision:"256656a6ed35cdc4ccc655c21cb14a37"},{url:"jurassic-park-no-one-cares.4b16d8e3.jpg",revision:"5971adaaec085b176061d7d98577a089"},{url:"knight-with-arrow-in-helmet.70d7b8ea.jpg",revision:"2d51aa7ceccfacf6e1fae33cf5279abb"},{url:"laughing-leo.ff4cf9b5.png",revision:"ffd00816a11fb66f16d05a5a06506e3a"},{url:"leonardo-dicaprio-cheers.1f5072fc.jpg",revision:"0c9762d1044fde55cfccc6d3f8abfedb"},{url:"logo.02439c4c.png",revision:"799182a75ab5b10e8b2088a717f0eff2"},{url:"manifest.webmanifest",revision:"1e34d4d2fb0da2246a35db6beeace137"},{url:"matrix-morpheus.2a17fef0.jpg",revision:"4306d531845e95029b5219f178ce546c"},{url:"milk-girls.c67a099a.jpg",revision:"d2a3c2d80f01fb790a6557978920ec36"},{url:"monk-temptation.9fa9b52f.jpg",revision:"f993e88e46226fb560559b5c8392ba6e"},{url:"monkey_puppet.a1128702.jpg",revision:"e3dd1d281e372a02ca2955eb62ce7dbb"},{url:"nervous.ecca1da9.jpg",revision:"f9500924e2154f15ff3249573963e867"},{url:"obama-medal.da4528cd.jpg",revision:"0b7d29347fd9bdf850b46293c8870fd8"},{url:"office-congrats.f658c72e.jpg",revision:"5e5823dd68191151a2313a3ec158e9cf"},{url:"one-does-not-simply.bd73a129.jpg",revision:"94eaa0e921189e88fe35ba1954988564"},{url:"OpenSans-Bold.8fceb72b.ttf",revision:"8ff9b5735ccb338267f0034d83fe8214"},{url:"OpenSans-Regular.edf9e01b.ttf",revision:"22ab03a6b890f2f142a137a38bf1d4ae"},{url:"Oswald-Bold.0f6a7ca6.ttf",revision:"452bfeb5bf78e71cc3cd6e720ac24bd4"},{url:"Oswald-Regular.89ec7d89.ttf",revision:"a7ccbd3cd9a9ff21ec41086dcc23ebe6"},{url:"photo.0328c485.svg",revision:"6b3fccb8598a897d641cc1dc75ed3592"},{url:"plague-hackers.01c70709.jpg",revision:"70712ddea9f2dd86ec34c1ffedffb3d0"},{url:"Pressuru.684952ea.ttf",revision:"60b45237c258b8e8f5d2fba5b304064e"},{url:"Roboto-Bold.fdb9b54a.ttf",revision:"b8e42971dec8d49207a8c8e2b919a6ac"},{url:"Roboto-Regular.ca197847.ttf",revision:"8a36205bd9b83e03af0591a004bc97f4"},{url:"RobotoCondensed-Bold.e1f96d4b.ttf",revision:"e38804ae070b58fbf4fdd88fd6853929"},{url:"RobotoCondensed-Regular.d585f5c7.ttf",revision:"0134dd8fe6fe708de73909a71d842780"},{url:"sad-pablo-escobar.48ee550d.jpg",revision:"1a49f6decc10da3ee849a1f94132c794"},{url:"save.46fbf12f.svg",revision:"3e1d90c414fadfd6727cc77f150e79e5"},{url:"say-that-again-i-dare-you.0c8b53b9.jpg",revision:"948be03975e613eaa08ac7f284491b40"},{url:"screenshot.3fbaa9cf.png",revision:"9df64fac2f8267d4f7db45082d60b09c"},{url:"share.0fccb277.svg",revision:"19d01499fa1fe8707366653db087ebac"},{url:"shirley-temple-laugh.8125357d.png",revision:"c2e13fffe87a3a1ff91d5a955a280fe1"},{url:"sparta-leonidas.0b603b26.jpg",revision:"e9ba2efb8ff797d0a9adf13135927c82"},{url:"spinner.4452ed29.svg",revision:"609c6274c68c19f6badaf5488b6aeef2"},{url:"star-wars-yoda.c7579c93.jpg",revision:"951e4ee52db27001190248f449651c4b"},{url:"success-kid.5d6212f8.jpg",revision:"b58ffaf338ffc8f4f06ef45478365c13"},{url:"sweating-bullets.f3c2d84f.jpg",revision:"3c9c50281665c688cacdd0d1da8f8f7d"},{url:"tell-me-the-truth-I-am-ready-to-hear-it.34eb1bcc.png",revision:"ecd53156061e4fdabf386c5f802035cf"},{url:"think-about-it.f4fc185d.jpg",revision:"f70b62834ba3ec34a2c9f2a80a5068b9"},{url:"this-is-fine.db15aaeb.jpg",revision:"dac2b7e7d3b1f18c72e48373cb4275e1"},{url:"toilet_guy.812f73a4.jpg",revision:"3f488def302d190dca09eb12c878d228"},{url:"trash.d9edab78.svg",revision:"db8971c7dab936bbe799ede7c1b9ac4b"},{url:"two-buttons.a42b7a04.jpg",revision:"611756fac300eb0f010491cbd95dda28"},{url:"waiting-skeleton.26f2ec8f.jpg",revision:"0eef934549392da6aa193fb86f9a8ab2"},{url:"water-tank-leaking-fix.772173b9.png",revision:"3ebfc2b2c42be514ec35fd3b9948686a"},{url:"whisper-and-goosebumps.2bc61488.jpg",revision:"962ccff862d6c9d416a330c8be901be9"},{url:"x-x-everywhere.4732733a.jpg",revision:"ca16fab0846148556e776aec3ff00739"},{url:"you-guys-are-getting-paid.ba5678cc.png",revision:"feb2da8a1fae966adae92bd1f8318153"}],{})})); //# sourceMappingURL=service-worker.js.map diff --git a/docs/service-worker.js.map b/docs/service-worker.js.map index 13f401f..2d526c5 100644 --- a/docs/service-worker.js.map +++ b/docs/service-worker.js.map @@ -1 +1 @@ -{"version":3,"file":"service-worker.js","sources":["../../../../../private/var/folders/vy/why3xmz53r57rfypb6dxq94c0000gp/T/3ad325b2aadb7f4d2171fe54fcde11b0/service-worker.js"],"sourcesContent":["import {clientsClaim as workbox_core_clientsClaim} from '/Users/georgeraptis/Projects/@georapbox/meme-generator/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/Users/georgeraptis/Projects/@georapbox/meme-generator/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"180.ad1ffa6f.png\",\n \"revision\": \"e500d9d7377de6d701630c6345a20b99\"\n },\n {\n \"url\": \"192.02439c4c.png\",\n \"revision\": \"799182a75ab5b10e8b2088a717f0eff2\"\n },\n {\n \"url\": \"384.3d08a4a6.png\",\n \"revision\": \"3eb04d3a80b60e082d7f79e1614070fe\"\n },\n {\n \"url\": \"512.00f88ae0.png\",\n \"revision\": \"511ad055b1865aa9bda7886cb0b9e336\"\n },\n {\n \"url\": \"add-image.bd815785.svg\",\n \"revision\": \"8c00e51567cbd039981fffb87c61dab1\"\n },\n {\n \"url\": \"always-has-been.08a66422.jpg\",\n \"revision\": \"d1b6401abd9cb8d382b7246bdb8ce0b5\"\n },\n {\n \"url\": \"anakin-padme.03c6b194.jpg\",\n \"revision\": \"baa00e8faccb9c63073f1db59274bd0d\"\n },\n {\n \"url\": \"aperture.4bf28ce8.svg\",\n \"revision\": \"1a6a5d3b06ba8aaa3e96658810752663\"\n },\n {\n \"url\": \"bad-luck-brian.8b018588.jpg\",\n \"revision\": \"2bb70408a0ab18038a376d80da91d336\"\n },\n {\n \"url\": \"batman-slapping-robin.aa8b8054.jpg\",\n \"revision\": \"6695faabd1eb772936f31ff0af36111d\"\n },\n {\n \"url\": \"bell-curve.1167fe19.jpg\",\n \"revision\": \"e26dac38583f6f98ea8ef98e4dab71e1\"\n },\n {\n \"url\": \"ben-affleck-smoking.17cc6114.jpg\",\n \"revision\": \"512c246cb818579340a6dc8dddea4f87\"\n },\n {\n \"url\": \"camera-reverse.284e8ac9.svg\",\n \"revision\": \"86e592b72bb2472bbacd0c823b3a3c78\"\n },\n {\n \"url\": \"camera.ed7aa43f.svg\",\n \"revision\": \"46f0c02466282ec5c4bf26141624316e\"\n },\n {\n \"url\": \"captain-picard-facepalm.7690614a.jpg\",\n \"revision\": \"926eecb6292d72fe2f99fd3113444c0b\"\n },\n {\n \"url\": \"car-drift.9255750c.jpg\",\n \"revision\": \"55b3735095d73c764704bccdda6f2bc1\"\n },\n {\n \"url\": \"change-my-mind.b49b92c2.jpg\",\n \"revision\": \"35e498b8b3c3b62e485ce4ffbe4cdfd1\"\n },\n {\n \"url\": \"chevron-down.ad14d981.svg\",\n \"revision\": \"5635cc35f04030576a62d2d649824495\"\n },\n {\n \"url\": \"chevron-left.20a2f252.svg\",\n \"revision\": \"a8334bfa7ef65b1095bfd54557d69beb\"\n },\n {\n \"url\": \"chevron-right.1be074ac.svg\",\n \"revision\": \"3d72992183afc0c2f0b6bf010dadc2a1\"\n },\n {\n \"url\": \"chevron-up.f532d8b6.svg\",\n \"revision\": \"e1bd8bbacf48b185c4b3deb18b9e0f2d\"\n },\n {\n \"url\": \"CourierPrime-Bold.3d6bf689.ttf\",\n \"revision\": \"4acfa45d29d240044e0075a8e58f0862\"\n },\n {\n \"url\": \"CourierPrime-Regular.3a25a501.ttf\",\n \"revision\": \"fba4686ed1d1b4ef05ab14db78805dbe\"\n },\n {\n \"url\": \"disaster-girl.536b1af4.jpg\",\n \"revision\": \"07542c2e7ea315f6a7b7311d2a88d074\"\n },\n {\n \"url\": \"distracted-boyfriend.22708891.jpg\",\n \"revision\": \"4ee61cd7c20689e2c8b7fa2dbffbdbc4\"\n },\n {\n \"url\": \"drake-hotline-bling.99013af7.jpg\",\n \"revision\": \"edce37df305e1b9c78d0a41ade363e29\"\n },\n {\n \"url\": \"drowning-kid-in-the-pool.37435682.jpg\",\n \"revision\": \"99e976a664709f7fe0b7141e2661a42b\"\n },\n {\n \"url\": \"favicon-192.02439c4c.png\",\n \"revision\": \"799182a75ab5b10e8b2088a717f0eff2\"\n },\n {\n \"url\": \"finding-neverland.25f9c4f0.jpg\",\n \"revision\": \"4557c9d30b0e3114953f9cc8e981c622\"\n },\n {\n \"url\": \"gear.b3b5d1a5.svg\",\n \"revision\": \"5e0b2045d7dc4768b1ceb199d83ab6f0\"\n },\n {\n \"url\": \"gibson-jesus.1224d195.jpg\",\n \"revision\": \"b26e0d89414371dfbf7a1e1bbada7e15\"\n },\n {\n \"url\": \"girls-gossiping.da75b154.jpg\",\n \"revision\": \"97f0d159d65349dfdd821f6294d8b177\"\n },\n {\n \"url\": \"greta-thunberg-how-dare-you.ddceea0b.jpg\",\n \"revision\": \"dbe7e341b66c0e71da9db2f49eddbd9c\"\n },\n {\n \"url\": \"grinning-girl.9a1a3b6a.jpg\",\n \"revision\": \"133c4124813f1dfeff00a9e0a735b5c3\"\n },\n {\n \"url\": \"group-therapy.c82c3502.jpg\",\n \"revision\": \"a79a27311d3969bf370b8846bea1789c\"\n },\n {\n \"url\": \"hack-the-planet.29b5550a.jpg\",\n \"revision\": \"207de9c3f83de707d99ea7255f743fc1\"\n },\n {\n \"url\": \"hide-the-pain-harold.dc41d0f5.jpg\",\n \"revision\": \"af3a4d69c625740558a9adc66967797c\"\n },\n {\n \"url\": \"i-bet-hes-thinking-about-other-women.c80f1ce0.jpg\",\n \"revision\": \"df6904f1480a0210525311a594cd51b7\"\n },\n {\n \"url\": \"i-dont-always.cd8fe191.jpg\",\n \"revision\": \"6c0fa2f7428f252d177a52b34c93aacb\"\n },\n {\n \"url\": \"i-see-dead-people.89330beb.jpg\",\n \"revision\": \"16ff33b79a8ce266b890d2f2e53fdbc1\"\n },\n {\n \"url\": \"index.4e55d6a2.css\",\n \"revision\": \"eec5434764d9d63cc7c3298cf000b06a\"\n },\n {\n \"url\": \"index.4e55d6a2.css.map\",\n \"revision\": \"21c1c7659d6accb2a979c93d9a428803\"\n },\n {\n \"url\": \"index.4f090451.js\",\n \"revision\": \"b16f3c2872fc9b1f8fcaebe0d5e90374\"\n },\n {\n \"url\": \"index.4f090451.js.map\",\n \"revision\": \"dcf7631d232b5240ff81cae0c911bb19\"\n },\n {\n \"url\": \"index.671cb7f2.js\",\n \"revision\": \"5b0c0ec1a3555a1978b9a817a19eb98f\"\n },\n {\n \"url\": \"index.671cb7f2.js.map\",\n \"revision\": \"660967fb2344356d7d6e1672b0399057\"\n },\n {\n \"url\": \"index.89efe45b.js\",\n \"revision\": \"6814a61841cd719f59765d1ee48ea09a\"\n },\n {\n \"url\": \"index.89efe45b.js.map\",\n \"revision\": \"c88920bec0571a6511e504850de79c03\"\n },\n {\n \"url\": \"index.d44e81ec.js\",\n \"revision\": \"b90a75d7c5128c18c30bf621d43c8122\"\n },\n {\n \"url\": \"index.d44e81ec.js.map\",\n \"revision\": \"4f7febc735b0a98935455f8329214edd\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"8f1de0ad5c10da1dd43408256146b92d\"\n },\n {\n \"url\": \"jurassic-park-no-one-cares.4b16d8e3.jpg\",\n \"revision\": \"5971adaaec085b176061d7d98577a089\"\n },\n {\n \"url\": \"knight-with-arrow-in-helmet.70d7b8ea.jpg\",\n \"revision\": \"2d51aa7ceccfacf6e1fae33cf5279abb\"\n },\n {\n \"url\": \"laughing-leo.ff4cf9b5.png\",\n \"revision\": \"ffd00816a11fb66f16d05a5a06506e3a\"\n },\n {\n \"url\": \"leonardo-dicaprio-cheers.1f5072fc.jpg\",\n \"revision\": \"0c9762d1044fde55cfccc6d3f8abfedb\"\n },\n {\n \"url\": \"logo.02439c4c.png\",\n \"revision\": \"799182a75ab5b10e8b2088a717f0eff2\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"1e34d4d2fb0da2246a35db6beeace137\"\n },\n {\n \"url\": \"matrix-morpheus.2a17fef0.jpg\",\n \"revision\": \"4306d531845e95029b5219f178ce546c\"\n },\n {\n \"url\": \"milk-girls.c67a099a.jpg\",\n \"revision\": \"d2a3c2d80f01fb790a6557978920ec36\"\n },\n {\n \"url\": \"monk-temptation.9fa9b52f.jpg\",\n \"revision\": \"f993e88e46226fb560559b5c8392ba6e\"\n },\n {\n \"url\": \"monkey_puppet.a1128702.jpg\",\n \"revision\": \"e3dd1d281e372a02ca2955eb62ce7dbb\"\n },\n {\n \"url\": \"nervous.ecca1da9.jpg\",\n \"revision\": \"f9500924e2154f15ff3249573963e867\"\n },\n {\n \"url\": \"obama-medal.da4528cd.jpg\",\n \"revision\": \"0b7d29347fd9bdf850b46293c8870fd8\"\n },\n {\n \"url\": \"office-congrats.f658c72e.jpg\",\n \"revision\": \"5e5823dd68191151a2313a3ec158e9cf\"\n },\n {\n \"url\": \"one-does-not-simply.bd73a129.jpg\",\n \"revision\": \"94eaa0e921189e88fe35ba1954988564\"\n },\n {\n \"url\": \"OpenSans-Bold.8fceb72b.ttf\",\n \"revision\": \"8ff9b5735ccb338267f0034d83fe8214\"\n },\n {\n \"url\": \"OpenSans-Regular.edf9e01b.ttf\",\n \"revision\": \"22ab03a6b890f2f142a137a38bf1d4ae\"\n },\n {\n \"url\": \"Oswald-Bold.0f6a7ca6.ttf\",\n \"revision\": \"452bfeb5bf78e71cc3cd6e720ac24bd4\"\n },\n {\n \"url\": \"Oswald-Regular.89ec7d89.ttf\",\n \"revision\": \"a7ccbd3cd9a9ff21ec41086dcc23ebe6\"\n },\n {\n \"url\": \"photo.0328c485.svg\",\n \"revision\": \"6b3fccb8598a897d641cc1dc75ed3592\"\n },\n {\n \"url\": \"plague-hackers.01c70709.jpg\",\n \"revision\": \"70712ddea9f2dd86ec34c1ffedffb3d0\"\n },\n {\n \"url\": \"Pressuru.684952ea.ttf\",\n \"revision\": \"60b45237c258b8e8f5d2fba5b304064e\"\n },\n {\n \"url\": \"Roboto-Bold.fdb9b54a.ttf\",\n \"revision\": \"b8e42971dec8d49207a8c8e2b919a6ac\"\n },\n {\n \"url\": \"Roboto-Regular.ca197847.ttf\",\n \"revision\": \"8a36205bd9b83e03af0591a004bc97f4\"\n },\n {\n \"url\": \"RobotoCondensed-Bold.e1f96d4b.ttf\",\n \"revision\": \"e38804ae070b58fbf4fdd88fd6853929\"\n },\n {\n \"url\": \"RobotoCondensed-Regular.d585f5c7.ttf\",\n \"revision\": \"0134dd8fe6fe708de73909a71d842780\"\n },\n {\n \"url\": \"sad-pablo-escobar.48ee550d.jpg\",\n \"revision\": \"1a49f6decc10da3ee849a1f94132c794\"\n },\n {\n \"url\": \"save.46fbf12f.svg\",\n \"revision\": \"3e1d90c414fadfd6727cc77f150e79e5\"\n },\n {\n \"url\": \"say-that-again-i-dare-you.0c8b53b9.jpg\",\n \"revision\": \"948be03975e613eaa08ac7f284491b40\"\n },\n {\n \"url\": \"screenshot.3fbaa9cf.png\",\n \"revision\": \"9df64fac2f8267d4f7db45082d60b09c\"\n },\n {\n \"url\": \"share.0fccb277.svg\",\n \"revision\": \"19d01499fa1fe8707366653db087ebac\"\n },\n {\n \"url\": \"shirley-temple-laugh.8125357d.png\",\n \"revision\": \"c2e13fffe87a3a1ff91d5a955a280fe1\"\n },\n {\n \"url\": \"sparta-leonidas.0b603b26.jpg\",\n \"revision\": \"e9ba2efb8ff797d0a9adf13135927c82\"\n },\n {\n \"url\": \"spinner.4452ed29.svg\",\n \"revision\": \"609c6274c68c19f6badaf5488b6aeef2\"\n },\n {\n \"url\": \"star-wars-yoda.c7579c93.jpg\",\n \"revision\": \"951e4ee52db27001190248f449651c4b\"\n },\n {\n \"url\": \"success-kid.5d6212f8.jpg\",\n \"revision\": \"b58ffaf338ffc8f4f06ef45478365c13\"\n },\n {\n \"url\": \"sweating-bullets.f3c2d84f.jpg\",\n \"revision\": \"3c9c50281665c688cacdd0d1da8f8f7d\"\n },\n {\n \"url\": \"tell-me-the-truth-I-am-ready-to-hear-it.34eb1bcc.png\",\n \"revision\": \"ecd53156061e4fdabf386c5f802035cf\"\n },\n {\n \"url\": \"think-about-it.f4fc185d.jpg\",\n \"revision\": \"f70b62834ba3ec34a2c9f2a80a5068b9\"\n },\n {\n \"url\": \"this-is-fine.db15aaeb.jpg\",\n \"revision\": \"dac2b7e7d3b1f18c72e48373cb4275e1\"\n },\n {\n \"url\": \"toilet_guy.812f73a4.jpg\",\n \"revision\": \"3f488def302d190dca09eb12c878d228\"\n },\n {\n \"url\": \"trash.d9edab78.svg\",\n \"revision\": \"db8971c7dab936bbe799ede7c1b9ac4b\"\n },\n {\n \"url\": \"two-buttons.a42b7a04.jpg\",\n \"revision\": \"611756fac300eb0f010491cbd95dda28\"\n },\n {\n \"url\": \"waiting-skeleton.26f2ec8f.jpg\",\n \"revision\": \"0eef934549392da6aa193fb86f9a8ab2\"\n },\n {\n \"url\": \"water-tank-leaking-fix.772173b9.png\",\n \"revision\": \"3ebfc2b2c42be514ec35fd3b9948686a\"\n },\n {\n \"url\": \"whisper-and-goosebumps.2bc61488.jpg\",\n \"revision\": \"962ccff862d6c9d416a330c8be901be9\"\n },\n {\n \"url\": \"x-x-everywhere.4732733a.jpg\",\n \"revision\": \"ca16fab0846148556e776aec3ff00739\"\n },\n {\n \"url\": \"you-guys-are-getting-paid.ba5678cc.png\",\n \"revision\": \"feb2da8a1fae966adae92bd1f8318153\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"0nBAoBAA,KAAKC,cAELC,EAAAA,eAQAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,qCAEb,CAAA"} \ No newline at end of file +{"version":3,"file":"service-worker.js","sources":["../../../../../private/var/folders/vy/why3xmz53r57rfypb6dxq94c0000gp/T/c0465a69c9d05b2610a66f2c42bc78b3/service-worker.js"],"sourcesContent":["import {clientsClaim as workbox_core_clientsClaim} from '/Users/georgeraptis/Projects/@georapbox/meme-generator/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/Users/georgeraptis/Projects/@georapbox/meme-generator/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"180.ad1ffa6f.png\",\n \"revision\": \"e500d9d7377de6d701630c6345a20b99\"\n },\n {\n \"url\": \"192.02439c4c.png\",\n \"revision\": \"799182a75ab5b10e8b2088a717f0eff2\"\n },\n {\n \"url\": \"384.3d08a4a6.png\",\n \"revision\": \"3eb04d3a80b60e082d7f79e1614070fe\"\n },\n {\n \"url\": \"512.00f88ae0.png\",\n \"revision\": \"511ad055b1865aa9bda7886cb0b9e336\"\n },\n {\n \"url\": \"add-image.bd815785.svg\",\n \"revision\": \"8c00e51567cbd039981fffb87c61dab1\"\n },\n {\n \"url\": \"always-has-been.08a66422.jpg\",\n \"revision\": \"d1b6401abd9cb8d382b7246bdb8ce0b5\"\n },\n {\n \"url\": \"anakin-padme.03c6b194.jpg\",\n \"revision\": \"baa00e8faccb9c63073f1db59274bd0d\"\n },\n {\n \"url\": \"aperture.4bf28ce8.svg\",\n \"revision\": \"1a6a5d3b06ba8aaa3e96658810752663\"\n },\n {\n \"url\": \"bad-luck-brian.8b018588.jpg\",\n \"revision\": \"2bb70408a0ab18038a376d80da91d336\"\n },\n {\n \"url\": \"batman-slapping-robin.aa8b8054.jpg\",\n \"revision\": \"6695faabd1eb772936f31ff0af36111d\"\n },\n {\n \"url\": \"bell-curve.1167fe19.jpg\",\n \"revision\": \"e26dac38583f6f98ea8ef98e4dab71e1\"\n },\n {\n \"url\": \"ben-affleck-smoking.17cc6114.jpg\",\n \"revision\": \"512c246cb818579340a6dc8dddea4f87\"\n },\n {\n \"url\": \"camera-reverse.284e8ac9.svg\",\n \"revision\": \"86e592b72bb2472bbacd0c823b3a3c78\"\n },\n {\n \"url\": \"camera.ed7aa43f.svg\",\n \"revision\": \"46f0c02466282ec5c4bf26141624316e\"\n },\n {\n \"url\": \"captain-picard-facepalm.7690614a.jpg\",\n \"revision\": \"926eecb6292d72fe2f99fd3113444c0b\"\n },\n {\n \"url\": \"car-drift.9255750c.jpg\",\n \"revision\": \"55b3735095d73c764704bccdda6f2bc1\"\n },\n {\n \"url\": \"change-my-mind.b49b92c2.jpg\",\n \"revision\": \"35e498b8b3c3b62e485ce4ffbe4cdfd1\"\n },\n {\n \"url\": \"chevron-down.ad14d981.svg\",\n \"revision\": \"5635cc35f04030576a62d2d649824495\"\n },\n {\n \"url\": \"chevron-left.20a2f252.svg\",\n \"revision\": \"a8334bfa7ef65b1095bfd54557d69beb\"\n },\n {\n \"url\": \"chevron-right.1be074ac.svg\",\n \"revision\": \"3d72992183afc0c2f0b6bf010dadc2a1\"\n },\n {\n \"url\": \"chevron-up.f532d8b6.svg\",\n \"revision\": \"e1bd8bbacf48b185c4b3deb18b9e0f2d\"\n },\n {\n \"url\": \"CourierPrime-Bold.3d6bf689.ttf\",\n \"revision\": \"4acfa45d29d240044e0075a8e58f0862\"\n },\n {\n \"url\": \"CourierPrime-Regular.3a25a501.ttf\",\n \"revision\": \"fba4686ed1d1b4ef05ab14db78805dbe\"\n },\n {\n \"url\": \"disaster-girl.536b1af4.jpg\",\n \"revision\": \"07542c2e7ea315f6a7b7311d2a88d074\"\n },\n {\n \"url\": \"distracted-boyfriend.22708891.jpg\",\n \"revision\": \"4ee61cd7c20689e2c8b7fa2dbffbdbc4\"\n },\n {\n \"url\": \"drake-hotline-bling.99013af7.jpg\",\n \"revision\": \"edce37df305e1b9c78d0a41ade363e29\"\n },\n {\n \"url\": \"drowning-kid-in-the-pool.37435682.jpg\",\n \"revision\": \"99e976a664709f7fe0b7141e2661a42b\"\n },\n {\n \"url\": \"favicon-192.02439c4c.png\",\n \"revision\": \"799182a75ab5b10e8b2088a717f0eff2\"\n },\n {\n \"url\": \"finding-neverland.25f9c4f0.jpg\",\n \"revision\": \"4557c9d30b0e3114953f9cc8e981c622\"\n },\n {\n \"url\": \"gear.b3b5d1a5.svg\",\n \"revision\": \"5e0b2045d7dc4768b1ceb199d83ab6f0\"\n },\n {\n \"url\": \"gibson-jesus.1224d195.jpg\",\n \"revision\": \"b26e0d89414371dfbf7a1e1bbada7e15\"\n },\n {\n \"url\": \"girls-gossiping.da75b154.jpg\",\n \"revision\": \"97f0d159d65349dfdd821f6294d8b177\"\n },\n {\n \"url\": \"greta-thunberg-how-dare-you.ddceea0b.jpg\",\n \"revision\": \"dbe7e341b66c0e71da9db2f49eddbd9c\"\n },\n {\n \"url\": \"grinning-girl.9a1a3b6a.jpg\",\n \"revision\": \"133c4124813f1dfeff00a9e0a735b5c3\"\n },\n {\n \"url\": \"group-therapy.c82c3502.jpg\",\n \"revision\": \"a79a27311d3969bf370b8846bea1789c\"\n },\n {\n \"url\": \"hack-the-planet.29b5550a.jpg\",\n \"revision\": \"207de9c3f83de707d99ea7255f743fc1\"\n },\n {\n \"url\": \"hide-the-pain-harold.dc41d0f5.jpg\",\n \"revision\": \"af3a4d69c625740558a9adc66967797c\"\n },\n {\n \"url\": \"i-bet-hes-thinking-about-other-women.c80f1ce0.jpg\",\n \"revision\": \"df6904f1480a0210525311a594cd51b7\"\n },\n {\n \"url\": \"i-dont-always.cd8fe191.jpg\",\n \"revision\": \"6c0fa2f7428f252d177a52b34c93aacb\"\n },\n {\n \"url\": \"i-see-dead-people.89330beb.jpg\",\n \"revision\": \"16ff33b79a8ce266b890d2f2e53fdbc1\"\n },\n {\n \"url\": \"index.47ef8ac4.css\",\n \"revision\": \"a39b9a36c2b88296d2f053a0b8939458\"\n },\n {\n \"url\": \"index.47ef8ac4.css.map\",\n \"revision\": \"f7562c07c38c3e1bc460220272dad54e\"\n },\n {\n \"url\": \"index.89efe45b.js\",\n \"revision\": \"6814a61841cd719f59765d1ee48ea09a\"\n },\n {\n \"url\": \"index.89efe45b.js.map\",\n \"revision\": \"c88920bec0571a6511e504850de79c03\"\n },\n {\n \"url\": \"index.a2b8f4c4.js\",\n \"revision\": \"f87f9946fac65f0e0592ebd224679ff4\"\n },\n {\n \"url\": \"index.a2b8f4c4.js.map\",\n \"revision\": \"5cb520d3efdc0698178c960708066aa5\"\n },\n {\n \"url\": \"index.ac06585e.js\",\n \"revision\": \"41abeaec61906010979f0471f8da0dfe\"\n },\n {\n \"url\": \"index.ac06585e.js.map\",\n \"revision\": \"dd16adbb40680dc35e9ee12e08e9577b\"\n },\n {\n \"url\": \"index.d44e81ec.js\",\n \"revision\": \"b90a75d7c5128c18c30bf621d43c8122\"\n },\n {\n \"url\": \"index.d44e81ec.js.map\",\n \"revision\": \"4f7febc735b0a98935455f8329214edd\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"256656a6ed35cdc4ccc655c21cb14a37\"\n },\n {\n \"url\": \"jurassic-park-no-one-cares.4b16d8e3.jpg\",\n \"revision\": \"5971adaaec085b176061d7d98577a089\"\n },\n {\n \"url\": \"knight-with-arrow-in-helmet.70d7b8ea.jpg\",\n \"revision\": \"2d51aa7ceccfacf6e1fae33cf5279abb\"\n },\n {\n \"url\": \"laughing-leo.ff4cf9b5.png\",\n \"revision\": \"ffd00816a11fb66f16d05a5a06506e3a\"\n },\n {\n \"url\": \"leonardo-dicaprio-cheers.1f5072fc.jpg\",\n \"revision\": \"0c9762d1044fde55cfccc6d3f8abfedb\"\n },\n {\n \"url\": \"logo.02439c4c.png\",\n \"revision\": \"799182a75ab5b10e8b2088a717f0eff2\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"1e34d4d2fb0da2246a35db6beeace137\"\n },\n {\n \"url\": \"matrix-morpheus.2a17fef0.jpg\",\n \"revision\": \"4306d531845e95029b5219f178ce546c\"\n },\n {\n \"url\": \"milk-girls.c67a099a.jpg\",\n \"revision\": \"d2a3c2d80f01fb790a6557978920ec36\"\n },\n {\n \"url\": \"monk-temptation.9fa9b52f.jpg\",\n \"revision\": \"f993e88e46226fb560559b5c8392ba6e\"\n },\n {\n \"url\": \"monkey_puppet.a1128702.jpg\",\n \"revision\": \"e3dd1d281e372a02ca2955eb62ce7dbb\"\n },\n {\n \"url\": \"nervous.ecca1da9.jpg\",\n \"revision\": \"f9500924e2154f15ff3249573963e867\"\n },\n {\n \"url\": \"obama-medal.da4528cd.jpg\",\n \"revision\": \"0b7d29347fd9bdf850b46293c8870fd8\"\n },\n {\n \"url\": \"office-congrats.f658c72e.jpg\",\n \"revision\": \"5e5823dd68191151a2313a3ec158e9cf\"\n },\n {\n \"url\": \"one-does-not-simply.bd73a129.jpg\",\n \"revision\": \"94eaa0e921189e88fe35ba1954988564\"\n },\n {\n \"url\": \"OpenSans-Bold.8fceb72b.ttf\",\n \"revision\": \"8ff9b5735ccb338267f0034d83fe8214\"\n },\n {\n \"url\": \"OpenSans-Regular.edf9e01b.ttf\",\n \"revision\": \"22ab03a6b890f2f142a137a38bf1d4ae\"\n },\n {\n \"url\": \"Oswald-Bold.0f6a7ca6.ttf\",\n \"revision\": \"452bfeb5bf78e71cc3cd6e720ac24bd4\"\n },\n {\n \"url\": \"Oswald-Regular.89ec7d89.ttf\",\n \"revision\": \"a7ccbd3cd9a9ff21ec41086dcc23ebe6\"\n },\n {\n \"url\": \"photo.0328c485.svg\",\n \"revision\": \"6b3fccb8598a897d641cc1dc75ed3592\"\n },\n {\n \"url\": \"plague-hackers.01c70709.jpg\",\n \"revision\": \"70712ddea9f2dd86ec34c1ffedffb3d0\"\n },\n {\n \"url\": \"Pressuru.684952ea.ttf\",\n \"revision\": \"60b45237c258b8e8f5d2fba5b304064e\"\n },\n {\n \"url\": \"Roboto-Bold.fdb9b54a.ttf\",\n \"revision\": \"b8e42971dec8d49207a8c8e2b919a6ac\"\n },\n {\n \"url\": \"Roboto-Regular.ca197847.ttf\",\n \"revision\": \"8a36205bd9b83e03af0591a004bc97f4\"\n },\n {\n \"url\": \"RobotoCondensed-Bold.e1f96d4b.ttf\",\n \"revision\": \"e38804ae070b58fbf4fdd88fd6853929\"\n },\n {\n \"url\": \"RobotoCondensed-Regular.d585f5c7.ttf\",\n \"revision\": \"0134dd8fe6fe708de73909a71d842780\"\n },\n {\n \"url\": \"sad-pablo-escobar.48ee550d.jpg\",\n \"revision\": \"1a49f6decc10da3ee849a1f94132c794\"\n },\n {\n \"url\": \"save.46fbf12f.svg\",\n \"revision\": \"3e1d90c414fadfd6727cc77f150e79e5\"\n },\n {\n \"url\": \"say-that-again-i-dare-you.0c8b53b9.jpg\",\n \"revision\": \"948be03975e613eaa08ac7f284491b40\"\n },\n {\n \"url\": \"screenshot.3fbaa9cf.png\",\n \"revision\": \"9df64fac2f8267d4f7db45082d60b09c\"\n },\n {\n \"url\": \"share.0fccb277.svg\",\n \"revision\": \"19d01499fa1fe8707366653db087ebac\"\n },\n {\n \"url\": \"shirley-temple-laugh.8125357d.png\",\n \"revision\": \"c2e13fffe87a3a1ff91d5a955a280fe1\"\n },\n {\n \"url\": \"sparta-leonidas.0b603b26.jpg\",\n \"revision\": \"e9ba2efb8ff797d0a9adf13135927c82\"\n },\n {\n \"url\": \"spinner.4452ed29.svg\",\n \"revision\": \"609c6274c68c19f6badaf5488b6aeef2\"\n },\n {\n \"url\": \"star-wars-yoda.c7579c93.jpg\",\n \"revision\": \"951e4ee52db27001190248f449651c4b\"\n },\n {\n \"url\": \"success-kid.5d6212f8.jpg\",\n \"revision\": \"b58ffaf338ffc8f4f06ef45478365c13\"\n },\n {\n \"url\": \"sweating-bullets.f3c2d84f.jpg\",\n \"revision\": \"3c9c50281665c688cacdd0d1da8f8f7d\"\n },\n {\n \"url\": \"tell-me-the-truth-I-am-ready-to-hear-it.34eb1bcc.png\",\n \"revision\": \"ecd53156061e4fdabf386c5f802035cf\"\n },\n {\n \"url\": \"think-about-it.f4fc185d.jpg\",\n \"revision\": \"f70b62834ba3ec34a2c9f2a80a5068b9\"\n },\n {\n \"url\": \"this-is-fine.db15aaeb.jpg\",\n \"revision\": \"dac2b7e7d3b1f18c72e48373cb4275e1\"\n },\n {\n \"url\": \"toilet_guy.812f73a4.jpg\",\n \"revision\": \"3f488def302d190dca09eb12c878d228\"\n },\n {\n \"url\": \"trash.d9edab78.svg\",\n \"revision\": \"db8971c7dab936bbe799ede7c1b9ac4b\"\n },\n {\n \"url\": \"two-buttons.a42b7a04.jpg\",\n \"revision\": \"611756fac300eb0f010491cbd95dda28\"\n },\n {\n \"url\": \"waiting-skeleton.26f2ec8f.jpg\",\n \"revision\": \"0eef934549392da6aa193fb86f9a8ab2\"\n },\n {\n \"url\": \"water-tank-leaking-fix.772173b9.png\",\n \"revision\": \"3ebfc2b2c42be514ec35fd3b9948686a\"\n },\n {\n \"url\": \"whisper-and-goosebumps.2bc61488.jpg\",\n \"revision\": \"962ccff862d6c9d416a330c8be901be9\"\n },\n {\n \"url\": \"x-x-everywhere.4732733a.jpg\",\n \"revision\": \"ca16fab0846148556e776aec3ff00739\"\n },\n {\n \"url\": \"you-guys-are-getting-paid.ba5678cc.png\",\n \"revision\": \"feb2da8a1fae966adae92bd1f8318153\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"0nBAoBAA,KAAKC,cAELC,EAAAA,eAQAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,qCAEb,CAAA"} \ No newline at end of file diff --git a/src/css/main.css b/src/css/main.css index cb5830f..9d8c6a1 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -291,8 +291,8 @@ modal-element { --me-width: 600px; } -#downloadModal::part(base) { - max-width: 1024px; +#downloadModal { + --me-width: 900px; } modal-element::part(base):focus-visible {