From 6fa11d3c342970e0bba525d29c4cd3b25b501f82 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Tue, 5 Nov 2024 12:35:20 +0700 Subject: [PATCH 01/38] feat: keymanweb new interfaces are done part 1 --- cdn/dev/css/kmw-body.css | 106 +++++++++++++++ cdn/dev/css/kmw-desktop.css | 69 ++++++++-- cdn/dev/css/kmw-header.css | 180 ++++++++++++++++++++++++ cdn/dev/img/keymanweb-mini-logo-88.png | Bin 0 -> 3182 bytes inc/head.php | 5 + index.php | 181 +++++++++++++++++-------- 6 files changed, 476 insertions(+), 65 deletions(-) create mode 100644 cdn/dev/css/kmw-body.css create mode 100644 cdn/dev/css/kmw-header.css create mode 100644 cdn/dev/img/keymanweb-mini-logo-88.png diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css new file mode 100644 index 0000000..d9c7aae --- /dev/null +++ b/cdn/dev/css/kmw-body.css @@ -0,0 +1,106 @@ +body { + background-color: #F6F6F6; +} + +.text-area-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; +} + +.type-your-keyboard { + width: 80%; + scroll-behavior: auto; + resize: none; + margin-top: 120px; +} + +.type-your-keyboard textarea { + box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; + height: 500px; +} + +/* + keyboard +*/ +.keys { + display: flex; + list-style: none; +} + +.keyboard-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 10px; +} +.keyboard-container div { + width: 50%; +} + +.keyboard-container div ul li { + box-shadow: 0px -6px 10px rgba(255, 255, 255, 1), 0px 4px 15px rgba(0, 0, 0, 0.15); + transition: 0.5s; + height: 2.5em; + font-size: 1em; + width: 3em; + margin: 0.3em; + background-color: #f2f2f2; + border-radius: 0.5em; + line-height: 2.5em; + letter-spacing: 1px; + text-align: center; +} + +.keyboard-container div ul li:hover { + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.15); + cursor: pointer; + top: 3px; +} + +#red { + background-color: #a3f7bf; + width: 5em; +} + +#blue { + background-color: #9aebed; + width: 6em; +} + +#rebeca { + background-color: #fecd1a; + width: 8em; +} + +#green { + background-color: #fa86be; + width: 6em; +} + +#up { + background-color: #8594e4; + width: 8em; +} + +#yellow { + background-color: #fffcab; + width: 5em; +} + +#grey { + background-color: #898989; + width: 3.3em; +} + +#one { + background-color: #faafff; + width: 5em; +} + +#two { + width: 24.5em; +} \ No newline at end of file diff --git a/cdn/dev/css/kmw-desktop.css b/cdn/dev/css/kmw-desktop.css index 2e5003c..8c9afbe 100644 --- a/cdn/dev/css/kmw-desktop.css +++ b/cdn/dev/css/kmw-desktop.css @@ -45,7 +45,7 @@ header, #content, footer { .box { -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - } +} /* =================== @@ -53,9 +53,12 @@ header, #content, footer { =================== */ header { - margin-top:0px; - height: 96px; - } + position: fixed; + margin-left: auto; + margin-right: auto; + padding-bottom: 30px; + height: 70px; +} header > div > img { width: 100%; @@ -63,19 +66,57 @@ header > div > img { height: 8px; } +#headerBackground { + display: grid; + grid-template-columns: 10% 70% 20%; + justify-content: left; + align-items: center; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + margin: 0px 0px; + background-color: white; +} + +#headerLeft { + display: flex; + flex-direction: row; +} + #headerLeft img { display: block; /* default (inline) display inserts an unwanted bottom border */ - margin-top:0px; - margin-left:28px; - height:88px; + margin: 0px 20px; + height:50px; /*width: 660px;*/ /*-webkit-border-radius: 0px 0px 8px 8px; -moz-border-radius: 0px 0px 8px 8px; border-radius: 0px 0px 8px 8px;*/ } + +#headerMiddle { + display: flex; + flex-direction: row; + justify-content: left; + align-items: center; + width: 100%; + margin-left: 20px; +} + +#headerMiddle div { + margin: 15px; +} + #headerRight { - display: block; - float: right; - text-align: right; - } + display: flex; + flex-direction: row; + justify-content: end; + align-items: center; + width: 100%; +} + +#headerRight div { + margin-right: 20px; +} + +#headerRight div > * { + margin-left: 10px; +} #headerRight-beta { display: block; @@ -88,6 +129,10 @@ header > div > img { #headerRight-link { padding: 0 12px 0; } + +#headerBar { + width: 100%; +} /* ==================== ==Content Elements== @@ -441,6 +486,8 @@ aside #learn { } .footer{ + bottom: 0; + left: 0; float: left; text-align: center; width: 100%; diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css new file mode 100644 index 0000000..0114584 --- /dev/null +++ b/cdn/dev/css/kmw-header.css @@ -0,0 +1,180 @@ + +/* + Menu +*/ +svg { + fill-rule: evenodd; + clip-rule: evenodd; + stroke-linecap: round; + stroke-linejoin: round; + stroke-miterlimit: 1.5; + cursor:pointer; +} + +#menu path { + fill: none; + stroke: #FC7200; + stroke-width: 5px; +} + +svg + svg { + margin-left: 1.5rem; +} + +.icons { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; +} + +#top, #bottom { + stroke-dasharray: 30, 75.39; + transition: all 0.6s cubic-bezier(0.6, 0.33, 0.67, 1.29); +} + +svg.active #top, svg.active #bottom { + stroke-dasharray: 75.39; + stroke-dashoffset: -60; +} + +svg:nth-child(2) { + transform: rotate(0deg); + transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1); +} + +svg:nth-child(2) path { + transition: all 0.4s ease-in-out 0.6s; +} + +svg:nth-child(2).active { + transform: rotate(180deg); +} + +.rocket #top { + stroke-dasharray: 30, 88; +} + +#menu-list { + display: none; +} +/* + Search +*/ + +.form { + position: relative; + width: 50%; +} + +.form .left-pan { + position: absolute; + right: 17px; + top: 10px; + padding: 2px; + border-left: 1px solid #000000; +} + +.left-pan { + padding-left: 7px; +} + +.left-pan i { + padding-left: 10px; +} + +.form .form-input { + height: 50px; + width: 100%; + text-indent: 33px; + border-radius: 20px; + text-align: left; + background-color: rgb(233, 228, 228); +} + +.form-input:focus { + box-shadow: none; + border:none; +} + +/* + Keyboard Dropdown +*/ +.dropdown { + width: 25%; + background-color: #B92034; + color: white; + margin-left: 25px; +} + +.dropdown-toggle{ + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + height: 50px; + border: 2px solid #B92034; + font-weight: 600; +} +.dropdown-toggle:focus{ + box-shadow: none !important; +} + +.dropdown-toggle::after { + display: none; +} + +.dropdown-menu{ + width: 200px; + border: 2px solid #B92034; + padding: 0rem 0; + transform: translate3d(0px, 50px, 0px) !important; +} + +.dropdown-item:focus, .dropdown-item:hover { + color: #ffffff; + background-color: #B92034; + padding: 12px; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 12px; +} + +/* + Tools +*/ + +input[type="range"] { + font-size: 1.5rem; + width: 100px; +} + +input[type="range"] { + color: #69B7D2; + --thumb-height: 1.125em; + --track-height: 0.125em; + --track-color: rgba(186, 0, 0, 0.2); + --brightness-hover: 180%; + --brightness-down: 80%; + --clip-edges: 0.125em; +} + +input[type="range"] { + position: relative; + background: #fff0; + overflow: hidden; +} + +input[type="range"]:active { + cursor: grabbing; +} + +input[type="range"]:disabled { + filter: grayscale(1); + opacity: 0.3; + cursor: not-allowed; +} + diff --git a/cdn/dev/img/keymanweb-mini-logo-88.png b/cdn/dev/img/keymanweb-mini-logo-88.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b274e1b305b3b8e13859c2deb63f0714fe5120 GIT binary patch literal 3182 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 U{tjgMq5uE@07*qoM6N<$f<7Joj{pDw literal 0 HcmV?d00001 diff --git a/inc/head.php b/inc/head.php index caa4ddc..bc47e57 100644 --- a/inc/head.php +++ b/inc/head.php @@ -126,6 +126,11 @@ function doInitSentry() { " /> " /> " /> +" /> +" /> +" /> + + - + + + From bc905cb5d45bc04efa57a0bd4ef70c22a09c353d Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Thu, 14 Nov 2024 10:58:37 +0700 Subject: [PATCH 04/38] feat: delete a new folder frontend_kmw/index.php --- frontend_kmw/index.php | 82 ------------------------------------------ 1 file changed, 82 deletions(-) delete mode 100644 frontend_kmw/index.php diff --git a/frontend_kmw/index.php b/frontend_kmw/index.php deleted file mode 100644 index 3baf70a..0000000 --- a/frontend_kmw/index.php +++ /dev/null @@ -1,82 +0,0 @@ - - - -
-
-
- - Pre-release version - Return to version - - New release! - Try beta version - - -
-
- - " alt='KeymanWeb.com' title="KeymanWeb version " width="20px" height="20px"/> -
-
- " alt="" /> -
-
-
- - - - - - - - - From 2fccf982e3f167a423498341c4999057373ea2c0 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Wed, 19 Feb 2025 13:17:38 +0700 Subject: [PATCH 05/38] feat: a prototype design for keymanweb with new styles and scripts --- cdn/dev/css/kmw-body.css | 322 +++++++++++++----- cdn/dev/css/kmw-header.css | 353 ++++++++++++++------ cdn/dev/img/headerbar copy.png | Bin 0 -> 507 bytes cdn/dev/img/keyboard.png | Bin 0 -> 116931 bytes cdn/dev/img/keymanweb-mini-logo-88 copy.png | Bin 0 -> 3182 bytes cdn/dev/js/kmwBody.js | 130 +++++++ cdn/dev/js/kmwHeader.js | 297 +++++++++++----- inc/head.php | 10 +- index.php | 251 +++++--------- 9 files changed, 893 insertions(+), 470 deletions(-) create mode 100644 cdn/dev/img/headerbar copy.png create mode 100644 cdn/dev/img/keyboard.png create mode 100644 cdn/dev/img/keymanweb-mini-logo-88 copy.png create mode 100644 cdn/dev/js/kmwBody.js diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css index ef7424e..5602ae1 100644 --- a/cdn/dev/css/kmw-body.css +++ b/cdn/dev/css/kmw-body.css @@ -1,105 +1,249 @@ +* { + box-sizing: border-box; +} + body { background-color: #F6F6F6; + overflow: hidden; } -.text-area-container { +.container-flex { display: flex; flex-direction: column; - justify-content: center; align-items: center; - width: 100%; -} - -.type-your-keyboard { - width: 80%; - scroll-behavior: auto; - resize: none; - margin-top: 95px; } -.type-your-keyboard textarea { - box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; - height: 500px; +.hidden { + display: none; } -/* - keyboard -*/ -.keys { - display: flex; - list-style: none; +a { + margin: 0 !important; + padding: 0 !important; + text-decoration: none !important; } -.keyboard-container { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} -.keyboard-container div { - width: 50%; -} - -.keyboard-container div ul li { - box-shadow: 0px -6px 10px rgba(255, 255, 255, 1), 0px 4px 15px rgba(0, 0, 0, 0.15); - transition: 0.5s; - height: 2.5em; - font-size: 1em; - width: 3em; - margin: 0.3em; - background-color: #f2f2f2; - border-radius: 0.5em; - line-height: 2.5em; - letter-spacing: 1px; - text-align: center; -} - -.keyboard-container div ul li:hover { - box-shadow: 0 2px 0 rgba(0, 0, 0, 0.15); +/* Icons */ +.fa-keyboard, .fa-download { cursor: pointer; - top: 3px; -} - -#red { - background-color: #a3f7bf; - width: 5em; -} - -#blue { - background-color: #9aebed; - width: 6em; -} - -#rebeca { - background-color: #fecd1a; - width: 8em; -} - -#green { - background-color: #fa86be; - width: 6em; -} - -#up { - background-color: #8594e4; - width: 8em; -} - -#yellow { - background-color: #fffcab; - width: 5em; -} - -#grey { - background-color: #898989; - width: 3.3em; -} - -#one { - background-color: #faafff; - width: 5em; } -#two { - width: 24.5em; -} \ No newline at end of file +.fa-bars:hover { + cursor: ns-resize; +} + +/* End of Icons */ + +/* ================================ + Computer and Laptop screen sizes +================================ */ +@media screen and (min-width: 1000px) { + .item { + margin: 5px + } + /* + Text area + */ + .textarea-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + } + + .textarea { + padding: 10px; + margin-top: 95px; + resize: none; + width: 100%; + height: 45vh; + box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; + } + + #copyTool { + color: #2EADD3; + position: absolute; + right: 20px; + top: 125px; + opacity: 50%; + } + #copyTool:hover { + cursor: pointer; + opacity: 100%; + } + + #fullscreenTool { + color: #2EADD3; + position: absolute; + right: 20px; + bottom: 270px; + opacity: 50%; + } + #fullscreenTool:hover { + cursor: pointer; + opacity: 100%; + } + + .show-keyboard-box { + width: 100%; + text-align: center; + position: absolute; + bottom: 0; + } + + .show-keyboard-box:hover { + opacity: 80%; + } + + /* Divider */ + .divider-container { + user-select: none; + display: grid; + grid-template-columns: auto auto auto; + align-items: center; + justify-content: space-evenly; + width: 90%; + } + + .divider-container > * { + margin: 10px; + } + + .divider-container i { + opacity: 50%; + } + + .divider-container i:hover { + color: #FC7200; + opacity: 100%; + } + + /* Keyboard */ + .keyboard-and-download { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + } + + .example-box { + background-color: #2EADD3; + color: white; + width: 100%; + text-align: center; + padding: 5px; + border-bottom: 1px solid rgb(159, 159, 159); + display: grid; + grid-template-columns: auto 90% auto; + } + + .example-box p { + margin: 10px; + } + + .keyboard-container { + width: 50%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .keyboard-area { + user-select: none; + flex: 1; + width: 100%; + height: auto; + } + + .keyboard { + width: 100%; + } + + .keyboard-download-box { + width: 15%; + padding: 5px; + position: relative; + left: 100px; + border-radius: 10px; + box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; + } + + .keyboard-download-box p { + margin: 10px; + text-align: center; + } + + .keyboard-download-box > * { + display: flex; + flex-direction: column; + align-items: center; + margin: 10px; + } +} + +/* ================================ + Tablet screen size +================================ */ + +@media screen and (min-width: 600px) { + .item { + margin: 5px + } + /* + Text area + */ + .textarea-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + } + + .textarea { + padding: 10px; + margin-top: 95px; + resize: none; + width: 100%; + height: 45vh; + box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; + } + + #copyTool { + color: #2EADD3; + position: absolute; + right: 20px; + top: 125px; + opacity: 50%; + } + #copyTool:hover { + cursor: pointer; + opacity: 100%; + } + + #fullscreenTool { + color: #2EADD3; + position: absolute; + right: 20px; + bottom: 270px; + opacity: 50%; + } + #fullscreenTool:hover { + cursor: pointer; + opacity: 100%; + } + + .show-keyboard-box { + width: 100%; + text-align: center; + position: absolute; + bottom: 0; + } + + .show-keyboard-box:hover { + opacity: 80%; + } +} diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index 052dfe6..1bfc594 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -1,112 +1,247 @@ - -/* - Search -*/ - -.form { - position: relative; - width: 50%; -} - -.form .left-pan { - position: absolute; - right: 17px; - top: 12px; - padding: 2px; - border-left: 1px solid #000000; -} - -.left-pan { - padding-left: 7px; -} - -.left-pan i { - padding-left: 10px; -} - -.form .form-input { - height: 50px; +/* ================================ + Computer and Laptop screen sizes +================================ */ +@media screen and (min-width: 1000px) { + header { + position: fixed; + margin-left: auto; + margin-right: auto; + padding-bottom: 30px; + z-index: 1; + } + + header > div > img { + width: 100%; + display: block; + height: 8px; + } + + header #headerBackground { + padding: 10px; + } + + #headerBackground { + display: grid; + grid-template-columns: 5% 85% 10%; + justify-content: left; + align-items: center; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + margin: 0px 0px; + background-color: white; + } + + #headerLeft { + margin-left: 10px; + } + + #headerLeft img { + display: block; + height: 50px; + } + + #headerMiddle { + display: flex; + flex-direction: row; + justify-content: left; + align-items: center; + width: 70%; + margin: 0px 10px; + } + + #headerMiddle > div { + margin-right: 10px; + } + + #headerRight { + display: grid; + grid-template-columns: 50% 50%; + justify-items: end; + align-items: center; + width: 100%; + } + + /* + Language Search Menu + */ + + .form { + position: relative; + width: 50%; + } + + .form .left-pan { + position: absolute; + right: 17px; + top: 12px; + padding: 2px; + border-left: 1px solid #000000; + } + + .left-pan { + padding-left: 7px; + } + + .left-pan i { + padding-left: 10px; + } + + .form .form-input { + height: 50px; + width: 100%; + text-indent: 15px; + border-radius: 15px; + text-align: left; + background-color: rgb(233, 228, 228); + } + + .form-input:focus { + box-shadow: none; + border:none; + } + /* Search Dropdown list */ + + ul.dropdown-menu { + padding: 10px; + margin: 0; + } + + .dropdown-submenu .dropdown-menu li.dropdown-item{ + width: 100%; + } + + .dropdown-submenu { + position: relative; + } + + .dropdown-submenu .dropdown-menu { + margin-top: -6px; + border-radius: 0.25rem; + width: fit-content; + } + + .dropdown-submenu:hover > .dropdown-menu { + display: inline; + } + + #headerMiddle .dropdown-menu .top-row .setting { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 10px 10px !important; + } + + #headerMiddle .dropdown-menu .top-row .setting .col:last-child { + position: relative; + left: 150px; + } + + /* Selected Keyboard Menu */ + #keyboardSelectionDropdown { + width: fit-content !important; + overflow: hidden; + } + + #keyboardSelectionDropdown > * { + width: 100%; + } + + #keyboardSelectionList { + display: grid; + grid-template-columns: 50% 50%; + } + + #keyboardSelectionList ul { + width: 369px; + } + + .language-name { + display: grid; + grid-template-columns: 95% 5%; + align-items: center; + } + + .language-name i { + opacity: 100%; + float: right; + color: #B92034; + } + + .language { + margin: 10px; + } + + .language ul { + list-style: none; + } + + #removeLanguage { + cursor: pointer; + } + + .keyboard-list i { + float: right; + opacity: 50%; + } + } + + +@media screen and (min-width: 600px) { + header { + position: fixed; + margin-left: auto; + margin-right: auto; + padding-bottom: 30px; + z-index: 1; + } + + header > div > img { width: 100%; - text-indent: 15px; - border-radius: 15px; - text-align: left; - background-color: rgb(233, 228, 228); -} - -.form-input:focus { - box-shadow: none; - border:none; -} - -#dropdown-menu { - width: 100%; -} - -ul.dropdown-menu { - padding: 0; - margin: 0; -} - -.dropdown-menu { - max-width: inherit; -} + display: block; + height: 8px; + } -.dropdown-submenu .dropdown-menu li.dropdown-item{ - width: 100%; -} - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu .dropdown-menu { - margin-top: -6px; - border-radius: 0.25rem; - width: fit-content; -} - -.dropdown-submenu:hover > .dropdown-menu { - display: inline; -} - -/* - Keyboard Dropdown -*/ -.dropdown button { + header #headerBackground { padding: 10px; -} - -/* - Tools -*/ - -input[type="range"] { - font-size: 1.1rem; - width: 100px; -} - -input[type="range"] { - color: #69B7D2; - --thumb-height: 1.125em; - --track-height: 0.125em; - --track-color: rgba(186, 0, 0, 0.2); - --brightness-hover: 180%; - --brightness-down: 80%; - --clip-edges: 0.125em; -} - -input[type="range"] { - position: relative; - background: #fff0; - overflow: hidden; -} - -input[type="range"]:active { - cursor: grabbing; -} - -input[type="range"]:disabled { - filter: grayscale(1); - opacity: 0.3; - cursor: not-allowed; -} + } + + #headerBackground { + display: grid; + grid-template-columns: 5% 85% 10%; + justify-content: left; + align-items: center; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + margin: 0px 0px; + background-color: white; + } + + #headerLeft { + margin-left: 10px; + } + + #headerLeft img { + display: block; + height: 50px; + } + + #headerMiddle { + display: flex; + flex-direction: row; + justify-content: left; + align-items: center; + width: 70%; + margin: 0px 10px; + } + + #headerMiddle > div { + margin-right: 10px; + } + + #headerRight { + display: grid; + grid-template-columns: 50% 50%; + justify-items: end; + align-items: center; + width: 100%; + } +} \ No newline at end of file diff --git a/cdn/dev/img/headerbar copy.png b/cdn/dev/img/headerbar copy.png new file mode 100644 index 0000000000000000000000000000000000000000..19a21025d1f7cc1580c8b3d46579fa26584edf6a GIT binary patch literal 507 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 U{tjgMq5uE@07*qoM6N<$f<7Joj{pDw literal 0 HcmV?d00001 diff --git a/cdn/dev/js/kmwBody.js b/cdn/dev/js/kmwBody.js new file mode 100644 index 0000000..acd4997 --- /dev/null +++ b/cdn/dev/js/kmwBody.js @@ -0,0 +1,130 @@ +document.addEventListener('DOMContentLoaded', function() { + // Define the divider, text area and keyboard + const divider = document.getElementById('Divider') + const resizer = divider.querySelector('.fa-bars') + let prevElement = divider.previousElementSibling.querySelector('.textarea'); + let nextElement = divider.nextElementSibling; + + // Define the heights of text area, keyboard, and the vertical screen + let prevElementHeight = 0; + let nextElementHeight = 0; + let nextElementWidth = 0; + let verticalViewport = 0; + + const mouseDownHandler = (e) => { + e.preventDefault(); + // Get the Y coordinate of mouse click & Text Area + Keyboard heights + prevElementHeight = prevElement.getBoundingClientRect().height; + nextElementHeight = nextElement.getBoundingClientRect().height; + nextElementWidth = nextElement.getBoundingClientRect().width; + verticalViewport = e.clientY; + + document.addEventListener('mousemove', mouseMoveHandler) + document.addEventListener('mouseup', mouseUpHandler) + + resizer.style.cursor = 'ns-resize' + document.body.style.cursor = 'ns-resize' + } + + const mouseUpHandler = () => { + resizer.style.removeProperty('cursor') + document.body.style.removeProperty('cursor'); + + prevElement.style.removeProperty('user-select') + prevElement.style.removeProperty('pointer-events') + + nextElement.style.removeProperty('user-select') + nextElement.style.removeProperty('pointer-events') + + // Remove the handlers of mousemove and mouseup + document.removeEventListener('mousemove', mouseMoveHandler); + document.removeEventListener('mouseup', mouseUpHandler); + } + + const mouseMoveHandler = function (e) { + // Calculate the cursor movement + let value = e.clientY - verticalViewport + calcElementSize(value) + } + + function calcElementSize(val) { + // Get the dynamic heights of both elements + let newPrevHeight = prevElementHeight + val; + let newNextHeight = nextElementHeight - val; + let newNextWidth = nextElementWidth - val; + + let keyboardElements = divider.nextElementSibling.querySelectorAll('.keyboard-and-download') + + // Define minimum and maximum heights + const minPrevHeight = 200; + const maxPrevHeight = window.innerHeight * 0.8; + const minNextHeight = 200; + const maxNextHeight = 800; + const minNextWidth = 10; + const maxNextWidth = 100; + + // Ensure the heights do need exceed the define heights + newPrevHeight = Math.max(minPrevHeight, Math.min(newPrevHeight, maxPrevHeight)); + newNextHeight = Math.max(minNextHeight, Math.min(newNextHeight, maxNextHeight)); + newNextWidth = Math.max(minNextWidth, Math.min(newNextWidth, maxNextWidth)); + + // Update the heights of Prev and Next Elements + prevElement.style.height = `${newPrevHeight}px`; + if (newPrevHeight >= maxPrevHeight) { + fullScreenSize() + } + else { + keyboardElements.forEach(element => { + element.style.height = `${newNextHeight}px`; + element.style.width = `${newNextWidth}%` + }) + divider.style.display = "flex" + nextElement.style.display = 'flex'; + } + } + + let showKeyboardContainer = document.querySelector(".show-keyboard-box") + let showKeyboardButton = document.querySelector(".show-keyboard") + + function defaultSize() { + prevElement.style.height= "45vh" + divider.style.display = "flex" + nextElement.style.display = "flex" + showKeyboardContainer.classList.add('hidden') + } + + function fullScreenSize() { + nextElement.style.display = "none" + divider.style.display = "none" + prevElement.style.height = '88vh' + + let scrollPosition = window.scrollY + window.innerHeight + let pageHeight = document.documentElement.scrollHeight + + if (scrollPosition >= pageHeight - 10) { + showKeyboardPopupBtn() + } else { + showKeyboardContainer.classList.add('hidden') + } + showKeyboardButton.addEventListener('click', () => { + defaultSize() + }) + } + + function showKeyboardPopupBtn() { + showKeyboardContainer.classList.remove('hidden') + showKeyboardContainer.style.height = "50px" + showKeyboardButton.style.opacity = "0%" + showKeyboardContainer.addEventListener('mouseover', function() { + showKeyboardButton.style.opacity = "80%" + }) + showKeyboardContainer.addEventListener('mouseleave', function() { + showKeyboardButton.style.opacity = "0%" + }) + } + + const hideKeyboardBtn = document.getElementById('hideKeyboard') + hideKeyboardBtn.onclick = () => fullScreenSize() + + resizer.addEventListener('mousedown', mouseDownHandler) +}) \ No newline at end of file diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index e414718..6929519 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -1,111 +1,228 @@ -dropdownItems = [ +languages = [ { - text: 'Brao (SIL) Keyboard', - href: '#' + language: "Achterhoeks", + keyboard: + [ + { + name: 'EuroLatin (SIL)', + script: '', + }, + ] }, { - text: 'Bunong (SIL) Keyboard', - href: '#' + language: "Finnish", + keyboard: + [ + { + name: 'Finnish Basic', + script: 'fi', + }, + { + name: 'Finnish-Swidish with Sami-Basic', + script: 'fi', + }, + { + name: 'Malar Braille', + script: 'fi-brai', + } + ] }, { - text: 'Khmer Angkor Keyboard', - href: '#' + language: "Khmer", + keyboard: + [ + { + name: 'Khmer Basic', + script: 'km', + }, + { + name: 'Khmer (NIDA) Basic', + script: 'km', + }, + { + name: 'Khmer Advanced', + script: 'km', + }, + { + name: 'Khmer Angkor', + script: 'km', + }, + { + name: 'Khmer (SIL)', + script: 'km', + } + ] + }, + { + language: "Rotokas", + keyboard: + [ + { + name: 'US Basic', + script: 'roo-latn', + }, + { + name: 'Xpert', + script: 'roo-latn', + } + ] }, { - text: 'Khmer (SIL) Keyboard', - href: '#' + language: "Sogdian", + keyboard: + [ + { + name: 'Manichaean', + script: 'sog-mani', + }, + { + name: 'Old Sogdian', + script: 'sog-sogo', + }, + { + name: 'Sogdian Phonetic', + script: 'sog', + }, + ] } ] -// Draft - // [ - // { - // language: 'Khmer', - // keyboards: [ - // 'Brao (SIL)', - // 'Bunong (SIL)' - - // ] - // } - // ] -// -function function1() { - const dropdownMenu = document.getElementById('dropdown-menu'); - dropdownMenu.innerHTML = ''; // Clear existing items - - // Create 10 rows with 4 columns each - for (let i = 1; i <= 5; i++) { - const rowDiv = document.createElement('div') - rowDiv.classList.add('row'); - - for (let j = 1; j <= 4; j++) { - const colDiv = document.createElement('div'); - colDiv.classList.add('col'); - - for(let k = 1; k<=4; k++) { - - let li = document.createElement('li') - li.classList.add('dropdown-submenu') - li.textContent = "Khmer" - - const subUl = document.createElement('ul') - subUl.classList.add('dropdown-menu') - dropdownItems.forEach(element => { - const subLi = document.createElement('li') - subLi.classList.add('dropdown-item') - subLi.setAttribute('id', element.text) - subLi.textContent = element.text - subUl.appendChild(subLi) - - subLi.addEventListener('click', function () { - alert(`You clicked on: ${element.text}`); - populateSelectedKeyboard('Khmer') - }); - }); - - li.appendChild(subUl) - colDiv.appendChild(li) - } - - rowDiv.appendChild(colDiv); +// Global Variables +const numOfLangPara = document.createElement('p') +let selectedLanguagesList = [] +const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') + +function languageSearch() { + const languageSearchList = document.getElementById('languageSearchList'); + languageSearchList.innerHTML = ''; // Clear existing items + + // Create
+ let rowDiv = document.createElement('div') + rowDiv.classList.add('row'); + // Insert `
- " alt="" /> +
-
-
-
- -
-
-
+
+
+ + + +
-
-
-
    -
  • " width="20px">
  • -
  • 1
  • -
  • 2
  • -
  • 3
  • -
  • 4
  • -
  • 5
  • -
  • 6
  • -
  • 7
  • -
  • 7
  • -
  • 8
  • -
  • 0
  • -
  • _
  • -
  • =
  • -
  • ๐ŸŽจ
  • -
-
    -
  • ๐ŸŒต
  • -
  • Q
  • -
  • W
  • -
  • E
  • -
  • R
  • -
  • T
  • -
  • Y
  • -
  • U
  • -
  • I
  • -
  • O
  • -
  • P
  • -
  • [
  • -
  • ]
  • -
  • \
  • -
-
    -
  • ๐Ÿงข
  • -
  • A
  • -
  • S
  • -
  • D
  • -
  • F
  • -
  • G
  • -
  • H
  • -
  • J
  • -
  • K
  • -
  • L
  • -
  • ;
  • -
  • ""
  • -
  • ๐Ÿ”ซ
  • -
-
    -
  • ๐Ÿ”ฅ
  • -
  • Z
  • -
  • X
  • -
  • C
  • -
  • V
  • -
  • B
  • -
  • N
  • -
  • M
  • -
  • ,
  • -
  • .
  • -
  • ?
  • -
  • ๐Ÿงฌ
  • -
-
    -
  • ctrl
  • -
  • alt
  • -
  • cmd
  • -
  • -
  • cmd
  • -
  • alt
  • -
+
+ + + + + +
+
+
+
+
+ +

No example is available for this keyboard.

+
+
+ +
+
+
+

+ Use Undetermined Keyboard in any Windows app! + + Download + Free and open source! +

- - - - + + From b2a8b50b6704c6546ebf41d2cbccfb2da58050d8 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Fri, 21 Feb 2025 15:18:59 +0700 Subject: [PATCH 06/38] feat: css media query, clean unused css & js, js resize and default width --- cdn/dev/css/kmw-body.css | 340 +++++++------- cdn/dev/css/kmw-header.css | 430 +++++++++--------- .../{keyboard.png => desktop-keyboard.png} | Bin cdn/dev/img/phone-keyboard.png | Bin 0 -> 81945 bytes cdn/dev/js/kmwBody.js | 77 ++-- index.php | 20 +- 6 files changed, 414 insertions(+), 453 deletions(-) rename cdn/dev/img/{keyboard.png => desktop-keyboard.png} (100%) create mode 100644 cdn/dev/img/phone-keyboard.png diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css index 5602ae1..f64fe76 100644 --- a/cdn/dev/css/kmw-body.css +++ b/cdn/dev/css/kmw-body.css @@ -24,6 +24,7 @@ a { } /* Icons */ + .fa-keyboard, .fa-download { cursor: pointer; } @@ -34,216 +35,207 @@ a { /* End of Icons */ -/* ================================ - Computer and Laptop screen sizes -================================ */ -@media screen and (min-width: 1000px) { - .item { - margin: 5px - } - /* - Text area - */ - .textarea-container { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - } +/* Section Tag */ - .textarea { - padding: 10px; - margin-top: 95px; - resize: none; - width: 100%; - height: 45vh; - box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; - } +/* + Text area +*/ +.textarea-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; +} - #copyTool { - color: #2EADD3; - position: absolute; - right: 20px; - top: 125px; - opacity: 50%; - } - #copyTool:hover { - cursor: pointer; - opacity: 100%; - } +.textarea { + padding: 10px; + resize: none; + width: 100%; + height: 45vh; + box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; +} - #fullscreenTool { - color: #2EADD3; - position: absolute; - right: 20px; - bottom: 270px; - opacity: 50%; - } - #fullscreenTool:hover { - cursor: pointer; - opacity: 100%; - } +#copyTool { + color: var(--keyman-blue); + position: absolute; + right: 10px; + top: 110px; + opacity: 50%; +} +#copyTool:hover { + cursor: pointer; + opacity: 100%; +} - .show-keyboard-box { - width: 100%; - text-align: center; - position: absolute; - bottom: 0; - } +#fullscreenTool { + color: var(--keyman-blue); + position: absolute; + right: 20px; + bottom: 270px; + opacity: 50%; +} - .show-keyboard-box:hover { - opacity: 80%; - } +#fullscreenTool:hover { + cursor: pointer; + opacity: 100%; +} - /* Divider */ - .divider-container { - user-select: none; - display: grid; - grid-template-columns: auto auto auto; - align-items: center; - justify-content: space-evenly; - width: 90%; - } +.show-keyboard-box { + width: 100%; + text-align: center; + position: absolute; + bottom: 0; +} - .divider-container > * { - margin: 10px; - } +.show-keyboard-box:hover { + opacity: 80%; +} - .divider-container i { - opacity: 50%; - } +/* Divider */ +.divider-container { + user-select: none; + display: flex; + flex-direction: row; + justify-content: space-between; + width: 40%; +} - .divider-container i:hover { - color: #FC7200; - opacity: 100%; - } +.divider-container > * { + margin: 10px; +} - /* Keyboard */ - .keyboard-and-download { - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - } +.divider-container i { + opacity: 50%; +} - .example-box { - background-color: #2EADD3; - color: white; - width: 100%; - text-align: center; - padding: 5px; - border-bottom: 1px solid rgb(159, 159, 159); - display: grid; - grid-template-columns: auto 90% auto; - } +.divider-container i:hover { + color: var(--keyman-orange); + opacity: 100%; +} - .example-box p { - margin: 10px; - } +/* Keyboard */ +.keyboard-and-download { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} - .keyboard-container { - width: 50%; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - } +.example-box { + background-color: var(--keyman-blue); + color: white; + width: 100%; + text-align: center; + padding: 5px; + border-bottom: 1px solid rgb(159, 159, 159); + display: grid; + grid-template-columns: auto 90% auto; +} - .keyboard-area { - user-select: none; - flex: 1; - width: 100%; - height: auto; - } +.example-box p { + margin: 10px; +} - .keyboard { - width: 100%; - } +.keyboard-container { + width: calc(100% - 40%); + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} - .keyboard-download-box { - width: 15%; - padding: 5px; - position: relative; - left: 100px; - border-radius: 10px; - box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; - } +.keyboard-area { + user-select: none; + flex: 1; + width: 100%; + height: auto; +} - .keyboard-download-box p { - margin: 10px; - text-align: center; - } +.desktop-keyboard { + width: 100%; +} - .keyboard-download-box > * { - display: flex; - flex-direction: column; - align-items: center; - margin: 10px; - } +.phone-keyboard { + display: none; +} + +.keyboard-download-box { + width: calc(30% - 15%); + padding: 5px; + position: relative; + left: calc(10% - 7%); + border-radius: 10px; + box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; +} + +.keyboard-download-box p { + margin: 10px; + text-align: center; +} + +.keyboard-download-box > * { + display: flex; + flex-direction: column; + align-items: center; + margin: 10px; } +/* End of Section Tag */ + /* ================================ - Tablet screen size + Computer and Laptop screen sizes ================================ */ - -@media screen and (min-width: 600px) { +@media screen and (min-width: 940px) { .item { margin: 5px } - /* - Text area - */ - .textarea-container { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; +} + +/* ================================ + Most Tablet to Phone sizes +================================ */ + +@media screen and (max-width: 940px) { + /* Divider */ + .divider-container { width: 100%; + padding: 10px; + border-radius: 5px; + box-shadow: var(--box-shadow); } - .textarea { - padding: 10px; - margin-top: 95px; - resize: none; + /* Keyboard */ + .keyboard-container { width: 100%; - height: 45vh; - box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; + height: 100%; } - #copyTool { - color: #2EADD3; - position: absolute; - right: 20px; - top: 125px; - opacity: 50%; - } - #copyTool:hover { - cursor: pointer; - opacity: 100%; + .desktop-keyboard { + display: none; } - #fullscreenTool { - color: #2EADD3; - position: absolute; - right: 20px; - bottom: 270px; - opacity: 50%; + .phone-keyboard { + width: 100%; + display: block; } - #fullscreenTool:hover { - cursor: pointer; - opacity: 100%; + + .keyboard-download-box { + display: none; } - .show-keyboard-box { - width: 100%; - text-align: center; - position: absolute; - bottom: 0; + .spacing-purpose { + display: none; } +} + +/* ================================ + Smallest Phone sizes +================================ */ - .show-keyboard-box:hover { - opacity: 80%; +@media screen and (max-width: 380px) { + .example-box p { + font-size: 12px; } -} +} diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index 1bfc594..92ef995 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -1,247 +1,227 @@ +:root { + --box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + --keyman-orange: #FC7200; + --keyman-red: #B92034; + --keyman-blue: #2EADD3; +} + +header > div > img { + width: 100%; + display: block; + height: 8px; +} + +#headerBackground { + display: grid; + justify-content: left; + align-items: center; + height: 75px; + padding: 10px; + background-color: white; + box-shadow: var(--box-shadow); +} + +#headerLeft { + display: flex; + flex-direction: row; + justify-content: left; + align-items: center; +} + +#headerLeft > * { + margin-right: 10px; +} + +#headerRight { + display: grid; + grid-template-columns: 1fr 1fr; + justify-items: end; + align-items: center; +} + +/* +Language Search box +*/ +.form { + position: relative; + width: 50%; +} + +.search-icon-span { + position: absolute; + right: 17px; + top: 12px; + border-left: 1px solid black; +} + +.search-icon-span i { + padding-left: 10px; +} + +.form .form-input { + height: 50px; + width: 100%; + text-indent: 10px; + border-radius: 15px; + text-align: left; + background-color: rgb(233, 228, 228); +} + +.form-input:focus { + box-shadow: none; + border:none; +} + +/* Search Dropdown list */ + +ul.dropdown-menu { + padding: 10px; + margin: 0;; +} + +.dropdown-submenu .dropdown-menu li.dropdown-item{ + width: 100%; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu .dropdown-menu { + margin-top: -6px; + border-radius: 0.25rem; + width: fit-content; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: inline; +} + +#headerLeft .dropdown-menu .top-row .setting { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 10px 10px !important; +} + +#headerLeft .dropdown-menu .top-row .setting .col:last-child { + position: relative; + left: 150px; +} + +/* Selected Keyboard Menu */ +#keyboardSelectionDropdown { + width: fit-content !important; + overflow: hidden; +} + +#keyboardSelectionDropdown > * { + width: 100%; +} + +#keyboardSelectionList { + display: grid; + grid-template-columns: 50% 50%; +} + +#keyboardSelectionList ul { + width: 369px; +} + +.language-name { + display: grid; + grid-template-columns: 95% 5%; + align-items: center; +} + +.language-name i { + opacity: 100%; + float: right; + color: var(--keyman-red); +} + +.language { + margin: 10px; +} + +.language ul { + list-style: none; +} + +#removeLanguage { + cursor: pointer; +} + +.keyboard-list i { + float: right; + opacity: 50%; +} + /* ================================ - Computer and Laptop screen sizes + Computer, Laptop, some Tablet screen sizes ================================ */ -@media screen and (min-width: 1000px) { - header { - position: fixed; - margin-left: auto; - margin-right: auto; - padding-bottom: 30px; - z-index: 1; - } - - header > div > img { - width: 100%; - display: block; - height: 8px; - } - - header #headerBackground { - padding: 10px; - } - - #headerBackground { - display: grid; - grid-template-columns: 5% 85% 10%; - justify-content: left; - align-items: center; - box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; - margin: 0px 0px; - background-color: white; - } - - #headerLeft { - margin-left: 10px; - } - - #headerLeft img { - display: block; - height: 50px; - } - - #headerMiddle { - display: flex; - flex-direction: row; - justify-content: left; - align-items: center; - width: 70%; - margin: 0px 10px; - } - - #headerMiddle > div { - margin-right: 10px; - } - - #headerRight { - display: grid; - grid-template-columns: 50% 50%; - justify-items: end; - align-items: center; - width: 100%; - } - - /* - Language Search Menu - */ - - .form { - position: relative; - width: 50%; - } - - .form .left-pan { - position: absolute; - right: 17px; - top: 12px; - padding: 2px; - border-left: 1px solid #000000; - } - - .left-pan { - padding-left: 7px; - } - - .left-pan i { - padding-left: 10px; - } - - .form .form-input { - height: 50px; - width: 100%; - text-indent: 15px; - border-radius: 15px; - text-align: left; - background-color: rgb(233, 228, 228); - } - - .form-input:focus { - box-shadow: none; - border:none; - } - /* Search Dropdown list */ - - ul.dropdown-menu { - padding: 10px; - margin: 0; - } - - .dropdown-submenu .dropdown-menu li.dropdown-item{ - width: 100%; - } - - .dropdown-submenu { - position: relative; - } - - .dropdown-submenu .dropdown-menu { - margin-top: -6px; - border-radius: 0.25rem; - width: fit-content; - } - - .dropdown-submenu:hover > .dropdown-menu { - display: inline; - } - - #headerMiddle .dropdown-menu .top-row .setting { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin: 10px 10px !important; - } - - #headerMiddle .dropdown-menu .top-row .setting .col:last-child { - position: relative; - left: 150px; - } - - /* Selected Keyboard Menu */ - #keyboardSelectionDropdown { - width: fit-content !important; - overflow: hidden; - } - - #keyboardSelectionDropdown > * { - width: 100%; - } - - #keyboardSelectionList { - display: grid; - grid-template-columns: 50% 50%; - } - - #keyboardSelectionList ul { - width: 369px; - } - - .language-name { - display: grid; - grid-template-columns: 95% 5%; - align-items: center; - } - - .language-name i { - opacity: 100%; - float: right; - color: #B92034; - } - - .language { - margin: 10px; - } - - .language ul { - list-style: none; - } - - #removeLanguage { - cursor: pointer; - } - - .keyboard-list i { - float: right; - opacity: 50%; - } +@media screen and (min-width: 1045px) { + #headerBackground { + grid-template-columns: 2fr 1fr; } - +} -@media screen and (min-width: 600px) { - header { - position: fixed; - margin-left: auto; - margin-right: auto; - padding-bottom: 30px; - z-index: 1; +/* Expanding the search box */ +@media screen and (940px <= width <= 1045px) { + #headerBackground { + grid-template-columns: 3fr 1fr; } - header > div > img { - width: 100%; - display: block; - height: 8px; + /* + Language Search box + */ + .form { + position: relative; + width: 70%; } +} - header #headerBackground { - padding: 10px; - } +/* ================================ + Most Tablet to Phone sizes +================================ */ +@media screen and (max-width: 940px) { #headerBackground { - display: grid; - grid-template-columns: 5% 85% 10%; - justify-content: left; - align-items: center; - box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; - margin: 0px 0px; - background-color: white; + grid-template-columns: 1fr 1fr; } #headerLeft { - margin-left: 10px; + align-items: center; + justify-content: left; + align-items: center; } #headerLeft img { - display: block; - height: 50px; + display: none; } - #headerMiddle { - display: flex; - flex-direction: row; - justify-content: left; - align-items: center; - width: 70%; - margin: 0px 10px; - } - - #headerMiddle > div { - margin-right: 10px; + /* + Language Search box + */ + .form { + position: relative; + width: inherit; } - #headerRight { - display: grid; - grid-template-columns: 50% 50%; - justify-items: end; - align-items: center; - width: 100%; + .search-icon-span { + position: static; + border: none; + } + + .search-icon-span i { + padding: 10px; + border-radius: 5px; + background-color: gray; + color: white; + } + + .form .form-input { + display: none; } } \ No newline at end of file diff --git a/cdn/dev/img/keyboard.png b/cdn/dev/img/desktop-keyboard.png similarity index 100% rename from cdn/dev/img/keyboard.png rename to cdn/dev/img/desktop-keyboard.png diff --git a/cdn/dev/img/phone-keyboard.png b/cdn/dev/img/phone-keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc95254031081e9dc1c427b07130fc829a3cd95 GIT binary patch literal 81945 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 C0V>G= literal 0 HcmV?d00001 diff --git a/cdn/dev/js/kmwBody.js b/cdn/dev/js/kmwBody.js index acd4997..5f59194 100644 --- a/cdn/dev/js/kmwBody.js +++ b/cdn/dev/js/kmwBody.js @@ -4,99 +4,81 @@ document.addEventListener('DOMContentLoaded', function() { const resizer = divider.querySelector('.fa-bars') let prevElement = divider.previousElementSibling.querySelector('.textarea'); let nextElement = divider.nextElementSibling; + let isResizing = false; // Define the heights of text area, keyboard, and the vertical screen let prevElementHeight = 0; + let prevElementWidth = 0; let nextElementHeight = 0; let nextElementWidth = 0; let verticalViewport = 0; const mouseDownHandler = (e) => { e.preventDefault(); + resizer.style.cursor = 'ns-resize' + isResizing = true + // Get the Y coordinate of mouse click & Text Area + Keyboard heights prevElementHeight = prevElement.getBoundingClientRect().height; + prevElementWidth = prevElement.getBoundingClientRect().width; nextElementHeight = nextElement.getBoundingClientRect().height; nextElementWidth = nextElement.getBoundingClientRect().width; verticalViewport = e.clientY; document.addEventListener('mousemove', mouseMoveHandler) document.addEventListener('mouseup', mouseUpHandler) - - resizer.style.cursor = 'ns-resize' - document.body.style.cursor = 'ns-resize' } const mouseUpHandler = () => { resizer.style.removeProperty('cursor') - document.body.style.removeProperty('cursor'); - - prevElement.style.removeProperty('user-select') - prevElement.style.removeProperty('pointer-events') - - nextElement.style.removeProperty('user-select') - nextElement.style.removeProperty('pointer-events') - - // Remove the handlers of mousemove and mouseup - document.removeEventListener('mousemove', mouseMoveHandler); - document.removeEventListener('mouseup', mouseUpHandler); + isResizing = false } const mouseMoveHandler = function (e) { + if (!isResizing) return; // Calculate the cursor movement let value = e.clientY - verticalViewport - calcElementSize(value) + let clientX = e.clientX + calcElementSize(value, clientX) } - function calcElementSize(val) { + function calcElementSize(val, x) { // Get the dynamic heights of both elements let newPrevHeight = prevElementHeight + val; - let newNextHeight = nextElementHeight - val; - let newNextWidth = nextElementWidth - val; + let newNextWidth = (x / prevElementWidth) * 150; + console.log("New Next Width", newNextWidth) - let keyboardElements = divider.nextElementSibling.querySelectorAll('.keyboard-and-download') - // Define minimum and maximum heights - const minPrevHeight = 200; - const maxPrevHeight = window.innerHeight * 0.8; - const minNextHeight = 200; - const maxNextHeight = 800; - const minNextWidth = 10; - const maxNextWidth = 100; + const minPrevHeight = 150; + const maxPrevHeight = window.innerHeight * 0.6; + const minNextWidth = 50; + const maxNextWidth = 80; + console.log("Max Next Width: ", maxNextWidth) // Ensure the heights do need exceed the define heights newPrevHeight = Math.max(minPrevHeight, Math.min(newPrevHeight, maxPrevHeight)); - newNextHeight = Math.max(minNextHeight, Math.min(newNextHeight, maxNextHeight)); newNextWidth = Math.max(minNextWidth, Math.min(newNextWidth, maxNextWidth)); + const keyboardContainer = nextElement.querySelector('.keyboard-container') + // Update the heights of Prev and Next Elements - prevElement.style.height = `${newPrevHeight}px`; + prevElement.style.height = `${newPrevHeight}px` + if (newPrevHeight >= maxPrevHeight) { fullScreenSize() - } - else { - keyboardElements.forEach(element => { - element.style.height = `${newNextHeight}px`; - element.style.width = `${newNextWidth}%` - }) + } else if (newPrevHeight < maxPrevHeight) { divider.style.display = "flex" - nextElement.style.display = 'flex'; + nextElement.style.display = "flex" } } let showKeyboardContainer = document.querySelector(".show-keyboard-box") let showKeyboardButton = document.querySelector(".show-keyboard") - function defaultSize() { - prevElement.style.height= "45vh" - divider.style.display = "flex" - nextElement.style.display = "flex" - showKeyboardContainer.classList.add('hidden') - } - function fullScreenSize() { - nextElement.style.display = "none" + prevElement.style.height = "85vh" divider.style.display = "none" - prevElement.style.height = '88vh' + nextElement.style.display = "none" let scrollPosition = window.scrollY + window.innerHeight let pageHeight = document.documentElement.scrollHeight @@ -123,6 +105,13 @@ document.addEventListener('DOMContentLoaded', function() { }) } + function defaultSize() { + prevElement.style.height= "38vh" + divider.style.display = "flex" + nextElement.style.display = "flex" + showKeyboardContainer.classList.add('hidden') + } + const hideKeyboardBtn = document.getElementById('hideKeyboard') hideKeyboardBtn.onclick = () => fullScreenSize() diff --git a/index.php b/index.php index 6ae5978..b75b733 100644 --- a/index.php +++ b/index.php @@ -7,14 +7,13 @@
-
+
+ KeymanWeb.com -
-
- +
- -
-
- - - -
-
-
- -
-
- + +
+
-
- + + +
+ +
+ +
-
-
- -
-
- -

No example is available for this keyboard.

+
+ +
+
-
- - +
+
+ +
+
+

No example is available for this keyboard.

+
+
+ + +
- -
-
+

From 58f6cd63a7afae47403174835af7d8f077d269a1 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Thu, 5 Jun 2025 10:17:32 +0700 Subject: [PATCH 13/38] feat: search --- cdn/dev/css/kmw-body.css | 1 + cdn/dev/css/kmw-header.css | 14 +++++++ cdn/dev/js/kmwHeader.js | 1 + index.php | 85 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+) diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css index c51517f..3e424d5 100644 --- a/cdn/dev/css/kmw-body.css +++ b/cdn/dev/css/kmw-body.css @@ -68,6 +68,7 @@ i:hover { opacity: 50%; } + #copyTool:hover { cursor: pointer; opacity: 100%; diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index 45f2a27..57af914 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -33,6 +33,10 @@ header > div > img { box-shadow: var(--box-shadow); } +/* Left side of Header: + Search + Keyboard dropdown +*/ /* Left side of Header: Search Keyboard dropdown @@ -382,6 +386,7 @@ Language Search box align-items: center; } +.middle-header i, .right-header i { .middle-header i, .right-header i { font-size: 24px; opacity: 50%; @@ -398,6 +403,11 @@ Language Search box Hamburger menu */ +/* Right side of the header: + Tools + Hamburger menu +*/ + .right-header { display: grid; grid-template-columns: 90% 10%; @@ -412,12 +422,16 @@ Language Search box color: var(--keyman-blue); } +/* Font size slider + Hide/show keyboard */ /* Font size slider + Hide/show keyboard */ .tool-container { display: flex; flex-direction: row; justify-content: center; align-items: center; + flex-direction: row; + justify-content: center; + align-items: center; } .tool-container > * { diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index af1e85d..640456d 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -436,6 +436,7 @@ function generateKbUI(selectedKbList) { keyboardSelectionButton.classList.remove('btn-secondary') keyboardSelectionButton.classList.add('btn-keyman-orange') + keyboardSelectionButton.classList.add('btn-keyman-orange') selectedKbList.forEach(data => { // Language Parent tags diff --git a/index.php b/index.php index dfaf683..3033991 100644 --- a/index.php +++ b/index.php @@ -54,6 +54,17 @@ + + + +
+ +
+
@@ -169,6 +253,7 @@ + From 3f311339ae801d753e929c2c42565432efeb9567 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Thu, 5 Jun 2025 10:43:27 +0700 Subject: [PATCH 14/38] Revert "feat: search" This reverts commit 58f6cd63a7afae47403174835af7d8f077d269a1. --- cdn/dev/css/kmw-body.css | 1 - cdn/dev/css/kmw-header.css | 14 ------- cdn/dev/js/kmwHeader.js | 1 - index.php | 85 -------------------------------------- 4 files changed, 101 deletions(-) diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css index 3e424d5..c51517f 100644 --- a/cdn/dev/css/kmw-body.css +++ b/cdn/dev/css/kmw-body.css @@ -68,7 +68,6 @@ i:hover { opacity: 50%; } - #copyTool:hover { cursor: pointer; opacity: 100%; diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index 57af914..45f2a27 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -33,10 +33,6 @@ header > div > img { box-shadow: var(--box-shadow); } -/* Left side of Header: - Search - Keyboard dropdown -*/ /* Left side of Header: Search Keyboard dropdown @@ -386,7 +382,6 @@ Language Search box align-items: center; } -.middle-header i, .right-header i { .middle-header i, .right-header i { font-size: 24px; opacity: 50%; @@ -403,11 +398,6 @@ Language Search box Hamburger menu */ -/* Right side of the header: - Tools - Hamburger menu -*/ - .right-header { display: grid; grid-template-columns: 90% 10%; @@ -422,16 +412,12 @@ Language Search box color: var(--keyman-blue); } -/* Font size slider + Hide/show keyboard */ /* Font size slider + Hide/show keyboard */ .tool-container { display: flex; flex-direction: row; justify-content: center; align-items: center; - flex-direction: row; - justify-content: center; - align-items: center; } .tool-container > * { diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index 640456d..af1e85d 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -436,7 +436,6 @@ function generateKbUI(selectedKbList) { keyboardSelectionButton.classList.remove('btn-secondary') keyboardSelectionButton.classList.add('btn-keyman-orange') - keyboardSelectionButton.classList.add('btn-keyman-orange') selectedKbList.forEach(data => { // Language Parent tags diff --git a/index.php b/index.php index 3033991..dfaf683 100644 --- a/index.php +++ b/index.php @@ -54,17 +54,6 @@ - - - -
- -
-
@@ -253,7 +169,6 @@ - From 078a8cea78ada999196de64b4772535aee83cfa8 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Tue, 17 Jun 2025 11:58:54 +0700 Subject: [PATCH 15/38] feat: integrate KeymanWeb Map with polished components and usability + code section for feats of search --- cdn/dev/css/kmw-header.css | 92 +++++++++++-- cdn/dev/js/kmwControls.js | 10 ++ cdn/dev/js/kmwHeader.js | 258 +++++++++++++++++++++++++++---------- inc/head.php | 31 ++--- index.php | 17 +-- 5 files changed, 303 insertions(+), 105 deletions(-) create mode 100644 cdn/dev/js/kmwControls.js diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index 45f2a27..f8e9bda 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -48,7 +48,7 @@ Language Search box */ .form { position: relative; - width: 500px; + width: 550px; margin-right: 10px; } @@ -111,7 +111,7 @@ Language Search box } /* Map and Most download */ -.left-header .dropdown-menu .top-row .setting { +.left-header .dropdown-menu .top-row #worldMap { display: flex; flex-direction: row; justify-content: space-between; @@ -119,10 +119,62 @@ Language Search box margin: 10px 10px !important; } -.setting span { +#worldMap span { opacity: 50%; } +#worldMap span:hover { + opacity: 100%; + cursor: pointer; +} + +#KeymanWebControl #kmw_controls +{ + display: flex !important; + flex-direction: row; + justify-content: space-evenly; + border-radius: 20px; + box-shadow: var(--box-shadow); + height: 35px; + padding: 5px; +} + +#KeymanWebControl .kmw_button, +#keymanWebControl .kmw_button_disabled, +#KeymanWebControl .kmw_button_selected +{ + width: fit-content !important; + background: none !important; + height: 0 !important; +} + +#KeymanWebControl #kmw_controls_start, +#KeymanWebControl #kmw_btn_osk, +.kmw_bar, #kmw_controls_end { + display: none; +} + +#KeymanWebControl .kmw_language { + padding: 3px; +} + +#kmw_control_keyboards { + width: fit-content; +} + +#kmw_selector_regions { + height: 100%; + overflow: hidden; + position: relative; +} + +.kmw_selector_region { + overflow-y: scroll; + overflow-x: hidden; + scrollbar-width: thin; + height: 600px; +} + /* Search Dropdown cards */ #languageSearchList > * { margin-bottom: 5px; @@ -139,6 +191,29 @@ Language Search box border-radius: 10px; letter-spacing: .05rem; overflow: hidden; + margin-bottom: 5px; +} + +.card-wrap.disabled { + opacity: 0.5; + pointer-events: none; + position: relative; +} + +.card-wrap.disabled .kb-icon-plus { + pointer-events: auto; + opacity: 1; + position: absolute; + right: 15px; + z-index: 1; +} + +.kb-icon-plus { + transition: 0.5s ease; +} + +.kb-icon-plus.animate { + color: green; } .keyboard-id { @@ -208,17 +283,6 @@ Language Search box color: var(--keyman-red); } -@keyframes fly-in { - from { - transform: translateY(0%); - opacity: 1; - } - to { - transform: translateY(200%); - opacity: 0; - } -} - /* Pagination */ #languageSearchDropdown .bottom-row-search { background-color: white; diff --git a/cdn/dev/js/kmwControls.js b/cdn/dev/js/kmwControls.js new file mode 100644 index 0000000..e1445f0 --- /dev/null +++ b/cdn/dev/js/kmwControls.js @@ -0,0 +1,10 @@ +/* + This is the code to modify the fetched + KeymanWebControls (Map, Examples, Keyboards...etc) +*/ + +$(document).ready(function() { + $("#KeymanWebControls").show( function() { + alert("Show") + }) +}) \ No newline at end of file diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index af1e85d..e76e114 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -92,16 +92,7 @@ function handleSearch(value = "") { function resetSearch() { paginationCtrl.style.display = 'none' - kbSearchCard.innerHTML = ` -
-
Instruction
-
    -
  1. Search for any Keyman keyboard
  2. -
  3. Once the keyboard you are looking for appears, click on it will enable and store it in the keyboard selection (arrow icon next to search)
  4. -
  5. You can switch between keyboards and start typing.
  6. -
-
- ` + displayTopDownloads() } function updateSearchIcon(value) { @@ -119,43 +110,42 @@ function debounceSearch(query, page) { } } -/* Display top downloads with search Instruction - ON PAUSED -*/ +/* Display top downloads with search Instruction */ +const defaultInstruction = ` +
+
Instruction
+
    +
  1. Search for any Keyman keyboard
  2. +
  3. Once the keyboard you are looking for appears, click on it will enable and store it in the keyboard selection (arrow icon next to search)
  4. +
  5. You can switch between keyboards and start typing.
  6. +
+
` async function displayTopDownloads() { - kbSearchCard.innerHTML = `
Loading...
` + kbSearchCard.innerHTML = `

Loading...

` try { - let response = await fetch(`https://api.keyman.com/cloud/4.0/languages?p=${currentPage}`) + let response = await fetch(`https://api.keyman.com/search/2.0?q=p:popular`) if (!response.ok) { throw new Error(`API request failed with status ${response.status}`) } let data = await response.json() - console.log(data) - let dataLanguages = data.languages.languages - if (!dataLanguages || !Array.isArray(dataLanguages)) { - throw new Error(`Invalid API response structure`) - } + let mostDownloadkb = data.keyboards - if (data.context) { - currentPage = data.context.pageNumber || 1 - totalPage = data.context.totalPage || 1 - } else { - totalPage = Math.ceil(dataLanguages.length / itemPerPage) + if (!mostDownloadkb || !Array.isArray(mostDownloadkb)) { + throw new Error(`Invalid API response structure`) } - updatePaginationCtrl() - displaySearch(dataLanguages, dataLanguages.length) + displaySearch(mostDownloadkb) + paginationCtrl.style.display = 'none' } catch(error) { - console.error(`Error fetching languages ${error}`) - kbSearchCard.innerHTML = `
No languages are found.
` + console.error(`Error fetching ${error}`) + kbSearchCard.innerHTML = `
No keyboards are found.
` paginationCtrl.style.display = 'none' } } /* Get query and return search */ -let dataKbForRemoval async function searchKeyboard(query = null, page) { kbSearchCard.innerHTML = `
Searching ${query}...
` kbSearchCard.style.display = 'block' @@ -187,14 +177,37 @@ async function searchKeyboard(query = null, page) { displaySearch(keyboardData, totalFound, query) } +/* PAUSED */ +const historyKbSelection = (() => { + const maxItem = 3 + let history = [] + + return { + add(kbItem) { + history = history.filter(item => item.id != kbItem.id) + history.unshift(kbItem) + if (history.length > maxItem) history.pop() + }, + getHistory() { + return [...history] + }, + clear() { + history = [] + } + } +}) + /* Display items return from search */ let selectedKbList = [] let selectedKbData = [] -function displaySearch(data, total = 0, query) { +let dataKbForRemoval +const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') + +function displaySearch(data, total = 0, query = '') { kbSearchCard.innerHTML = ''; if (!data || data.length == 0) { - kbSearchCard.innerHTML = '
No language found.
' + kbSearchCard.innerHTML = 'No keyboards are found.' paginationCtrl.style.display = 'none' return } @@ -270,6 +283,7 @@ function displaySearch(data, total = 0, query) { kbIconPTag.textContent = "+" kbIconPTag.style.fontSize = '20px' kbIconPTag.style.cursor = 'pointer' + kbIconPTag.classList.add('kb-icon-plus') const kbIdPTag = document.createElement('p') kbIdPTag.classList.add('keyboard-id') @@ -340,44 +354,83 @@ function displaySearch(data, total = 0, query) { cardWrap.appendChild(kbIdPTag) cardWrap.appendChild(kbDescHeading) cardWrap.appendChild(kbSpecs) + // kbSearchCard.appendChild(defaultInstruction) kbSearchCard.appendChild(cardWrap) + if (kbFoundInList) { + kbIconPTag.textContent = 'โœ“' + kbIconPTag.classList.add('animate') + cardWrap.classList.add('disabled') + + setTimeout(() => { + kbIconPTag.textContent = '-' + kbIconPTag.classList.remove('animate') + }, 600) + } // Choose keyboard to selection - kbIconPTag.onclick = () => { - selectedKbData.push({ - "id": kb.id, - "name": kb.name, - "version": kb.version, - "helpLink": kb.helpLink, - "platformSupport": kb.platformSupport, - "totalDownloads": kb.match.totalDownloads, + kbIconPTag.onclick = (e) => { + e.preventDefault() + let isSelected = selectedKbList.some(selected => selected.id == kb.id) + // Disable keyboard card in search + if (isSelected) { + removeKeyboard(kb.id) + } else { + addKeyboard(kb) + console.log(kb) + populateSelectedKeyboard(kb) + } + + selectedKbList.forEach(data => { + let kbName = data.id + let langCode = data.script + + changeKeyboard(kbName, langCode) }) - populateSelectedKeyboard(kb) + // console.log("Recent:", historyKbSelection.getHistory()); displaySearch(data, total, query) } - - // Disable keyboard card in search - if (kbFoundInList) { - cardWrap.classList.add('disabled') - cardWrap.style.pointerEvents = 'none' - cardWrap.style.opacity = "50%" - } dataKbForRemoval = selectedKbData }) paginationCtrl.style.display = 'flex'; } +const downloadBtn = document.getElementById('kbDownloadPage') +const textArea = document.getElementById('textArea') +async function changeKeyboard(kbdname, languageCode) { + console.log("kbdname: ", kbdname, " + ", "languageCode: ", languageCode) + if(kbdname == '') { + if (textArea) textArea.placeholder = 'Select a keyboard and start typing' + } + location.replace('#' + languageCode + ',Keyboard_' + kbdname); + + var kbd = keyman.getKeyboard(kbdname, languageCode); // Good + await keyman.setActiveKeyboard(kbdname, languageCode) // Good + console.log("kbd: ", kbd) + + if(kbd) { + textArea.placeholder = 'The ' + kbd.InternalName + ' keyboard is selected. Start typing...' + } + + const kbSpan = document.querySelector('#kbSpan') + const kbHelpDocATag = document.querySelector('#kbHelpdocLink') + textArea.placeholder = `The ${kbdname} keyboard is selected. Please start typing...` + kbSpan.innerHTML = `${kbdname}` + // kbHelpDocATag.href = `${kbdHelpLink}` + + if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname); +} + /* Platform Support */ function platformSupport(data) { const platformMap = { - android: "Android", - desktopWeb: "Web", - ios: "iPhone and iPad", - linux: "Linux", - macos: "macOS", - mobileWeb: "Mobile web", - windows: "Windows" - } + android: "Android", + desktopWeb: "Web", + ios: "iPhone and iPad", + linux: "Linux", + macos: "macOS", + mobileWeb: "Mobile web", + windows: "Windows" + } let platformSpan = Object.entries(data) .filter(([_, supportLevel]) => supportLevel == 'full') .map(([platform]) => `${platformMap[platform]}`).join('') @@ -404,23 +457,33 @@ function populateSelectedKeyboard(language = null) { generateKbUI(selectedKbList) } -/* Compare and remove keyboard - ON PAUSED -*/ -function removeKeyboard(kbId) { +/* Add keyboard for kb search and selection UI */ +function addKeyboard(kb) { + const kbInfo = { + "id": kb.id, + "name": kb.name, + "script": kb.match.tag, + "version": kb.version, + "helpLink": kb.helpLink, + "platformSupport": kb.platformSupport, + "totalDownloads": kb.match.totalDownloads, + } + // historyKbSelection.add(kbInfo) + selectedKbData.push(kbInfo) + selectedKbList.push(kbInfo) +} + +/* Compare and remove keyboard */ +function removeKeyboard(kbId, data) { if(kbId) { selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) + selectedKbData = selectedKbData.filter(kb => kb.id !== kbId) } - // populateSelectedKeyboard(selectedKbList) - // console.log(dataKbForRemoval) - displaySearch(selectedKbList) } /* Generate Language's keyboards ON PAUSED */ -const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') - function generateKbUI(selectedKbList) { const keyboardSelection = document.getElementById("keyboardSelection") keyboardSelection.innerHTML = '' @@ -517,6 +580,9 @@ function generateKbUI(selectedKbList) { }) } +/* + Behavior of the Selected Keyboard +*/ const kbSelection = document.querySelector('#keyboardSelection') keyboardSelectionButton.addEventListener('mouseenter', () => { kbSelection.style.width = "100%" @@ -527,3 +593,65 @@ keyboardSelectionButton.addEventListener('click', () => { kbSelection.addEventListener('mouseleave', () => { kbSelection.style.width = "0px" }) + +/* + Toggle between World Map and Search +*/ +const worldMapBtn = document.querySelector('#worldMap') +const kmwControls = document.querySelector('#KeymanWebControl') +const langSearchDropdown = document.querySelector('#languageSearchDropdown') +const caretRightIcon = keyboardSelectionButton.querySelector('.fa-caret-right') + +let mapIsOpen +worldMapBtn.onclick = () => { + toggleMapAndKb() +} + +function toggleMapAndKb() { + if (mapIsOpen == true) { + openSearch() + } else { + openMap() + returnToSearchBtn() + } +} + +function openMap() { + mapIsOpen = true + searchBtn.style.display = "none" + + kmwControls.classList.remove('hidden') + kmwControls.style.display = "block" + langSearchDropdown.classList.add('hidden') + + searchBoxForm.innerHTML = '' + searchBoxForm.appendChild(kmwControls) +} + +function openSearch() { + mapIsOpen = false + searchBtn.style.display = "block" + + kmwControls.classList.add('hidden') + kmwControls.style.display = "none" + langSearchDropdown.classList.remove('hidden') + + searchBoxForm.innerHTML = '' + searchBoxForm.appendChild(searchBtn) + searchBoxForm.appendChild(langSearchDropdown) +} + +function returnToSearchBtn() { + caretRightIcon.classList.remove('fa-caret-right') + caretRightIcon.classList.add('fa-magnifying-glass') + keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" + keyboardSelectionButton.style.border = '0px' + keyboardSelection.style.display = "none" + keyboardSelectionButton.onclick = () => { + caretRightIcon.classList.remove('fa-magnifying-glass') + caretRightIcon.classList.add('fa-caret-right') + keyboardSelectionButton.style.backgroundColor = "" + keyboardSelection.style.display = "block" + openSearch() + } +} diff --git a/inc/head.php b/inc/head.php index d60e07f..9d73cee 100644 --- a/inc/head.php +++ b/inc/head.php @@ -61,7 +61,6 @@ " /> " /> - @@ -116,9 +115,8 @@ function bcp47ToISO6393(bcp) { var localKeyboard, localLanguage; - // Find # in the URL and then load the keyboard? function loadKeyboardFromHash() { - var locationHash = location.hash.match(/^#(.+),(.+)$/i); + var locationHash = location.hash.match(/^#(.+),(Keyboard_.+)$/i); if(locationHash) { localKeyboard = locationHash[2]; localLanguage = locationHash[1]; @@ -143,6 +141,7 @@ function loadKeyboardFromHash() { } } + @@ -153,8 +152,8 @@ function loadKeyboardFromHash() { - - - - + diff --git a/index.php b/index.php index dfaf683..4797c2c 100644 --- a/index.php +++ b/index.php @@ -18,8 +18,8 @@ -
- - - - - + + + + + + From 83389eb418b913187be9b5a360e6e84996b40e53 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 23 Jun 2025 11:43:01 +0700 Subject: [PATCH 16/38] feat: two different search UIs, tick on kb click, kb count, and prepare kb selection menu --- cdn/dev/css/kmw-header.css | 52 +++- cdn/dev/js/kmwHeader.js | 624 ++++++++++++++++++++----------------- index.php | 25 +- 3 files changed, 403 insertions(+), 298 deletions(-) diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index f8e9bda..32cfd25 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -95,19 +95,48 @@ Language Search box width: 100%; max-height: 600px; overflow: auto; + scrollbar-width: thin; +} + +#languageSearchDropdown hr { + margin: 15px 0; +} + +/* Enable keyboard Animation */ +.kb-icon-plus-animate { + animation: plustoTickToMinus 2s forwards; +} + +@keyframes plustoTickToMinus { + 0% { + content: "+"; + transform: scale(1); + } + 30% { + color: lime; + content: "โœ“"; + transform: scale(1.5); + } + 60% { + color: lime; + content: "โœ“"; + transform: scale(1.3); + } + 100% { + content: "-"; + transform: scale(1); + } } /* Instruction on dropdown */ -.search-instruction { - display: flex; - flex-direction: column; - justify-content: center; - align-items: start; +.instruction-title, .keyboard-title { + width: 100%; } -.search-instruction:hover { - box-shadow: none; - cursor: default; +.instruction-title p, .keyboard-title { + font-weight: 500; + font-size: 16px; + text-align: center; } /* Map and Most download */ @@ -326,10 +355,11 @@ Language Search box overflow-y: hidden; transition: all .5s ease-in-out; scrollbar-width: none; - margin-left: -7px; + margin-left: -10px; border-radius: 10px; z-index: 0; white-space: nowrap; + text-indent: 15px; } #keyboardSelection > * { @@ -349,6 +379,10 @@ Language Search box border-right: 1px solid black; } +.kb-item:hover { + cursor: pointer +} + ::-webkit-scrollbar:horizontal { height: 5px; } diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index e76e114..c7077df 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -86,13 +86,12 @@ function handleSearch(value = "") { resetSearch() return } - debounceSearch(currentQuery, currentPage) } function resetSearch() { paginationCtrl.style.display = 'none' - displayTopDownloads() + defaultSearch() } function updateSearchIcon(value) { @@ -111,16 +110,7 @@ function debounceSearch(query, page) { } /* Display top downloads with search Instruction */ -const defaultInstruction = ` -
-
Instruction
-
    -
  1. Search for any Keyman keyboard
  2. -
  3. Once the keyboard you are looking for appears, click on it will enable and store it in the keyboard selection (arrow icon next to search)
  4. -
  5. You can switch between keyboards and start typing.
  6. -
-
` -async function displayTopDownloads() { +async function defaultSearch() { kbSearchCard.innerHTML = `

Loading...

` try { let response = await fetch(`https://api.keyman.com/search/2.0?q=p:popular`) @@ -136,7 +126,6 @@ async function displayTopDownloads() { throw new Error(`Invalid API response structure`) } displaySearch(mostDownloadkb) - paginationCtrl.style.display = 'none' } catch(error) { console.error(`Error fetching ${error}`) @@ -149,7 +138,7 @@ async function displayTopDownloads() { async function searchKeyboard(query = null, page) { kbSearchCard.innerHTML = `
Searching ${query}...
` kbSearchCard.style.display = 'block' - + let response = await fetch(`https://api.keyman.com/search/2.0?q=${encodeURIComponent(query)}&p=${page}`) if (!response.ok) { throw new Error(`API request failed with status ${response.status}`) @@ -177,6 +166,121 @@ async function searchKeyboard(query = null, page) { displaySearch(keyboardData, totalFound, query) } +function searchKbCardUI(kb, marked = '', selectedKbList = '') { + // For checking if the keyboard exists in selected Kbs + let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) + + // Keyboard card container + let cardWrap = document.createElement('div') + cardWrap.classList.add('card-wrap') + cardWrap.setAttribute('id', 'keyboardCardWrap') + + // Keyboard header container + let cardHeader = document.createElement('div') + cardHeader.classList.add('card-header') + + const {matchFound, matchField, matchValue} = highlightSearchContext(kb, marked) + + const kbNameHeading = matchFound ? showMarkedContext(kb, matchField, matchValue) + : (() => { + const heading = document.createElement('h4') + heading.innerHTML = kb.name + return heading + }) + + // Keyboard Plus (+) icon + const kbIconPTag = document.createElement('p') + kbIconPTag.textContent = "+" + kbIconPTag.style.fontSize = '20px' + kbIconPTag.style.cursor = 'pointer' + kbIconPTag.classList.add('kb-icon-plus') + + // Keyboard ID + const kbIdPTag = document.createElement('p') + kbIdPTag.classList.add('keyboard-id') + kbIdPTag.textContent = kb.id + + // Keyboard Description + const kbDescHeading = truncateDesc(kb, matchField, marked) + + // Keyboard monthly downloads and platform support + const kbSpecs = document.createElement('div') + kbSpecs.classList.add('keyboard-specs') + + const kbDownloadHeading = document.createElement('h6') + kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` + kbDownloadHeading.classList.add('monthly-download') + + const kbPlatformSupport = document.createElement('div') + kbPlatformSupport.classList.add('platform') + kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) + + // Append children + cardHeader.appendChild(kbNameHeading) + cardHeader.appendChild(kbIconPTag) + + kbSpecs.appendChild(kbDownloadHeading) + kbSpecs.appendChild(kbPlatformSupport) + + cardWrap.appendChild(cardHeader) + cardWrap.appendChild(kbIdPTag) + cardWrap.appendChild(kbDescHeading) + cardWrap.appendChild(kbSpecs) + + // Choose keyboard to selection + kbIconPTag.onclick = () => addKbToSelectionMenu(kbIconPTag, cardWrap, kb) + // console.log("Recent:", historyKbSelection.getHistory()); + + return cardWrap +} + +function addKbToSelectionMenu(kbIconPTag, cardWrap, kb) { + + let isSelected = selectedKbList.some(selected => selected.id == kb.id) + // Disable keyboard card in search + if (isSelected) { + removeKbSelected(kb.id) + kbIconPTag.textContent = '+' + cardWrap.classList.remove('disabled') + } else { + addKbToSelection(kb) + populateSelectedKeyboard(kb) + triggerKbCount(selectedKbList) + kbIconPTag.textContent = 'โœ“' + kbIconPTag.classList.add('kb-icon-plus-animate') + cardWrap.classList.add('disabled') + + setTimeout(() => { + kbIconPTag.textContent = '-' + kbIconPTag.classList.remove('kb-icon-plus-animate') + }, 800) + } +} + +/* Add keyboard for kb search and selection UI */ +function addKbToSelection(kb) { + const kbInfo = { + "id": kb.id, + "name": kb.name, + "script": kb.match.tag, + "version": kb.version, + "helpLink": kb.helpLink, + "platformSupport": kb.platformSupport, + "totalDownloads": kb.match.totalDownloads, + } + // historyKbSelection.add(kbInfo) + selectedKbData.push(kbInfo) + selectedKbList.push(kbInfo) +} + +/* Compare and remove keyboard */ +function removeKbSelected(kbId, data) { + if(kbId) { + selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) + selectedKbData = selectedKbData.filter(kb => kb.id !== kbId) + } +} + /* PAUSED */ const historyKbSelection = (() => { const maxItem = 3 @@ -197,6 +301,115 @@ const historyKbSelection = (() => { } }) +function getMarkedContext(query) { + let escapedTerm = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + return new RegExp(escapedTerm, 'i') +} + +// Find a match between Search Context and Language, Keyboard name, Description +function highlightSearchContext(kb, marked) { + let matchFound = false + let matchField = "" + let matchValue = "" + + // Get and find language that matches the search + for (lang in kb.languages) { + let langData = kb.languages[lang] + for (key in langData) { + const value = langData[key] + if (typeof value == "string" && marked.test(value)) { + matchFound = true + matchValue = value.replace(marked, '$&') + matchField = "language" + break + } + } + } + + // Find a match for keyboard name if language is not a match + if (!matchFound && marked.test(kb.name)) { + matchFound = true + matchValue = kb.name.replace(marked, '$&') + matchField = "keyboard" + } + + // Find a match for keyboard description if name is not a match + if (!matchFound && marked.test(kb.description)) { + matchFound = true + matchField = "description" + } + + return {matchField, matchValue, matchFound} +} + +// Display Highlighted Search Context +function showMarkedContext(kb, matchField, matchValue) { + const kbNameHeading = document.createElement('h4') + // Display matched language + const langNameSpan = document.createElement('span') + langNameSpan.style.fontSize = "14px" + if (matchField == "language") { + langNameSpan.innerHTML = matchField == "language" ? ` (${matchValue} language)` : "" + } + + // Display matched keyboard + if (matchField == "keyboard") { + kbNameHeading.innerHTML = matchValue + } else { + kbNameHeading.innerHTML = kb.name + } + kbNameHeading.appendChild(langNameSpan) + + return kbNameHeading +} + +// Truncated Keyboard Description +function truncateDesc(kb, matchField, marked) { + const kbDescHeading = document.createElement('h6') + kbDescHeading.classList.add("keyboard-description") + const word_limits = 90 + + let temp = document.createElement('div') + temp.innerHTML = kb.description + + let fullDesc = kb.description + let plainText = temp.textContent + let shortText = "" + + let isTruncated = false + + if (plainText.length >= word_limits) { + shortText = plainText.slice(0, word_limits) + "..." + kbDescHeading.innerHTML = shortText + isTruncated = true + } else { + kbDescHeading.innerHTML = fullDesc + isTruncated = false + } + + if (isTruncated) { + const toggleBtn = document.createElement('a') + toggleBtn.href = "#" + toggleBtn.style.marginLeft = "6px" + toggleBtn.textContent = "Show more" + + toggleBtn.addEventListener('click', e => { + e.preventDefault() + const isExpanded = toggleBtn.textContent == "Show more" + kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, '$&') : fullDesc + if (matchField == 'description') { + kbDescHeading.innerHTML = isExpanded ? fullDesc.replace(marked, '$&') : shortText + } + kbDescHeading.style.color = isExpanded ? 'black' : 'gray' + toggleBtn.textContent = isExpanded ? "Show less" : "Show more" + kbDescHeading.appendChild(toggleBtn) + }) + kbDescHeading.appendChild(toggleBtn) + } + + return kbDescHeading +} + /* Display items return from search */ let selectedKbList = [] let selectedKbData = [] @@ -218,178 +431,23 @@ function displaySearch(data, total = 0, query = '') { } // Getting searched Word ready for highlight - let escapedTerm = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - let marked = new RegExp(escapedTerm, 'i') - - // Loop through the keyboard data - data.forEach(kb => { - let matchFound = false - let matchField = "" - let matchValue = "" + const marked = getMarkedContext(query) - // For checking if the keyboard exists - let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) - - let cardWrap = document.createElement('div') - cardWrap.classList.add('card-wrap') - cardWrap.setAttribute('id', 'keyboardCardWrap') - - let cardHeader = document.createElement('div') - cardHeader.classList.add('card-header') - - let kbNameHeading = document.createElement('h4') - - // Get language that matches the search term - for (lang in kb.languages) { - let langData = kb.languages[lang] - for (key in langData) { - const value = langData[key] - if (typeof value == "string" && marked.test(value)) { - matchFound = true - matchValue = value.replace(marked, '$&') - matchField = "language" - break - } - } - } - - // Find a match - if (!matchFound && marked.test(kb.name)) { - matchFound = true - matchValue = kb.name.replace(marked, '$&') - matchField = "keyboard" - } - - if (!matchFound && marked.test(kb.description)) { - matchFound = true - matchField = "description" - } - - // Display matched language - const langNameSpan = document.createElement('span') - langNameSpan.style.fontSize = "14px" - if (matchField == "language") { - langNameSpan.innerHTML = matchField == "language" ? ` (${matchValue} language)` : "" - } + const searchInstruction = document.querySelector('.search-instruction') + const kbHrTitle = document.querySelector('.keyboard-title') + if (!query) { + searchInstruction.classList.remove("hidden") + kbHrTitle.textContent = "Most Downloads" + } else { + searchInstruction.classList.add("hidden") + kbHrTitle.textContent = "" + } - // Display matched keyboard - if (matchField == "keyboard") { - kbNameHeading.innerHTML = matchValue - } else { - kbNameHeading.innerHTML = kb.name - } + data.forEach(kb => { + const card = searchKbCardUI(kb, marked, selectedKbList) + kbSearchCard.appendChild(card) - const kbIconPTag = document.createElement('p') - kbIconPTag.textContent = "+" - kbIconPTag.style.fontSize = '20px' - kbIconPTag.style.cursor = 'pointer' - kbIconPTag.classList.add('kb-icon-plus') - - const kbIdPTag = document.createElement('p') - kbIdPTag.classList.add('keyboard-id') - kbIdPTag.textContent = kb.id - - kbNameHeading.appendChild(langNameSpan) - cardHeader.appendChild(kbNameHeading) - cardHeader.appendChild(kbIconPTag) - - // Keyboard Description - const kbDescHeading = document.createElement('h6') - kbDescHeading.classList.add("keyboard-description") - const word_limits = 90 - - let temp = document.createElement('div') - temp.innerHTML = kb.description - - let fullDesc = kb.description - let plainText = temp.textContent - let shortText = "" - - let isTruncated = false - - if (plainText.length >= word_limits) { - shortText = plainText.slice(0, word_limits) + "..." - kbDescHeading.innerHTML = shortText - isTruncated = true - } else { - kbDescHeading.innerHTML = fullDesc - isTruncated = false - } - - if (isTruncated) { - const toggleBtn = document.createElement('a') - toggleBtn.href = "#" - toggleBtn.style.marginLeft = "6px" - toggleBtn.textContent = "Show more" - - toggleBtn.addEventListener('click', e => { - e.preventDefault() - const isExpanded = toggleBtn.textContent == "Show more" - kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, '$&') : fullDesc - if (matchField == 'description') { - kbDescHeading.innerHTML = isExpanded ? fullDesc.replace(marked, '$&') : shortText - } - kbDescHeading.style.color = isExpanded ? 'black' : 'gray' - toggleBtn.textContent = isExpanded ? "Show less" : "Show more" - kbDescHeading.appendChild(toggleBtn) - }) - kbDescHeading.appendChild(toggleBtn) - } - - const kbSpecs = document.createElement('div') - kbSpecs.classList.add('keyboard-specs') - - const kbDownloadHeading = document.createElement('h6') - kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` - kbDownloadHeading.classList.add('monthly-download') - - const kbPlatformSupport = document.createElement('div') - kbPlatformSupport.classList.add('platform') - kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) - - kbSpecs.appendChild(kbDownloadHeading) - kbSpecs.appendChild(kbPlatformSupport) - - cardWrap.appendChild(cardHeader) - cardWrap.appendChild(kbIdPTag) - cardWrap.appendChild(kbDescHeading) - cardWrap.appendChild(kbSpecs) - // kbSearchCard.appendChild(defaultInstruction) - kbSearchCard.appendChild(cardWrap) - - if (kbFoundInList) { - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('animate') - cardWrap.classList.add('disabled') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('animate') - }, 600) - } - // Choose keyboard to selection - kbIconPTag.onclick = (e) => { - e.preventDefault() - let isSelected = selectedKbList.some(selected => selected.id == kb.id) - // Disable keyboard card in search - if (isSelected) { - removeKeyboard(kb.id) - } else { - addKeyboard(kb) - console.log(kb) - populateSelectedKeyboard(kb) - } - - selectedKbList.forEach(data => { - let kbName = data.id - let langCode = data.script - - changeKeyboard(kbName, langCode) - }) - // console.log("Recent:", historyKbSelection.getHistory()); - displaySearch(data, total, query) - } - dataKbForRemoval = selectedKbData + // dataKbForRemoval = selectedKbData }) paginationCtrl.style.display = 'flex'; } @@ -397,6 +455,13 @@ function displaySearch(data, total = 0, query = '') { const downloadBtn = document.getElementById('kbDownloadPage') const textArea = document.getElementById('textArea') async function changeKeyboard(kbdname, languageCode) { + + // selectedKbList.forEach(data => { + // let kbName = data.id + // let langCode = data.script + + // changeKeyboard(kbName, langCode) + // }) console.log("kbdname: ", kbdname, " + ", "languageCode: ", languageCode) if(kbdname == '') { if (textArea) textArea.placeholder = 'Select a keyboard and start typing' @@ -438,7 +503,7 @@ function platformSupport(data) { return platformSpan } -/* Selected Keyboard Selection */ +/* Selected Keyboard List */ function populateSelectedKeyboard(language = null) { if(selectedKbList.length > 4) { alert("The maximum keyboard selection is 5") @@ -453,37 +518,10 @@ function populateSelectedKeyboard(language = null) { }) } } - // Create the Language List generateKbUI(selectedKbList) } -/* Add keyboard for kb search and selection UI */ -function addKeyboard(kb) { - const kbInfo = { - "id": kb.id, - "name": kb.name, - "script": kb.match.tag, - "version": kb.version, - "helpLink": kb.helpLink, - "platformSupport": kb.platformSupport, - "totalDownloads": kb.match.totalDownloads, - } - // historyKbSelection.add(kbInfo) - selectedKbData.push(kbInfo) - selectedKbList.push(kbInfo) -} - -/* Compare and remove keyboard */ -function removeKeyboard(kbId, data) { - if(kbId) { - selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) - selectedKbData = selectedKbData.filter(kb => kb.id !== kbId) - } -} - -/* Generate Language's keyboards - ON PAUSED -*/ +/* A UI for keyboard selection menu */ function generateKbUI(selectedKbList) { const keyboardSelection = document.getElementById("keyboardSelection") keyboardSelection.innerHTML = '' @@ -491,97 +529,112 @@ function generateKbUI(selectedKbList) { if (!selectedKbList.length) { keyboardSelectionButton.classList.remove('btn-keyman-orange') keyboardSelectionButton.classList.add('btn-secondary') - const noKbPTag = document.createElement('p') - noKbPTag.textContent = "Open Search to get your keyboard" - keyboardSelection.appendChild(noKbPTag) + keyboardSelection.textContent = "Open Search to get your keyboard" return } keyboardSelectionButton.classList.remove('btn-secondary') keyboardSelectionButton.classList.add('btn-keyman-orange') - selectedKbList.forEach(data => { - // Language Parent tags const kbDiv = document.createElement('div') kbDiv.classList.add("kb-item") kbDiv.setAttribute('id', `${data.id}`) + kbDiv.textContent = data.name const item = selectedKbData.find(kb => kb.id == data.id) - // console.log(selectedKbData) if (!item) return; - kbDiv.textContent = data.keyboard - const kbDetails = document.createElement('div') - kbDetails.setAttribute('id', 'keyboardDetails') - kbDetails.classList.add('hidden') - kbDetails.innerHTML = ` -
    -
  • - - - -
  • -
  • -
    -
    Version
    -
    ${item.version || "N/A"}
    -
    -
  • - -
  • -
    -
    Total downloads
    -
    ${item.totalDownloads || 0}
    -
    -
  • -
  • -
    -
    Supported Platforms
    -
    - ${platformSupport(item.platformSupport) || 'No platforms supported'} -
    -
    -
  • -
- ` - // kbDiv.addEventListener('mouseenter', () => { - // kbDiv.style.cursor = "pointer" - // openKbDetails() - // }) + const kbDetails = displayKbDetails(item) - kbDiv.addEventListener('click', async (e) => { - e.preventDefault() - - if (!data.id || !data || !item.helpLink) { - console.error("Missing Data or Item") - } - - let kbName = `Keyboard_${data.id}` - let keyboards = keyman.getKeyboards(); - let keyboard = keyboards.find(keyboard => keyboard.InternalName == kbName) - - // console.log("All keyboards: ", keyboards) - // console.log("My keyboard: " + keyboard) - if(keyboard) { - languageCode = keyboard.LanguageCode - changeKeyboard(data.id, languageCode, item.helpLink) - } else { - console.warn("Keyboard not found: ", kbName) - } - - }) kbDiv.appendChild(kbDetails) keyboardSelection.appendChild(kbDiv) + kbDiv.onclick = () => enableKbToType() + kbDiv.onmouseenter = () => displayKbDetails() + }) +} + +function triggerKbCount(selectedKbList) { + const kbSelectedLength = selectedKbList.length + const keyboardCount = document.querySelector('#kbCount') + if (kbSelectedLength > 0) { + keyboardCount.classList.remove('fa-caret-right') + } + keyboardCount.textContent = `${kbSelectedLength}` +} + +function displayKbDetails(item) { + const kbDetails = document.createElement('div') + kbDetails.setAttribute('id', 'keyboardDetails') + kbDetails.classList.add('hidden') + kbDetails.innerHTML = ` +
    +
  • + + + +
  • +
  • +
    +
    Version
    +
    ${item.version || "N/A"}
    +
    +
  • + +
  • +
    +
    Total downloads
    +
    ${item.totalDownloads || 0}
    +
    +
  • +
  • +
    +
    Supported Platforms
    +
    + ${platformSupport(item.platformSupport) || 'No platforms supported'} +
    +
    +
  • +
+ ` + return kbDetails +} + +function enableKbToType() { + // kbDiv.addEventListener('mouseenter', () => { + // kbDiv.style.cursor = "pointer" + // openKbDetails() + // }) + + kbDiv.addEventListener('click', async (e) => { + e.preventDefault() + + if (!data.id || !data || !item.helpLink) { + console.error("Missing Data or Item") + } + + let kbName = `Keyboard_${data.id}` + let keyboards = keyman.getKeyboards(); + let keyboard = keyboards.find(keyboard => keyboard.InternalName == kbName) + + // console.log("All keyboards: ", keyboards) + // console.log("My keyboard: " + keyboard) + if(keyboard) { + languageCode = keyboard.LanguageCode + changeKeyboard(data.id, languageCode, item.helpLink) + } else { + console.warn("Keyboard not found: ", kbName) + } + }) } /* - Behavior of the Selected Keyboard + Behavior of the Selected Keyboard menu */ const kbSelection = document.querySelector('#keyboardSelection') keyboardSelectionButton.addEventListener('mouseenter', () => { @@ -601,6 +654,7 @@ const worldMapBtn = document.querySelector('#worldMap') const kmwControls = document.querySelector('#KeymanWebControl') const langSearchDropdown = document.querySelector('#languageSearchDropdown') const caretRightIcon = keyboardSelectionButton.querySelector('.fa-caret-right') +const infoIcon = document.querySelector('#infoIcon') let mapIsOpen worldMapBtn.onclick = () => { @@ -618,7 +672,6 @@ function toggleMapAndKb() { function openMap() { mapIsOpen = true - searchBtn.style.display = "none" kmwControls.classList.remove('hidden') kmwControls.style.display = "block" @@ -630,14 +683,15 @@ function openMap() { function openSearch() { mapIsOpen = false - searchBtn.style.display = "block" kmwControls.classList.add('hidden') kmwControls.style.display = "none" langSearchDropdown.classList.remove('hidden') + infoIcon.classList.remove('hidden') searchBoxForm.innerHTML = '' searchBoxForm.appendChild(searchBtn) + searchBoxForm.appendChild(infoIcon) searchBoxForm.appendChild(langSearchDropdown) } diff --git a/index.php b/index.php index 4797c2c..ee0f9b6 100644 --- a/index.php +++ b/index.php @@ -21,10 +21,26 @@
World Map
+
+
+
+

Instruction

+
+
+
    +
  1. Search for any Keyman keyboard
  2. +
  3. Click on "+" to enable and store it in the keyboard selection menu
  4. +
  5. Switch between keyboards and start typing.
  6. +
+
+
-
- +
  • +
    +
    Source Path
    + +
    +
  • Supported Platforms
    @@ -599,11 +774,77 @@ function displayKbDetails(item) {
  • +
  • +
    +
    Last Updated
    +
    ${getOnlyDates(item.lastUpdated) || 0}
    +
    +
  • ` + kbDetails.appendChild(kbDetailsHead) + kbDetails.appendChild(kbDetailsContent) + return kbDetails } +// Get only the YYYY-mm-dd format +function getOnlyDates(dateData) { + const finalDateData = dateData.match(/^\d{4}-\d{2}-\d{2}/) + return finalDateData +} + +// Validate URLs +function validateURL(string) { + try { + const newUrl = new URL(string) + if (newUrl.protocol === 'https:') { + return newUrl + } else { + return false + } + } catch (error) { + console.error(error) + } +} +/* + == End of Keyboard Selection menu Section == +*/ + +// Change and type keyboard +const downloadBtn = document.getElementById('kbDownloadPage') +const textArea = document.getElementById('textArea') +async function changeKeyboard(kbdname, languageCode) { + + // selectedKbList.forEach(data => { + // let kbName = data.id + // let langCode = data.script + + // changeKeyboard(kbName, langCode) + // }) + console.log("kbdname: ", kbdname, " + ", "languageCode: ", languageCode) + if(kbdname == '') { + if (textArea) textArea.placeholder = 'Select a keyboard and start typing' + } + location.replace('#' + languageCode + ',Keyboard_' + kbdname); + + var kbd = keyman.getKeyboard(kbdname, languageCode); // Good + await keyman.setActiveKeyboard(kbdname, languageCode) // Good + console.log("kbd: ", kbd) + + if(kbd) { + textArea.placeholder = 'The ' + kbd.InternalName + ' keyboard is selected. Start typing...' + } + + const kbSpan = document.querySelector('#kbSpan') + const kbHelpDocATag = document.querySelector('#kbHelpdocLink') + textArea.placeholder = `The ${kbdname} keyboard is selected. Please start typing...` + kbSpan.innerHTML = `${kbdname}` + // kbHelpDocATag.href = `${kbdHelpLink}` + + if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname); +} + function enableKbToType() { // kbDiv.addEventListener('mouseenter', () => { // kbDiv.style.cursor = "pointer" @@ -629,22 +870,25 @@ function enableKbToType() { } else { console.warn("Keyboard not found: ", kbName) } - }) } -/* - Behavior of the Selected Keyboard menu +/* == Section == + UI interaction and manipulation */ + +/* UI Behavior of the Selected Keyboard menu */ const kbSelection = document.querySelector('#keyboardSelection') +const kbSelectionWrap = document.querySelector('.scroll-wrapper-keyboard-tab') +const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') keyboardSelectionButton.addEventListener('mouseenter', () => { - kbSelection.style.width = "100%" + kbSelection.classList.add('open') }) keyboardSelectionButton.addEventListener('click', () => { - kbSelection.style.width = "0px" + kbSelection.classList.remove('open') }) kbSelection.addEventListener('mouseleave', () => { - kbSelection.style.width = "0px" + kbSelection.classList.remove('open') }) /* diff --git a/inc/head.php b/inc/head.php index 9d73cee..6d6cbe1 100644 --- a/inc/head.php +++ b/inc/head.php @@ -59,6 +59,7 @@ + " /> " /> diff --git a/index.php b/index.php index ee0f9b6..3e19382 100644 --- a/index.php +++ b/index.php @@ -56,11 +56,11 @@ -
    -
    - Open Search to get your keyboard - -
    +
    +
    +

    Open Search to get your keyboard

    + +
    From d7a0046877a9ec32c4c5ed41794412df34b595ed Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Wed, 23 Jul 2025 10:42:00 +0700 Subject: [PATCH 18/38] feat: keyboards, examples, styles, text dir, fix some bugs --- cdn/dev/css/kmw-body.css | 2 + cdn/dev/css/kmw-desktop.css | 752 +++--------------------------------- cdn/dev/css/kmw-header.css | 23 +- cdn/dev/js/kmwControls.js | 18 +- cdn/dev/js/kmwHeader.js | 485 +++++++++++++++-------- inc/head.php | 3 +- index.php | 25 +- prog/languageexample.php | 6 +- 8 files changed, 426 insertions(+), 888 deletions(-) diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css index a632ac2..5e53260 100644 --- a/cdn/dev/css/kmw-body.css +++ b/cdn/dev/css/kmw-body.css @@ -101,6 +101,8 @@ i:hover { flex-direction: row; justify-content: center; align-items: center; + width: 1300px; + height: 500px; } .example-box { diff --git a/cdn/dev/css/kmw-desktop.css b/cdn/dev/css/kmw-desktop.css index c70ab66..09cc8af 100644 --- a/cdn/dev/css/kmw-desktop.css +++ b/cdn/dev/css/kmw-desktop.css @@ -6,162 +6,6 @@ ====================== */ -html { - overflow-y: auto; - overflow-x: hidden; - font-size: 14px; -} - -body { - width:100%; - font-family: Cabin, Arial, Helvetica, sans-serif; - color:#2D2C2C; - margin:0px; -} - -a { - text-decoration:none; - color: #2EADD3; - } - -a:hover { - text-decoration:underline; - } - -h3 { - font-size:18px; - } - -p { - font-size:13px; - line-height:1.5em; - } - -header, #content, footer { - /* width:960px; */ - margin:0px auto; - clear: both; - } - -.box { - -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -} - -/* -=================== -==Header Elements== -=================== -*/ -header { - position: fixed; - margin-left: auto; - margin-right: auto; - padding-bottom: 30px; - z-index: 1; -} - -header #headerBackground { - padding: 10px; -} - -header > div > img { - width: 100%; - display: block; - height: 8px; -} - -#headerBackground { - display: grid; - grid-template-columns: 5% 70% 25%; - justify-content: left; - align-items: center; - box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; - margin: 0px 0px; - background-color: white; -} - -#headerLeft { - margin-left: 10px; -} - -#headerLeft img { - display: block; /* default (inline) display inserts an unwanted bottom border */ - height: 50px; - /*-webkit-border-radius: 0px 0px 8px 8px; -moz-border-radius: 0px 0px 8px 8px; border-radius: 0px 0px 8px 8px;*/ -} - -#headerMiddle { - display: flex; - flex-direction: row; - justify-content: left; - align-items: center; - width: 100%; -} - -#headerMiddle div { - margin: 0px 15px; -} - -#headerMiddle div ul .row{ - margin: 0px !important; -} - -#headerMiddle div ul .row .col{ - margin: 0px !important; -} - -#headerRight { - display: grid; - grid-template-columns: 60% 20% 10% 10%; - justify-content: end; - align-items: center; - width: 100%; -} - -#headerRight div > * { - margin-right: 20px; -} - -#headerRight-beta { - display: block; - font-weight: bold; - color: red; - font-size: 16pt; - padding: 20px 12px 0; -} - -#headerRight-link { - padding: 0 12px 0; -} - -#headerBar { - width: 100%; -} -/* -==================== -==Content Elements== -==================== -*/ -#content { - min-height:375px; - } - - -/* KMW Main App */ -#app { - float:left; - /*height:330px;*/ - width:710px; - margin: 30px 15px 15px; - } -#KeymanWebControl { - width:710px; - height: 35px; - display:block; - -webkit-border-radius: 8px 8px 0px 0px; -moz-border-radius: 8px 8px 0px 0px; border-radius: 8px 8px 0px 0px; - } - #kmw_controls{ border-top-left-radius: 8px; border-top-right-radius: 8px; @@ -176,28 +20,6 @@ header > div > img { border-top-left-radius: 10px; } -#example,#help { - margin:8px 10px; - background-color:#95C6D6; - border:1px solid #2EADD3; - padding:2px; - text-align:center; - } - -#example { - visibility: hidden; - width:685px; - min-height: 45px; - display: flex; - justify-content: center; - align-items: center; - padding-top: 5px; -} - -#example a{ - padding-left: 10px; -} - textarea { height:260px; width:554px; @@ -215,520 +37,73 @@ form { #messageContainer { float:left; width:80%; - } - -/* KMW App Buttons */ - -#instructions { - margin:-1px 0px 2px; - } - -#buttons { - float:right; - padding-right:10px; - } - -#buttons div { - width:120px; - -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - background-color: #eeeeee; - border: 1px solid #888888; - margin: 0px 10px; -/* -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - color: white; - font: bold 14px Helvetica, Verdana, Arial, sans-serif; - text-shadow: 0px -1px 1px #1E2D4D; */ - text-align:left; - margin: 0 auto 6px; - padding: 3px; - padding-top: 9px; - height: 26px; - background-repeat: no-repeat; - background-position: center left; - } -#buttons div:disabled { - cursor: default !important; - color: #eeeeee !important; - /* -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; */ -} - -#buttons p{ - margin-left: 41px; -} - -#search{ - background-image:url('../img/btn_google_small.png'); - -} - -#search.linksOff{ - background-image:url('../img/btn_google_small_white.png'); -} - -#copy{ - background-image:url('../img/btn_copy_small.png'); - -} - -#copy.linksOff{ - background-image:url('../img/btn_copy_small_white.png'); -} - -#font{ - display: none; -} - -#mobile-font{ - display: none; -} - -#font-size{ - float: right; - width: 120px; - margin-right: 10px; - margin-bottom: 8px; - padding: 0px 4px; - display: table; -} - -#font-small{ - font-size: 10pt; - padding-top: 7px; - text-align: left; -} - -#font-large{ - font-size: 16pt; - text-align: right; -} - -.ui-slider-handle{ - width: 10px !important; - height: 10px !important; - cursor: pointer !important; - outline: none !important; -} - -#slider{ - height: 4px; - width: 68px; - float: left; - position: relative; - top: 14px; -} - -.font-letter{ - float: left; - width: 25px; - text-align: center; - display: table-cell; -} - -#buttons div * { - display:inline; - } - -div.links { - cursor:pointer; - } - -div.linksOff { - cursor:default !important; - border: 1px solid #cccccc !important; - } - -div.linksOff * { - color: gray; - -moz-user-select:none; - } - -hr { - margin: 6px 4px 6px 4px; - } - - -/* Aside Elements */ -aside { - float:right; - width:200px; - margin-right:15px; - } -aside h3 { - background-color: rgba(181, 177, 176, 0.2); - padding:6px 10px 7px; - margin:0px; - -webkit-border-radius: 8px 8px 0px 0px; -moz-border-radius: 8px 8px 0px 0px; border-radius: 8px 8px 0px 0px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - } -aside > div { - margin:30px 0px 0px; - } -aside p { - padding:10px; - margin:0px; - } -aside #learn { - font-size:13px; - text-align:center; - } - -#keymandesktop, #bookmarklet{ - display: none; } /* -=================== -==Footer Elements== -=================== +====================== +==Keyboard Examples== +====================== */ - -.button { - float: left; - width: 200px; - height: 40px; - line-height: 40px; - border-radius: 6px; - text-align: center; - margin: 20px; - cursor: pointer; - box-shadow: 1px 1px 2px #3e3e3e; -} - -.footer{ - bottom: 0; - left: 0; - float: left; - text-align: center; - width: 100%; - background: #A4A8AB; - line-height: 1; -} - -.footer .wrapper { - width: auto; - display: inline-block; - margin: 0; - text-align: left; -} - -.footer-third{ - float: left; - width: 320px; - margin-left: 4px; - margin-right: 4px; -} - -.footer-third-title{ - margin-top: 30px; - text-align: center; - font-size: 18pt; - font-weight: normal; - color: #fff; - margin-bottom: 25px; -} - -.footer-third form{ - width: 320px; -} - -.footer-third form input{ - -webkit-appearance: none; - padding: 0px; - float: left; - height: 38px; - width: 200px; - padding-left: 10px; - font-size: 14pt; - border-radius: 6px; - border-bottom-right-radius: 0px; - border-top-right-radius: 0px; - box-shadow: none; - border: 1px solid #FFFFFF; - margin-left: 10px; -} - -.footer-third form input:focus{ - outline: 0; -} - -#footer-mailchimp br { - clear: both; -} - -/* - social-logos font from https://github.com/Automattic/social-logos, GPLv2 - */ -@font-face { - font-family: "social-logos"; - src: url("../../fonts/social-logos.ttf"); - font-weight: normal; - font-style: normal; -} - -[data-icon]:before { - font-family: "social-logos" !important; - content: attr(data-icon); - font-style: normal !important; - font-weight: normal !important; - font-variant: normal !important; - text-transform: none !important; - line-height: 1; - speak: none; - padding-right: 4px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } - -#footer-social { - text-align: center; -} - -#footer-social a { - display: block; - text-decoration: none; - color: #666666; - font-size: 14pt; - padding: 4px; -} - -#footer-social a:hover { - color: #444444; -} - -#privacy-policy { - text-align: center; - margin-top: 16px; -} - -#privacy-policy a { - display: block; - text-decoration: none; - color: white; - font-size: 12pt; -} - -#privacy-policy a:hover { - color: #444444; -} - -#version { - color: #666666; - font-size: 10pt; - margin-top: 46px; +#example,#help { + margin: 5px 0px; text-align: center; } -#mobile-footer { - display: none; -} - -#footer-social div { - display: inline-block; - text-align: left; - margin-bottom: 24px; -} - -#footer-social a#footer-community { - padding-left: 27px; -} - -.subscribe{ - width: 90px; - margin: 0px; - border-top-left-radius: 0px; - border-bottom-left-radius: 0px; - background: #666666; - box-shadow: none; -} - -.subscribe:hover{ - background: #888888; -} - -.subscribe h2{ - font-size: 16px; - margin: 0px; -} - -.sil-logo a, .sil-logo a:visited { - color: white; - text-decoration: none; +#example { + visibility: hidden; + width: 100%; + min-height: 45px; + display: flex; + justify-content: center; + align-items: center; + padding-top: 5px; } -.sil-logo a:hover { - color: white; - text-decoration: underline; +#example a { + padding-left: 10px; } -.sil-logo { - text-align: center; - margin-top: 20px; +.highlightKeys kbd { + border: solid 1px #808080; + border-radius: 4px; + background: #cccccf; + color: black; + font-family: Verdana; + font-weight: normal; + min-width: 16px; + display: inline-block; + box-shadow: 2px 2px 1px rgba(128, 128, 128, 0.3); + margin-right: 4px; } -.sil-logo p{ - color: #fff; - font-size: 12pt; - margin-top: 10px; +.highlightKeys kbd.space { + min-width: 64px; } /* -=================== -==Extras== -=================== +====================== +==Keyboard Styling== +====================== */ - -#fblike{ -position: absolute; -left: 50%; -margin-left: 320px; - } - -nav ul { - list-style: none outside none; - width:90%; - margin:0px auto; - padding:15px 0px; - } - -nav li { - display:inline; - padding:20px 39px; - } - -nav a { - color:#eee; - font-family:Tahoma; - font-weight:bold; - font-size:10.7px; - } - -.messageBox { - -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; - -moz-box-shadow: 3px 3px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 3px 3px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 3px 3px 3px 0px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - position: fixed; - left: 50%; - top: 25%; - z-index: 10002; - margin-left: -250px; - margin-top: -50px; - width: 500px; - height: 200px; +.desktop, .kmw-osk-frame { + display: block !important; + position: static !important; + width: 100% !important; + height: 264px !important; + max-width: 100% !important; + max-height: 264px !important; + border-radius: 0; } -.messageBox div { - width: 464px; - height: 134px; - left: 10px; - top: 10px; - padding: 8px; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; - background: white; +.kmw-key-square { + z-index: 0 !important; } -.messageBox button { - width:83px; - position: absolute; - right: 10px; - bottom: 4px; - background: #414141; - border-top: 1px solid #383838; - border-right: 1px solid #1F1F1F; - border-bottom: 1px solid #151515; - border-left: 1px solid #1F1F1F; - -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - color: white; - font: bold 12px Helvetica, Verdana, Arial, sans-serif; - text-shadow: 0px -1px 1px #1E2D4D; - text-align:center; - margin: 0 auto 6px; - padding: 3px; - } - -.messageBox button:disabled { - cursor: default !important; +.kmw-spacebar-caption { color: gray !important; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; -} - -.messageBox button:hover { --webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - cursor: pointer; -} - -.messageBox button:active { - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; -} - -.progressBox { --webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; - -moz-box-shadow: 3px 3px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 3px 3px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 3px 3px 3px 0px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - position: fixed; - left: 50%; - top: 25%; - margin-left: -200px; - width: 400px; - height: 54px; -} - -.progressBox div { - width: 364px; - height: 18px; - left: 10px; - top: 10px; - padding: 8px; - background: url('../img/wait.gif') no-repeat 354px 8px white; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; -} - -#footer-logo{ - margin-top: 10px; } -#content {width: 960px;} - -/* -====================== -==Keyboard Styling== -====================== -*/ - .desktop .kmw-osk-frame, .desktop .kmw-osk-inner-frame, .desktop .kmw-key-layer-group { background-color: #95C6D6 !important; } @@ -762,7 +137,7 @@ nav a { .desktop .kmw-key-label { top: 5%; } .desktop .kmw-key-label { left: 10%; } .desktop .kmw-key-default .kmw-key-text { top: 25%; } - .desktop .kmw-footer, .desktop .kmw-title-bar { background: #2EADD3 !important; } + .desktop .kmw-footer, .desktop .kmw-title-bar { background: #2EADD3 !important; display: none;} .desktop .kmw-title-bar div{min-height: 100%;} .desktop .kmw-footer-caption a { color: white !important; } .kmw-osk-frame, .kmw-osk-inner-frame { border-color: #2EADD3 !important; } @@ -785,47 +160,6 @@ nav a { text-align: center; } -#keyman-desktop-download { - display: block; - text-align: center; - margin-top: 8px; -} - -#free-open-source { - color: #606060; - font-size: 8pt; - font-weight: normal; - display: block; - text-align: center; - -} - -#close { - float: right; - cursor: pointer; - position: relative; - top: -10px; -} - -#bookmarklet.hidden { - display: none; -} - -#bookmarklet div { - text-align: center; - margin: 16px 0 2px; -} - -#bookmarklet p { - font-size: 9px; - text-align: justify; -} - -#learn div { - margin: 0; - padding-bottom: 12px; -} - @media all and (min-width: 1320px) { ins.adsbygoogle { display: inline-block !important; diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index 5cc7f18..eaca661 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -85,6 +85,7 @@ Language Search box border-radius: 15px; text-align: left; background-color: rgb(233, 228, 228); + font-family: inherit !important; } #mainSearchBtn:focus { @@ -333,7 +334,7 @@ Language Search box /* Selected Keyboard Menu */ #keyboardSelectionButton { - z-index: 1; + z-index: 3; } .scroll-wrapper-keyboard-tab { @@ -362,6 +363,7 @@ Language Search box } #keyboardSelection.open { + position: relative; width: 400px; height: fit-content; padding: 0 0 10px; @@ -371,18 +373,27 @@ Language Search box #keyboardSelection p { margin: 0; height: 25px; + width: 100%; } -.kb-item-header { +.kb-item-header, .kb-item-footer { display: flex; align-items: center; justify-content: center; height: 30px; - border-bottom: 1px solid gray; font-weight: 500; margin: 5px 0; } +.kb-item-header { + border-bottom: 1px solid gray; +} + +.kb-item-footer { + border-top: 1px solid gray; + cursor: pointer; +} + .kb-item { width: 100%; max-height: fit-content; @@ -395,7 +406,6 @@ Language Search box .kb-item:hover { cursor: pointer; - height: fit-content; background-color: var(--keyman-orange); color: white; } @@ -710,6 +720,10 @@ input[type="range"]::-webkit-slider-thumb { grid-template-rows: 1fr; } +.dropdown-item:active { + background-color: transparent !important; +} + #burgerMenu ul li { align-items: center; width: 300px; @@ -798,6 +812,7 @@ input[type="range"]::-webkit-slider-thumb { font-family: "social-logos" !important; content: attr(data-icon); padding-right: 4px; + font-size: 16px; } .kmw-version { diff --git a/cdn/dev/js/kmwControls.js b/cdn/dev/js/kmwControls.js index e1445f0..185a218 100644 --- a/cdn/dev/js/kmwControls.js +++ b/cdn/dev/js/kmwControls.js @@ -3,8 +3,16 @@ KeymanWebControls (Map, Examples, Keyboards...etc) */ -$(document).ready(function() { - $("#KeymanWebControls").show( function() { - alert("Show") - }) -}) \ No newline at end of file +function waitForElement(selector, callback) { + const interval = setInterval(() => { + const el = document.querySelector(selector) + if (el) { + clearInterval(interval) + callback(el) + } + }, 100) +} + +waitForElement(".kmw-osk-frame", function(oskDiv) { + document.querySelector('.keyboard-area').appendChild(oskDiv) +}) \ No newline at end of file diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index 531182a..ba21180 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -11,16 +11,290 @@ function getKeymanWeb() { let selectedKbList = [] let dataKbForRemoval +document.addEventListener('DOMContentLoaded', () => { + /* == Section == + UI interaction and manipulation + */ + + /* + Toggle between World Map and Search + */ + const elements = { + worldMapBtn: document.querySelector('#worldMap'), + kmwControls: document.querySelector('#KeymanWebControl'), + + kbSelection: document.querySelector('#keyboardSelection'), + keyboardSelectionButton: document.getElementById('keyboardSelectionButton'), + langSearchDropdown: document.querySelector('#languageSearchDropdown'), + caretRightIcon: keyboardSelectionButton.querySelector('.fa-caret-right'), + infoIcon: document.querySelector('#infoIcon'), + + searchBoxForm: document.querySelector('.form'), + searchBtn: document.querySelector('#mainSearchBtn') + } + + const state = { + mapIsOpen: true + } + + /* UI Behavior of the Selected Keyboard menu */ + if (exists(elements)) { + elements.keyboardSelectionButton.addEventListener('mouseenter', () => { + elements.kbSelection.classList.add('open') + }) + elements.keyboardSelectionButton.addEventListener('click', () => { + elements.kbSelection.classList.remove('open') + }) + elements.kbSelection.addEventListener('mouseleave', () => { + elements.kbSelection.classList.remove('open') + }) + } + + elements.worldMapBtn?.addEventListener('click', (e) => { + e.preventDefault() + toggleMapAndKb() + }) + + function toggleMapAndKb() { + if (state.mapIsOpen == false) { + // Open Search + hideEls( + elements.kmwControls, + ) + showEls( + elements.langSearchDropdown, + elements.infoIcon + ) + + if (selectedKbList.length > 0) { + elements.caretRightIcon.textContent = selectedKbList.length + } else { + elements.caretRightIcon.textContent = '' + elements.caretRightIcon.classList.add('fa-caret-right') + } + + elements.searchBoxForm.replaceChildren( + elements.searchBtn, + elements.infoIcon, + elements.langSearchDropdown + ) + + state.mapIsOpen = true + } else { + // Open Map + removeClass( + elements.kmwControls, 'hidden' + ) + hideEls( + elements.langSearchDropdown + ) + removeTextContent( + elements.caretRightIcon + ) + + elements.searchBoxForm.replaceChildren( + elements.kmwControls + ) + returnToSearchBtn() + + state.mapIsOpen = false + } + } + + function returnToSearchBtn() { + removeClass(elements.caretRightIcon, 'fa-caret-right') + elements.caretRightIcon.classList.add('fa-magnifying-glass') + elements.keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" + elements.keyboardSelectionButton.style.border = '0px' + elements.kbSelection.style.display = "none" + + elements.keyboardSelectionButton.onclick = () => { + removeClass(elements.caretRightIcon, 'fa-magnifying-glass') + + if ((selectedKbList?.length || 0) < 1) { + elements.caretRightIcon.classList.add('fa-caret-right') + elements.caretRightIcon.textContent = '' + } + + elements.keyboardSelectionButton.style.backgroundColor = "" + elements.kbSelection.style.display = "block" + toggleMapAndKb() + } + } + + if (!typeof defaultKeyboard == 'function') { + console.warn('defaultKeyboard() is not defined.') + } + defaultKeyboard() +}) + +/* Utility functions */ +function hideEls(...elements) { + return elements.every(el => el.classList.add('hidden')) +} + +function showEls(...elements) { + return elements.every(el => el.classList.remove('hidden')) +} + +function removeClass(element, className) { + return element.classList.remove(className) +} + +function removeTextContent(...elements) { + return elements.every(el => el.textContent = '') +} + +/* Elements validation */ +function exists(...elements) { + return elements.every(el => el != null) +} + +/* + === Keyboard Execution === +*/ +const downloadBtn = document.getElementById('kbDownloadPage') +const textArea = document.getElementById('textArea') +let langExamples = []; + +function prepareSearchInputUI(dir = 'ltr', fontFamily = '') { + const searchTextBox = document.querySelector('#mainSearchBtn') + + searchTextBox.setAttribute('dir', dir) + searchTextBox.style.fontFamily = fontFamily + selectKb() +} + +function setTextDirection(targetEls, dir) { + const copyBtn = document.querySelector('#copyTool') + + targetEls.dir = dir + if (dir == 'rtl') { + copyBtn.style.right = '0' + copyBtn.style.left = '10px' + } else { + copyBtn.style.right = '' + copyBtn.style.left = '' + } +} + +function defaultKeyboard(kbdname = "basic_kbdus", languageCode = "en") { + if(!exists(kbdname, languageCode)) { + if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' + return + } + setKeyboardWithDirection(kbdname, languageCode) +} + +function selectKb(kbdname, languageCode) { + if(!exists(kbdname, languageCode)) { + if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' + return + } + setKeyboardWithDirection(kbdname, languageCode) +} + +// Change and type keyboard +async function setKeyboardWithDirection(kbdname, languageCode) { + const kbSpan = document.querySelector('#kbSpan') + const langTag = `#${languageCode}` + const kbTag = `Keyboard_${kbdname}` + + location.replace(`${langTag},${kbTag}`); + + await keyman.addKeyboards(kbdname) + const kbd = keyman.getKeyboard(kbdname, languageCode) + await keyman.setActiveKeyboard(kbdname, languageCode) + + if(kbd) { + textArea.placeholder = `The ${kbdname} keyboard is selected. Start typing...` + kbSpan.innerHTML = `${kbdname}` + + setTextDirection(textArea, textArea.dir) + } + updateExample(kbdname) + if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname) +} + +/* Language Examples AJAX */ +async function updateExample(kbdname) { + const keymanExample = document.getElementById("example") + const exampleBox = document.getElementById("exampleBox"); + + if (!keymanExample || !exampleBox) return false; + + if(kbdname == '') + { + keymanExample.textContent = `No example is available due to empty Keyboard name.` + return true; + } + + exampleBox.style.visibility='visible'; + keymanExample.style.visibility='visible'; + var activeLanguage = keyman.getActiveLanguage(); + + if(langExamples[activeLanguage + '_' + kbdname]) + { + keymanExample.innerHTML = langExamples[activeLanguage + '_' + kbdname]; + return true; + } + + langExamples[activeLanguage + '_' + kbdname] = 'Loading...'; + keymanExample.innerHTML = 'Loading...'; + + const link = `../../../prog/languageexample.php?keyboard=${kbdname}&language=${activeLanguage}`; + try { + const response = await fetch(link); + if(response.status == 200) { + const content = await response.text(); + + langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = content; + } else { + throw new Error(`Unable to retrieve content, status was ${response.status}: ${response.statusText}`); + } + } catch(e) { + langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = 'Error retrieving example: '+e.message; + throw e; + } +} + /* Search Box */ const searchBoxForm = document.querySelector('.form') searchBoxForm.addEventListener('click', function(e) { e.stopPropagation() + defaultKeyboard() }) /* Search */ const kbSearchCard = document.getElementById('kbSearchCardUI'); let debounceTimer +const searchBtn = document.querySelector('#mainSearchBtn') +const dropdown = new bootstrap.Dropdown(searchBtn, { + autoClose: 'outside' +}) + +searchBtn.addEventListener('focus', () => { + dropdown.show() +}) + +searchBtn.addEventListener('input', () => { + dropdown.show() +}) + +const dropdownMenu = document.querySelector('#languageSearchDropdown') +document.addEventListener('click', (e) => { + if (!searchBtn.contains(e.target) && !dropdownMenu.contains(e.target)) { + dropdown.hide() + } +}) + +// Hide Dropdown Search on Mouse leave +dropdownMenu.addEventListener('mouseleave', (e) => { + e.preventDefault() + dropdown.hide() +}) + /* Pagination */ prevBtn = document.getElementById('prevPage') nextBtn = document.getElementById('nextPage') @@ -57,8 +331,6 @@ function goNextPage() { } } -searchBtn = document.getElementById('mainSearchBtn') - const clearSearchIcon = document.querySelector('.clear-icon') const searchIcon = document.querySelector('.search-icon') @@ -210,7 +482,7 @@ function displaySearch(data, total = 0, query = '') { } // UI Search card -function searchKbCardUI(kb, marked = '', data) { +function searchKbCardUI(kb, marked = '', selectedKbList, data) { const kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) // Keyboard card container let cardWrap = document.createElement('div') @@ -271,9 +543,14 @@ function searchKbCardUI(kb, marked = '', data) { cardWrap.appendChild(kbSpecs) // Choose keyboard to selection - kbIconPTag.onclick = () => {addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data)} + kbIconPTag.onclick = (e) => { + e.stopPropagation() + addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) + textArea.focus() + selectKb() + } // console.log("Recent:", historyKbSelection.getHistory()); - + return cardWrap } @@ -355,6 +632,11 @@ function showMarkedContext(kb, matchField, matchValue) { } kbNameHeading.appendChild(kbHelpLink) kbNameHeading.appendChild(langNameSpan) + kbNameHeading.addEventListener('click', () => { + const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) + const newURL = checkedURL + kb.id + window.open(newURL, '_blank') + }) return kbNameHeading } @@ -392,7 +674,7 @@ function truncateDesc(kb, matchField, marked) { toggleBtn.addEventListener('click', e => { e.preventDefault() const isExpanded = toggleBtn.textContent == "Show more" - kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, '$&') : fullDesc + kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, (m) => m ? `${m}` : m) : fullDesc if (matchField == 'description') { kbDescHeading.innerHTML = isExpanded ? fullDesc.replace(marked, '$&') : shortText } @@ -491,7 +773,6 @@ function addKbToSelection(kb) { "supportedLanguage": kb.languages, "lastUpdated": kb.lastModifiedDate } - console.log(kb) // historyKbSelection.add(kbInfo) selectedKbList.push(kbInfo) } @@ -510,6 +791,11 @@ function generateKbUI(selectedKbList) { const kbDivHeader = document.createElement('div') kbDivHeader.textContent = "Keyboard Selection menu" kbDivHeader.classList.add('kb-item-header') + + const kbDivFoot = document.createElement('div') + kbDivFoot.textContent = "US Basic Keyboard" + kbDivFoot.classList.add('kb-item-footer') + keyboardSelection.appendChild(kbDivHeader) selectedKbList.forEach(data => { @@ -550,12 +836,17 @@ function generateKbUI(selectedKbList) { ` const kbDetails = displayKbDetails(data) - + kbDiv.appendChild(kbName) kbDiv.appendChild(kbConfigList) kbDiv.appendChild(kbDetails) keyboardSelection.appendChild(kbDiv) + keyboardSelection.append(kbDivFoot) + + let kbdName = data.id + let langCode = Object.keys(data.supportedLanguage)[0] || "en" + selectKb(kbdName, langCode) kbConfigList.addEventListener('click', (e) => { const target = e.target if (target.tagName == 'I' && target.dataset.action) { @@ -565,6 +856,17 @@ function generateKbUI(selectedKbList) { kbConfigMenu(action, id, helpLink) } }) + + kbDiv.addEventListener('click', () => { + kbdName = data.id + langCode = Object.keys(data.supportedLanguage)[0] || "en" + textArea.focus() + selectKb(kbdName, langCode) + }) + + kbDivFoot.onclick = () => { + defaultKeyboard() + } }) triggerKbCount(selectedKbList) } @@ -591,10 +893,27 @@ function triggerKbCount(selectedKbList) { // Keyboard count default for Keyboard selection menu function resetKbSelectionMenu() { const keyboardSelection = document.querySelector("#keyboardSelection") - keyboardSelection.innerHTML = '' + + const kbDivHeader = document.createElement('div') + kbDivHeader.textContent = "Keyboard Selection menu" + kbDivHeader.classList.add('kb-item-header') + + const kbItem = document.createElement('div') + kbItem.classList.add('.kb-item') + const pTag = document.createElement('p') pTag.textContent = "Open Search to get your keyboard" - keyboardSelection.appendChild(pTag) + + const kbDivFoot = document.createElement('div') + kbDivFoot.textContent = "US Basic Keyboard" + kbDivFoot.classList.add('kb-item-footer') + + kbItem.appendChild(pTag) + + keyboardSelection.appendChild(kbDivHeader) + keyboardSelection.appendChild(kbItem) + keyboardSelection.appendChild(kbDivFoot) + } // Compare and remove keyboard @@ -606,9 +925,10 @@ function removeKbSelected(kbId) { } // Check 6th keyboard -function confirmAndAddKb(kbIconPTag, kb, onConfirmAdd) { +function confirmAndAddKb(onConfirmAdd) { const warningDialogUI = limitKbSelectionUI(() => { selectedKbList.shift() + console.log(selectedKbList) onConfirmAdd() generateKbUI(selectedKbList) }) @@ -810,146 +1130,3 @@ function validateURL(string) { /* == End of Keyboard Selection menu Section == */ - -// Change and type keyboard -const downloadBtn = document.getElementById('kbDownloadPage') -const textArea = document.getElementById('textArea') -async function changeKeyboard(kbdname, languageCode) { - - // selectedKbList.forEach(data => { - // let kbName = data.id - // let langCode = data.script - - // changeKeyboard(kbName, langCode) - // }) - console.log("kbdname: ", kbdname, " + ", "languageCode: ", languageCode) - if(kbdname == '') { - if (textArea) textArea.placeholder = 'Select a keyboard and start typing' - } - location.replace('#' + languageCode + ',Keyboard_' + kbdname); - - var kbd = keyman.getKeyboard(kbdname, languageCode); // Good - await keyman.setActiveKeyboard(kbdname, languageCode) // Good - console.log("kbd: ", kbd) - - if(kbd) { - textArea.placeholder = 'The ' + kbd.InternalName + ' keyboard is selected. Start typing...' - } - - const kbSpan = document.querySelector('#kbSpan') - const kbHelpDocATag = document.querySelector('#kbHelpdocLink') - textArea.placeholder = `The ${kbdname} keyboard is selected. Please start typing...` - kbSpan.innerHTML = `${kbdname}` - // kbHelpDocATag.href = `${kbdHelpLink}` - - if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname); -} - -function enableKbToType() { - // kbDiv.addEventListener('mouseenter', () => { - // kbDiv.style.cursor = "pointer" - // openKbDetails() - // }) - - kbDiv.addEventListener('click', async (e) => { - e.preventDefault() - - if (!data.id || !data || !item.helpLink) { - console.error("Missing Data or Item") - } - - let kbName = `Keyboard_${data.id}` - let keyboards = keyman.getKeyboards(); - let keyboard = keyboards.find(keyboard => keyboard.InternalName == kbName) - - // console.log("All keyboards: ", keyboards) - // console.log("My keyboard: " + keyboard) - if(keyboard) { - languageCode = keyboard.LanguageCode - changeKeyboard(data.id, languageCode, item.helpLink) - } else { - console.warn("Keyboard not found: ", kbName) - } - }) -} - -/* == Section == - UI interaction and manipulation -*/ - -/* UI Behavior of the Selected Keyboard menu */ -const kbSelection = document.querySelector('#keyboardSelection') -const kbSelectionWrap = document.querySelector('.scroll-wrapper-keyboard-tab') -const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') -keyboardSelectionButton.addEventListener('mouseenter', () => { - kbSelection.classList.add('open') -}) -keyboardSelectionButton.addEventListener('click', () => { - kbSelection.classList.remove('open') -}) -kbSelection.addEventListener('mouseleave', () => { - kbSelection.classList.remove('open') -}) - -/* - Toggle between World Map and Search -*/ -const worldMapBtn = document.querySelector('#worldMap') -const kmwControls = document.querySelector('#KeymanWebControl') -const langSearchDropdown = document.querySelector('#languageSearchDropdown') -const caretRightIcon = keyboardSelectionButton.querySelector('.fa-caret-right') -const infoIcon = document.querySelector('#infoIcon') - -let mapIsOpen -worldMapBtn.onclick = () => { - toggleMapAndKb() -} - -function toggleMapAndKb() { - if (mapIsOpen == true) { - openSearch() - } else { - openMap() - returnToSearchBtn() - } -} - -function openMap() { - mapIsOpen = true - - kmwControls.classList.remove('hidden') - kmwControls.style.display = "block" - langSearchDropdown.classList.add('hidden') - - searchBoxForm.innerHTML = '' - searchBoxForm.appendChild(kmwControls) -} - -function openSearch() { - mapIsOpen = false - - kmwControls.classList.add('hidden') - kmwControls.style.display = "none" - langSearchDropdown.classList.remove('hidden') - infoIcon.classList.remove('hidden') - - searchBoxForm.innerHTML = '' - searchBoxForm.appendChild(searchBtn) - searchBoxForm.appendChild(infoIcon) - searchBoxForm.appendChild(langSearchDropdown) -} - -function returnToSearchBtn() { - caretRightIcon.classList.remove('fa-caret-right') - caretRightIcon.classList.add('fa-magnifying-glass') - keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" - keyboardSelectionButton.style.border = '0px' - keyboardSelection.style.display = "none" - keyboardSelectionButton.onclick = () => { - caretRightIcon.classList.remove('fa-magnifying-glass') - caretRightIcon.classList.add('fa-caret-right') - keyboardSelectionButton.style.backgroundColor = "" - keyboardSelection.style.display = "block" - openSearch() - } -} diff --git a/inc/head.php b/inc/head.php index 6d6cbe1..2d7b71e 100644 --- a/inc/head.php +++ b/inc/head.php @@ -61,6 +61,7 @@ " /> +" /> " /> @@ -179,14 +180,12 @@ function loadKeyboardFromHash() { if(localKeyboard && localLanguage) { keyman.setActiveKeyboard(localKeyboard, localLanguage); } - document.getElementById('textArea').focus(); }); pageLoading = false; (function() { var css = { - // "desktop" : "", blue keyboard styles "desktop" : "", "tablet" : "", "mobile" : "" diff --git a/index.php b/index.php index 3e19382..2b11cef 100644 --- a/index.php +++ b/index.php @@ -11,7 +11,7 @@ KeymanWeb.com
    - + × @@ -58,7 +58,11 @@
    -

    Open Search to get your keyboard

    +
    Keyboard Selection menu
    +
    +

    Open Search to get your keyboard

    +
    +
    @@ -130,13 +134,13 @@
    - - +
    diff --git a/prog/languageexample.php b/prog/languageexample.php index 2bb4925..8340ee9 100644 --- a/prog/languageexample.php +++ b/prog/languageexample.php @@ -26,7 +26,7 @@ use \Keyman\Site\Common\KeymanHosts; if(isset($_REQUEST['keyboard'])) $keyboard = $_REQUEST['keyboard']; else $keyboard = ''; - if(isset($_REQUEST['language'])) $language = $_REQUEST['language']; else $language = ''; + if(isset($_REQUEST['language'])) $language = $_REQUEST['language']; else $language = ''; if(empty($keyboard) || empty($language)) { $data = FALSE; @@ -50,8 +50,8 @@ function renderHelpIcon($keyboard, $language) { if($data !== FALSE) { echo $data; } else { - echo "No example is available, please refer to keyboard help"; + echo "No example is available"; } - echo renderHelpIcon($keyboard, $language); + // echo renderHelpIcon($keyboard, $language); ?> From b1079919224466a0ed7fb335ee820ccfc2d422b0 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 18 Aug 2025 11:30:14 +0700 Subject: [PATCH 19/38] feats: modularize functions, add validation, and rename --- cdn/dev/css/kmw-body.css | 18 +- cdn/dev/css/kmw-header.css | 52 ++--- cdn/dev/js/kmwControls.js | 18 -- cdn/dev/js/kmwHeader.js | 402 ++++++++++++++++++++----------------- inc/head.php | 64 +++--- index.php | 23 +-- 6 files changed, 301 insertions(+), 276 deletions(-) delete mode 100644 cdn/dev/js/kmwControls.js diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css index 5e53260..e874ebe 100644 --- a/cdn/dev/css/kmw-body.css +++ b/cdn/dev/css/kmw-body.css @@ -7,7 +7,6 @@ } body { - background-color: #F6F6F6; overflow: hidden; } @@ -50,6 +49,7 @@ i:hover { justify-content: center; align-items: center; width: 100%; + } .text-area { @@ -58,13 +58,19 @@ i:hover { width: 100%; box-shadow: var(--textarea-box); font-size: 16px; + border: none; + padding: 10px; +} + +.text-area::highlight { + border: red; } #copyTool { color: var(--keyman-blue); position: absolute; right: 10px; - top: 110px; + top: 97px; opacity: 50%; } @@ -118,6 +124,14 @@ i:hover { margin: 10px; } +#example { + visibility: visible !important; +} + +#exampleBox { + visibility: visible !important; +} + .keyboard-container { width: calc(100% - 40%); height: 100%; diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index eaca661..a3745a3 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -17,10 +17,10 @@ hr { header > div > img { width: 100%; display: block; - height: 8px; + height: 5px; } -#languageSearchDropdown { +#searchDropdownMenu { padding: 10px; margin: 0; } @@ -28,8 +28,7 @@ header > div > img { .main-header { display: grid; height: 75px; - padding: 10px; - background-color: white; + padding: 0 10px; box-shadow: var(--box-shadow); } @@ -43,63 +42,67 @@ header > div > img { align-items: center; } +.left-header img { + margin-right: 10px; +} + /* Language Search box */ -.form { +#searchBar { position: relative; width: 550px; margin-right: 10px; } -.info-icon-span { +#searchIcons { position: absolute; right: 5px; top: 12px; border-left: 1px solid gray; } -.info-icon-span > * { +#searchIcons > * { margin-right: 10px; padding-left: 15px; opacity: 50%; } -.info-icon-span > *:hover { +#searchIcons > *:hover { padding-left: 15px; opacity: 100%; } -.search-icon { +#magnifyingGlassIcon { display: inline; } -.clear-icon { +#clearSearchIcon { display: none; } -.form #mainSearchBtn { +#searchBar #searchInput { height: 50px; width: 100%; text-indent: 10px; border-radius: 15px; text-align: left; - background-color: rgb(233, 228, 228); font-family: inherit !important; + box-shadow: none; } -#mainSearchBtn:focus { - background-color: white; +#searchInput:hover, #searchInput:focus { + border: 1px solid var(--keyman-orange); } -#languageSearchDropdown { +#searchDropdownMenu { width: 100%; max-height: 600px; overflow: auto; scrollbar-width: thin; } -#languageSearchDropdown hr { +#searchDropdownMenu hr { margin: 15px 0; } @@ -315,7 +318,7 @@ Language Search box } /* Pagination */ -#languageSearchDropdown .bottom-row-search { +#searchDropdownMenu .bottom-row-search { background-color: white; align-items: center; justify-content: center; @@ -615,10 +618,11 @@ Language Search box .right-header { display: grid; - grid-template-columns: 90% 10%; - width: 350px; - justify-items: center; + grid-template-columns: 80% 20%; + width: 100%; + justify-items: right; align-items: center; + margin-right: 0; } .right-header i:hover { @@ -832,14 +836,14 @@ input[type="range"]::-webkit-slider-thumb { ================================ */ @media screen and (min-width: 1045px) { .main-header { - grid-template-columns: 3fr 1fr 1fr; + grid-template-columns: 3fr 1fr; } } /* Expanding the search box */ @media screen and (940px <= width <= 1045px) { .main-header { - grid-template-columns: 4fr 1fr 1fr; + grid-template-columns: 4fr 1fr; } } @@ -866,13 +870,13 @@ input[type="range"]::-webkit-slider-thumb { Language Search box */ - .form { + #searchBar { width: 50%; } } @media screen and (max-width: 565px) { - #languageSearchDropdown { + #searchDropdownMenu { width: 300px !important; } diff --git a/cdn/dev/js/kmwControls.js b/cdn/dev/js/kmwControls.js deleted file mode 100644 index 185a218..0000000 --- a/cdn/dev/js/kmwControls.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - This is the code to modify the fetched - KeymanWebControls (Map, Examples, Keyboards...etc) -*/ - -function waitForElement(selector, callback) { - const interval = setInterval(() => { - const el = document.querySelector(selector) - if (el) { - clearInterval(interval) - callback(el) - } - }, 100) -} - -waitForElement(".kmw-osk-frame", function(oskDiv) { - document.querySelector('.keyboard-area').appendChild(oskDiv) -}) \ No newline at end of file diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index ba21180..5687861 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -6,129 +6,179 @@ function getKeymanWeb() { } return window.keyman; } - /* Global Variables */ -let selectedKbList = [] -let dataKbForRemoval +let selectedKbList = [] // Main array for the search, kb selection...etc. +let dataKbForRemoval // For History search +let kmwLang = keyman.getActiveLanguage() +let kmwKb = keyman.getActiveKeyboard() + +const clearSearchIcon = document.querySelector('#clearSearchIcon') +const magnifying = document.querySelector('#magnifyingGlassIcon') + +const elements = { + worldMapBtn: document.querySelector('#worldMap'), + kmwControls: document.querySelector('#KeymanWebControl'), + + kbSelection: document.querySelector('#keyboardSelection'), + keyboardSelectionButton: document.querySelector('#keyboardSelectionButton'), + caretRightIcon: keyboardSelectionButton.querySelector('.fa-caret-right'), + + searchBar: document.querySelector('#searchBar'), + searchInput: document.querySelector('#searchInput'), + searchDropdownMenu: document.querySelector('#searchDropdownMenu'), + searchIcons: document.querySelector('#searchIcons'), +} -document.addEventListener('DOMContentLoaded', () => { - /* == Section == - UI interaction and manipulation - */ - - /* - Toggle between World Map and Search - */ - const elements = { - worldMapBtn: document.querySelector('#worldMap'), - kmwControls: document.querySelector('#KeymanWebControl'), - - kbSelection: document.querySelector('#keyboardSelection'), - keyboardSelectionButton: document.getElementById('keyboardSelectionButton'), - langSearchDropdown: document.querySelector('#languageSearchDropdown'), - caretRightIcon: keyboardSelectionButton.querySelector('.fa-caret-right'), - infoIcon: document.querySelector('#infoIcon'), - - searchBoxForm: document.querySelector('.form'), - searchBtn: document.querySelector('#mainSearchBtn') +const state = { + mapIsOpen: false +} + +/* + ===================================== Default keyboard ========================================= +*/ + +function defaultKeyboard(kbdname = "basic_kbdus", languageCode = "en") { + if(!exists(kbdname, languageCode)) { + if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' + return } + setKeyboardWithDirection(kbdname, languageCode) +} - const state = { - mapIsOpen: true +/* + ============================= Toggle between World Map and Search ============================== +*/ +elements.worldMapBtn?.addEventListener('click', (e) => { + e.preventDefault() + state.mapIsOpen = true + if (state.mapIsOpen == true) { + openMap() + keyman.addEventListener('keyboardchange', () => { + location.replace(`#${keyman.getActiveLanguage()},${keyman.getActiveKeyboard()}`) + updateExample(keyman.getActiveKeyboard()) + }) + } else { + openSearch() } +}) - /* UI Behavior of the Selected Keyboard menu */ - if (exists(elements)) { - elements.keyboardSelectionButton.addEventListener('mouseenter', () => { - elements.kbSelection.classList.add('open') - }) - elements.keyboardSelectionButton.addEventListener('click', () => { - elements.kbSelection.classList.remove('open') - }) - elements.kbSelection.addEventListener('mouseleave', () => { - elements.kbSelection.classList.remove('open') - }) +function openSearch() { + state.mapIsOpen = false + hideEls( + elements.kmwControls, + ) + showEls( + elements.searchDropdownMenu, + elements.searchIcons + ) + + if (selectedKbList.length > 0) { + elements.caretRightIcon.textContent = selectedKbList.length + removeClass(elements.caretRightIcon, 'fa-magnifying-glass') + } else { + elements.caretRightIcon.textContent = '' + elements.caretRightIcon.classList.add('fa-caret-right') } - elements.worldMapBtn?.addEventListener('click', (e) => { - e.preventDefault() - toggleMapAndKb() - }) - - function toggleMapAndKb() { - if (state.mapIsOpen == false) { - // Open Search - hideEls( - elements.kmwControls, - ) - showEls( - elements.langSearchDropdown, - elements.infoIcon - ) - - if (selectedKbList.length > 0) { - elements.caretRightIcon.textContent = selectedKbList.length - } else { - elements.caretRightIcon.textContent = '' - elements.caretRightIcon.classList.add('fa-caret-right') - } - - elements.searchBoxForm.replaceChildren( - elements.searchBtn, - elements.infoIcon, - elements.langSearchDropdown - ) + elements.searchBar.replaceChildren( + elements.searchInput, + elements.searchIcons, + elements.searchDropdownMenu + ) +} - state.mapIsOpen = true - } else { - // Open Map - removeClass( - elements.kmwControls, 'hidden' - ) - hideEls( - elements.langSearchDropdown - ) - removeTextContent( - elements.caretRightIcon - ) - - elements.searchBoxForm.replaceChildren( - elements.kmwControls - ) - returnToSearchBtn() - - state.mapIsOpen = false - } +function openMap() { + state.mapIsOpen = true + removeClass( + elements.kmwControls, 'hidden', + elements.caretRightIcon, 'fa-caret-right' + ) + hideEls( + elements.searchDropdownMenu + ) + removeTextContent( + elements.caretRightIcon + ) + elements.keyboardSelectionButton.removeAttribute('id', 'keyboardSelectionButton') + elements.keyboardSelectionButton.setAttribute('id', 'returnToSearchButton') + elements.caretRightIcon.classList.add('fa-magnifying-glass') + elements.keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" + elements.keyboardSelectionButton.style.border = '0px' + elements.keyboardSelectionButton.classList.add('return-to-search') + elements.kbSelection.style.display = "none" + elements.searchBar.replaceChildren( + elements.kmwControls + ) +} + +function returnToSearch() { + elements.keyboardSelectionButton.removeAttribute('id', 'returnToSearchButton') + elements.keyboardSelectionButton.setAttribute('id', 'keyboardSelectionButton') + + if ((selectedKbList?.length || 0) < 1) { + elements.caretRightIcon.classList.add('fa-caret-right') + removeClass(elements.caretRightIcon, 'fa-magnifying-glass') + elements.caretRightIcon.textContent = '' } - function returnToSearchBtn() { - removeClass(elements.caretRightIcon, 'fa-caret-right') - elements.caretRightIcon.classList.add('fa-magnifying-glass') - elements.keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" - elements.keyboardSelectionButton.style.border = '0px' - elements.kbSelection.style.display = "none" - - elements.keyboardSelectionButton.onclick = () => { - removeClass(elements.caretRightIcon, 'fa-magnifying-glass') + elements.keyboardSelectionButton.style.backgroundColor = "" + elements.kbSelection.style.display = "block" + openSearch() +} - if ((selectedKbList?.length || 0) < 1) { - elements.caretRightIcon.classList.add('fa-caret-right') - elements.caretRightIcon.textContent = '' +function waitForElement(selector) { + return new Promise((resolve) => { + const interval = setInterval(() => { + const element = document.querySelector(selector) + if (element) { + clearInterval(interval) + resolve(element) } + }, 100) + }) +} - elements.keyboardSelectionButton.style.backgroundColor = "" - elements.kbSelection.style.display = "block" - toggleMapAndKb() - } - } +waitForElement('#returnToSearchButton').then((element) => { + element.addEventListener('click', (e) => { + e.preventDefault() + returnToSearch() + }) +}) + +waitForElement(".kmw-osk-frame").then((oskDiv) => { + document.querySelector('.keyboard-area').appendChild(oskDiv) +}) - if (!typeof defaultKeyboard == 'function') { - console.warn('defaultKeyboard() is not defined.') +/* + ==================== Search Interaction =================== +*/ + +/* Search Input */ +const dropdown = new bootstrap.Dropdown(elements.searchInput, { + autoClose: 'outside' +}) + +document.addEventListener('click', (e) => { + if (!elements.searchInput.contains(e.target) && !elements.searchDropdownMenu.contains(e.target)) { + dropdown.hide() } - defaultKeyboard() }) -/* Utility functions */ +elements.searchInput.addEventListener('click', (e) => { + e.stopPropagation() + // defaultKeyboard() + dropdown.show() +}) + +// Hide Dropdown Search on Mouse leave +elements.searchDropdownMenu.addEventListener('mouseleave', (e) => { + e.preventDefault() + dropdown.hide() +}) + +/* + =========================== Utility functions ============================ +*/ function hideEls(...elements) { return elements.every(el => el.classList.add('hidden')) } @@ -150,6 +200,22 @@ function exists(...elements) { return elements.every(el => el != null) } +document.addEventListener('DOMContentLoaded', () => { + defaultKeyboard() + /* UI Behavior of the Selected Keyboard menu */ + if (exists(elements)) { + elements.keyboardSelectionButton.addEventListener('mouseenter', () => { + elements.kbSelection.classList.add('open') + }) + elements.keyboardSelectionButton.addEventListener('click', () => { + elements.kbSelection.classList.remove('open') + }) + elements.kbSelection.addEventListener('mouseleave', () => { + elements.kbSelection.classList.remove('open') + }) + } +}) + /* === Keyboard Execution === */ @@ -157,12 +223,12 @@ const downloadBtn = document.getElementById('kbDownloadPage') const textArea = document.getElementById('textArea') let langExamples = []; -function prepareSearchInputUI(dir = 'ltr', fontFamily = '') { - const searchTextBox = document.querySelector('#mainSearchBtn') - - searchTextBox.setAttribute('dir', dir) - searchTextBox.style.fontFamily = fontFamily - selectKb() +function selectKb(kbdname, languageCode) { + if(!exists(kbdname, languageCode)) { + if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' + return + } + setKeyboardWithDirection(kbdname, languageCode) } function setTextDirection(targetEls, dir) { @@ -178,29 +244,19 @@ function setTextDirection(targetEls, dir) { } } -function defaultKeyboard(kbdname = "basic_kbdus", languageCode = "en") { - if(!exists(kbdname, languageCode)) { - if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' - return - } - setKeyboardWithDirection(kbdname, languageCode) -} - -function selectKb(kbdname, languageCode) { - if(!exists(kbdname, languageCode)) { - if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' - return - } - setKeyboardWithDirection(kbdname, languageCode) -} - // Change and type keyboard async function setKeyboardWithDirection(kbdname, languageCode) { const kbSpan = document.querySelector('#kbSpan') const langTag = `#${languageCode}` - const kbTag = `Keyboard_${kbdname}` + let kbTag = '' + + if (kbdname.match(/Keyboard_*/)) { + kbTag = `${kbdname}` + } else { + kbTag = `Keyboard_${kbdname}` + } - location.replace(`${langTag},${kbTag}`); + location.replace(`${langTag},${kbTag}`) await keyman.addKeyboards(kbdname) const kbd = keyman.getKeyboard(kbdname, languageCode) @@ -219,7 +275,7 @@ async function setKeyboardWithDirection(kbdname, languageCode) { /* Language Examples AJAX */ async function updateExample(kbdname) { const keymanExample = document.getElementById("example") - const exampleBox = document.getElementById("exampleBox"); + const exampleBox = document.getElementById("exampleBox") if (!keymanExample || !exampleBox) return false; @@ -229,9 +285,7 @@ async function updateExample(kbdname) { return true; } - exampleBox.style.visibility='visible'; - keymanExample.style.visibility='visible'; - var activeLanguage = keyman.getActiveLanguage(); + let activeLanguage = keyman.getActiveLanguage(); if(langExamples[activeLanguage + '_' + kbdname]) { @@ -242,7 +296,7 @@ async function updateExample(kbdname) { langExamples[activeLanguage + '_' + kbdname] = 'Loading...'; keymanExample.innerHTML = 'Loading...'; - const link = `../../../prog/languageexample.php?keyboard=${kbdname}&language=${activeLanguage}`; + const link = `/prog/languageexample.php?keyboard=${kbdname}&language=${activeLanguage}`; try { const response = await fetch(link); if(response.status == 200) { @@ -258,43 +312,10 @@ async function updateExample(kbdname) { } } -/* Search Box */ -const searchBoxForm = document.querySelector('.form') -searchBoxForm.addEventListener('click', function(e) { - e.stopPropagation() - defaultKeyboard() -}) - /* Search */ const kbSearchCard = document.getElementById('kbSearchCardUI'); let debounceTimer -const searchBtn = document.querySelector('#mainSearchBtn') -const dropdown = new bootstrap.Dropdown(searchBtn, { - autoClose: 'outside' -}) - -searchBtn.addEventListener('focus', () => { - dropdown.show() -}) - -searchBtn.addEventListener('input', () => { - dropdown.show() -}) - -const dropdownMenu = document.querySelector('#languageSearchDropdown') -document.addEventListener('click', (e) => { - if (!searchBtn.contains(e.target) && !dropdownMenu.contains(e.target)) { - dropdown.hide() - } -}) - -// Hide Dropdown Search on Mouse leave -dropdownMenu.addEventListener('mouseleave', (e) => { - e.preventDefault() - dropdown.hide() -}) - /* Pagination */ prevBtn = document.getElementById('prevPage') nextBtn = document.getElementById('nextPage') @@ -331,25 +352,25 @@ function goNextPage() { } } -const clearSearchIcon = document.querySelector('.clear-icon') -const searchIcon = document.querySelector('.search-icon') - /* Click: Open Search and Display search instructions */ -searchBtn.addEventListener('click', function(e) { - if (e.target.value.trim() == "") { +elements.searchInput.addEventListener('click', function(e) { + const query = e.target.value.trim() + if (query == "") { resetSearch() + } else { + searchKeyboard(query) } }) /* Input: Search and Display keyboards */ -searchBtn.addEventListener('input', function(e) { +elements.searchInput.addEventListener('input', function(e) { handleSearch(e.target.value) }) clearSearchIcon.addEventListener('click', () => { - searchBtn.value = '' + elements.searchInput.value = '' handleSearch() - searchBtn.focus() + elements.searchInput.focus() }) function handleSearch(value = "") { @@ -372,7 +393,7 @@ function resetSearch() { function updateSearchIcon(value) { const hasValue = value.length > 0 - searchIcon.style.display = hasValue ? 'none' : 'inline' + magnifying.style.display = hasValue ? 'none' : 'inline' clearSearchIcon.style.display = hasValue ? 'inline' : 'none' } @@ -742,7 +763,7 @@ function addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) { checkKbCardUI(kbIconPTag, cardWrap, kb) return } - confirmAndAddKb(kbIconPTag, kb, () => { + confirmAndAddKb(() => { addKbToSelection(kb) generateKbUI(selectedKbList) @@ -757,7 +778,6 @@ function addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) { }, 800) checkKbCardUI(kbIconPTag, cardWrap, kb) }) - } // Add keyboard for kb search and selection UI @@ -853,7 +873,7 @@ function generateKbUI(selectedKbList) { const action = target.dataset.action const id = target.dataset.id const helpLink = target.dataset.helplink - kbConfigMenu(action, id, helpLink) + kbConfigMenu(action, id, helpLink) } }) @@ -867,6 +887,11 @@ function generateKbUI(selectedKbList) { kbDivFoot.onclick = () => { defaultKeyboard() } + + const kbHelpLink = document.querySelector('#kbHelpdocLink') + kbHelpLink.addEventListener('click', (e) => { + kbConfigMenu('help', '', data.helpLink) + }) }) triggerKbCount(selectedKbList) } @@ -913,7 +938,6 @@ function resetKbSelectionMenu() { keyboardSelection.appendChild(kbDivHeader) keyboardSelection.appendChild(kbItem) keyboardSelection.appendChild(kbDivFoot) - } // Compare and remove keyboard @@ -921,15 +945,18 @@ function removeKbSelected(kbId) { if(kbId) { selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) } - generateKbUI(selectedKbList) } // Check 6th keyboard function confirmAndAddKb(onConfirmAdd) { + if (typeof onConfirmAdd != 'function') { + console.log("Expected the onConfirmAdd a function, instead got: " + typeof onConfirmAdd) + alert("Click on the keyboard again to enable.") + } + const warningDialogUI = limitKbSelectionUI(() => { - selectedKbList.shift() - console.log(selectedKbList) onConfirmAdd() + selectedKbList.shift() generateKbUI(selectedKbList) }) @@ -999,8 +1026,13 @@ function limitKbSelectionUI(onAccept) { return dialogDiv } -let selectedKbData = [] +// Seperate list for History/Remember Search + +/* + ========================== To be continued ========================== +*/ function addDataKb(data) { + let selectedKbData = [] // console.log(data) const kbInfo = { "platformSupport": data.platformSupport, @@ -1010,6 +1042,8 @@ function addDataKb(data) { selectedKbData.push(kbInfo) } +// End of History search + // Keyboard selection menu's tools: help, download, and remove function kbConfigMenu(action, id, helplink) { if (action == "help") { diff --git a/inc/head.php b/inc/head.php index 2d7b71e..2050b3f 100644 --- a/inc/head.php +++ b/inc/head.php @@ -114,34 +114,6 @@ function bcp47ToISO6393(bcp) { var iso=mapBCP47_ISO6393[bcp]; return iso?iso:bcp; } - - var localKeyboard, localLanguage; - - function loadKeyboardFromHash() { - var locationHash = location.hash.match(/^#(.+),(Keyboard_.+)$/i); - if(locationHash) { - localKeyboard = locationHash[2]; - localLanguage = locationHash[1]; - - // Translate the language ID if necessary from ISO639-3 to BCP 47 - localLanguage = iso6393ToBCP47(localLanguage); - - document.cookie = 'KeymanWeb_Keyboard=current%3D'+localKeyboard+'%3A'+localLanguage+'%3B; path=/'; - document.cookie = 'KeymanWeb_Toolbar=recent0='+localLanguage+'%2C'+localKeyboard+'%3B; path=/'; - } else if(location.hash == '#') { - document.cookie = 'KeymanWeb_Keyboard=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT'; - document.cookie = 'KeymanWeb_Toolbar=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT'; - } else { - var cookie = keyman.util.loadCookie('KeymanWeb_Keyboard'); - if(cookie['current']) { - var cookieMatch = cookie['current'].match(/^(Keyboard_.+):(.+)$/); - if(cookieMatch) { - localKeyboard = cookieMatch[1]; - localLanguage = iso6393ToBCP47(cookieMatch[2]); - } - } - } - } @@ -154,8 +126,37 @@ function loadKeyboardFromHash() { + + + From 5fee5dc859a70c924c4bb63bb60998d87a30c75f Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 18 Aug 2025 11:38:03 +0700 Subject: [PATCH 20/38] feats: remove js references --- index.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/index.php b/index.php index 5ab1a6d..b6e1e8e 100644 --- a/index.php +++ b/index.php @@ -180,8 +180,6 @@ - - From ed07a5a5d4b0ef0448ab3be626aed913ca8e34fb Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Thu, 2 Oct 2025 13:27:10 +0700 Subject: [PATCH 21/38] feat: introduce and start devices styling, apply drag between kb and textarea, and more (note-to-self: these features are not finished but require this commit because of switching to macos) --- .github/multi-labeler.yml | 86 +- .github/workflows/add-to-keyman-project.yml | 38 +- .github/workflows/ci.yml | 146 +- .github/workflows/labeler.yml | 30 +- .gitignore | 28 +- .htaccess | 94 +- SPZITg5E.txt | 1 - _includes/2020/WebKeymanComSentry.php | 40 +- _includes/autoload.php | 48 +- cdn/dev/css/kmw-body.css | 529 ++-- cdn/dev/css/kmw-desktop.css | 393 +-- cdn/dev/css/kmw-header.css | 1793 +++++++------ cdn/dev/css/kmw-mobile.css | 586 ++--- cdn/dev/css/kmw-tablet.css | 1076 ++++---- cdn/dev/css/kmw.css | 156 +- cdn/dev/js/kmwBody.js | 289 +-- cdn/dev/js/kmwElements.js | 36 + cdn/dev/js/kmwHeader.js | 2522 ++++++++++--------- cdn/dev/js/kmwlive.js | 942 +++---- cdn/dev/src/bootstrap.bundle.min.js | 14 +- cdn/dev/src/bootstrap.min.css | 12 +- inc/head.php | 460 ++-- inc/servervars.php | 188 +- index.php | 368 ++- prog/languageexample.php | 114 +- prog/renderLanguageExample.php | 592 ++--- 26 files changed, 5246 insertions(+), 5335 deletions(-) delete mode 100644 SPZITg5E.txt create mode 100644 cdn/dev/js/kmwElements.js diff --git a/.github/multi-labeler.yml b/.github/multi-labeler.yml index a8d5e25..95ad40b 100644 --- a/.github/multi-labeler.yml +++ b/.github/multi-labeler.yml @@ -1,43 +1,43 @@ -version: v1 - -# This file adds labels based on the scopes in -# keymanapp/keyman:resources/scopes/commit-types.json -# Currently it must be manually kept up to date. Not all labels are added, only -# common ones. The others are commented out. - - -labels: - # - # conventional commit / semantic PR styles - # - - - label: 'auto' - matcher: - title: '^auto(\(|:)' - - label: 'change' - matcher: - title: '^change(\(|:)' - - label: 'chore' - matcher: - title: '^chore(\(|:)' - - label: 'docs' - matcher: - title: '^docs(\(|:)' - - label: 'feat' - matcher: - title: '^feat(\(|:)' - - label: 'fix' - matcher: - title: '^fix(\(|:)' - - label: 'maint' - matcher: - title: '^maint(\(|:)' - - label: 'refactor' - matcher: - title: '^refactor(\(|:)' - - label: 'style' - matcher: - title: '^style(\(|:)' - - label: 'test' - matcher: - title: '^test(\(|:)' +version: v1 + +# This file adds labels based on the scopes in +# keymanapp/keyman:resources/scopes/commit-types.json +# Currently it must be manually kept up to date. Not all labels are added, only +# common ones. The others are commented out. + + +labels: + # + # conventional commit / semantic PR styles + # + + - label: 'auto' + matcher: + title: '^auto(\(|:)' + - label: 'change' + matcher: + title: '^change(\(|:)' + - label: 'chore' + matcher: + title: '^chore(\(|:)' + - label: 'docs' + matcher: + title: '^docs(\(|:)' + - label: 'feat' + matcher: + title: '^feat(\(|:)' + - label: 'fix' + matcher: + title: '^fix(\(|:)' + - label: 'maint' + matcher: + title: '^maint(\(|:)' + - label: 'refactor' + matcher: + title: '^refactor(\(|:)' + - label: 'style' + matcher: + title: '^style(\(|:)' + - label: 'test' + matcher: + title: '^test(\(|:)' diff --git a/.github/workflows/add-to-keyman-project.yml b/.github/workflows/add-to-keyman-project.yml index c55d0b2..b8c5b74 100644 --- a/.github/workflows/add-to-keyman-project.yml +++ b/.github/workflows/add-to-keyman-project.yml @@ -1,19 +1,19 @@ -name: Add new issues and pull requests to projects - -on: - pull_request: - types: - - opened - issues: - types: - - opened - -jobs: - add-to-project: - name: Add new issues and pull requests to project - runs-on: ubuntu-latest - steps: - - uses: actions/add-to-project@v1.0.2 - with: - project-url: https://github.com/orgs/keymanapp/projects/1 - github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} +name: Add new issues and pull requests to projects + +on: + pull_request: + types: + - opened + issues: + types: + - opened + +jobs: + add-to-project: + name: Add new issues and pull requests to project + runs-on: ubuntu-latest + steps: + - uses: actions/add-to-project@v1.0.2 + with: + project-url: https://github.com/orgs/keymanapp/projects/1 + github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f53696..3f4abad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,73 +1,73 @@ -name: CI - -on: [pull_request] - -jobs: - - build-test: - runs-on: ubuntu-latest - env: - KEYMANHOSTS_TIER: TIER_TEST - # Composer started complaining about running as root, but we don't care in a GHA - COMPOSER_ALLOW_SUPERUSER: 1 - - steps: - - name: Checkout - uses: actions/checkout@v3.5.2 - - # Build the docker image and create link to vendor/ dependencies - - name: Build the Docker image - shell: bash - run: | - echo "TIER_TEST" > tier.txt - ./build.sh configure build start - env: - fail-fast: true - - # - # Finally, run the tests; note that this is almost all replicated in build.sh; here logging is reduced (TODO sync) - # - - name: PHP unit tests - shell: bash - run: | - docker exec web-keyman-com-app sh -c "vendor/bin/phpunit --testdox" - - - name: Lint - shell: bash - run: | - ( set +e; set +o pipefail; find . -name '*.php' | grep -v '/vendor/' | xargs -n 1 -d '\n' php -l | grep -v "No syntax errors detected"; exit ${PIPESTATUS[2]} ) - - - name: Check broken links - shell: bash - run: | - set +e; - set +o pipefail; - npx broken-link-checker http://localhost:8057 --ordered --recursive --requests 50 --host-requests 50 -e --filter-level 3 | \ - grep -E "BROKEN|Getting links from" | \ - grep -B 1 "BROKEN" - exit ${PIPESTATUS[0]} - - - name: Check PHP errors - shell: bash - run: | - CONTAINER=`docker container ls -l -q` - if docker container logs $CONTAINER 2>&1 | grep -q 'php7'; then - echo 'PHP reported errors or warnings:' - docker container logs $CONTAINER 2>&1 | grep 'php7' - exit 1 - else - echo 'No PHP errors found' - exit 0 - fi - # - # If any of the tests fail, let's grab a bit more detail on the environment - # - - name: Report errors - if: ${{ failure() }} - shell: bash - run: | - CONTAINER=`docker container ls -l -q` - echo "--- tier.txt ---" - cat tier.txt - echo "--- PHP errors in Docker log ---" - docker container logs $CONTAINER 2>&1 | grep 'php7' +name: CI + +on: [pull_request] + +jobs: + + build-test: + runs-on: ubuntu-latest + env: + KEYMANHOSTS_TIER: TIER_TEST + # Composer started complaining about running as root, but we don't care in a GHA + COMPOSER_ALLOW_SUPERUSER: 1 + + steps: + - name: Checkout + uses: actions/checkout@v3.5.2 + + # Build the docker image and create link to vendor/ dependencies + - name: Build the Docker image + shell: bash + run: | + echo "TIER_TEST" > tier.txt + ./build.sh configure build start + env: + fail-fast: true + + # + # Finally, run the tests; note that this is almost all replicated in build.sh; here logging is reduced (TODO sync) + # + - name: PHP unit tests + shell: bash + run: | + docker exec web-keyman-com-app sh -c "vendor/bin/phpunit --testdox" + + - name: Lint + shell: bash + run: | + ( set +e; set +o pipefail; find . -name '*.php' | grep -v '/vendor/' | xargs -n 1 -d '\n' php -l | grep -v "No syntax errors detected"; exit ${PIPESTATUS[2]} ) + + - name: Check broken links + shell: bash + run: | + set +e; + set +o pipefail; + npx broken-link-checker http://localhost:8057 --ordered --recursive --requests 50 --host-requests 50 -e --filter-level 3 | \ + grep -E "BROKEN|Getting links from" | \ + grep -B 1 "BROKEN" + exit ${PIPESTATUS[0]} + + - name: Check PHP errors + shell: bash + run: | + CONTAINER=`docker container ls -l -q` + if docker container logs $CONTAINER 2>&1 | grep -q 'php7'; then + echo 'PHP reported errors or warnings:' + docker container logs $CONTAINER 2>&1 | grep 'php7' + exit 1 + else + echo 'No PHP errors found' + exit 0 + fi + # + # If any of the tests fail, let's grab a bit more detail on the environment + # + - name: Report errors + if: ${{ failure() }} + shell: bash + run: | + CONTAINER=`docker container ls -l -q` + echo "--- tier.txt ---" + cat tier.txt + echo "--- PHP errors in Docker log ---" + docker container logs $CONTAINER 2>&1 | grep 'php7' diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index f0d4218..99a60dd 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -1,15 +1,15 @@ -name: "Pull Request Labeler" -on: -- pull_request - -jobs: - triage: - if: github.repository == 'keymanapp/keymanweb.com' - runs-on: ubuntu-latest - steps: - - name: Update labels based on PR title - id: labeler - uses: fuxingloh/multi-labeler@f5bd7323b53b0833c1e4ed8d7b797ae995ef75b4 # v2.0.1 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - config-path: .github/multi-labeler.yml +name: "Pull Request Labeler" +on: +- pull_request + +jobs: + triage: + if: github.repository == 'keymanapp/keymanweb.com' + runs-on: ubuntu-latest + steps: + - name: Update labels based on PR title + id: labeler + uses: fuxingloh/multi-labeler@f5bd7323b53b0833c1e4ed8d7b797ae995ef75b4 # v2.0.1 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + config-path: .github/multi-labeler.yml diff --git a/.gitignore b/.gitignore index bbdab99..bb83a5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,14 @@ -.idea/** -cdn/deploy - -/vendor -.data/ - -# Shared files are bootstrapped: -resources/bootstrap.inc.sh -resources/.bootstrap-version -resources/.bootstrap-registry -_common/ - -# State files -_control/debug +.idea/** +cdn/deploy + +/vendor +.data/ + +# Shared files are bootstrapped: +resources/bootstrap.inc.sh +resources/.bootstrap-version +resources/.bootstrap-registry +_common/ + +# State files +_control/debug diff --git a/.htaccess b/.htaccess index 3605a73..ad75644 100644 --- a/.htaccess +++ b/.htaccess @@ -1,47 +1,47 @@ - -php_value display_errors off -php_value display_startup_errors off - - - php_value display_startup_errors on - php_value display_errors stderr - - - - - Header set Access-Control-Allow-Origin "*" - - - AddType font/ttf .ttf - AddType application/javascript .js - - AddCharset UTF-8 .js - - - RewriteEngine on - RewriteBase / - - - -# Keymanweb.com 2.0 rewrite rules for Keymanweb.com 1.0 /go/lang/kbd urls - -# Rewrite /go/lang/kbd/app[?...] to /?kmwlang=lang,kmwkbd=kbd -RewriteRule "^go/([^/]+)/([^/]+)/([^?]+)(\?)?(.+)?$" "/index.php?kmwlang=$1&kmwkbd=Keyboard_$2&$5" - -# Rewrite /go/lang/kbd[?...] to /?kmwlang=lang,kmwkbd=kbd -RewriteRule "^go/([^/]+)/([^?]+)(\?)?(.+)?$" "/index.php?kmwlang=$1&kmwkbd=Keyboard_$2&$4" - -# Keymanweb.com 2.0 rewrite rules for Keymanweb.com 1.0 /lang/app.php urls - -# Redirect /lang/app?kmwlang=lang,kmwkbd=kbd to /?kmwlang=lang,kmwkbd=kbd -RedirectMatch "^../[^?]+?kmwlang=(.+)&kmwkbd=(.+)(&(.+))?$" "/go/$1/$2" - -# Redirect /lang/app to / -RedirectMatch "^../[^?]+$" "/" - -# Redirect /mini/* to / -RedirectMatch "^mini/" "/" - -# Control rules -RewriteRule "^_control/info$" "_control/info.php" [END] -RewriteRule "^_control/ready$" "_control/ready.php" [END] + +php_value display_errors off +php_value display_startup_errors off + + + php_value display_startup_errors on + php_value display_errors stderr + + + + + Header set Access-Control-Allow-Origin "*" + + + AddType font/ttf .ttf + AddType application/javascript .js + + AddCharset UTF-8 .js + + + RewriteEngine on + RewriteBase / + + + +# Keymanweb.com 2.0 rewrite rules for Keymanweb.com 1.0 /go/lang/kbd urls + +# Rewrite /go/lang/kbd/app[?...] to /?kmwlang=lang,kmwkbd=kbd +RewriteRule "^go/([^/]+)/([^/]+)/([^?]+)(\?)?(.+)?$" "/index.php?kmwlang=$1&kmwkbd=Keyboard_$2&$5" + +# Rewrite /go/lang/kbd[?...] to /?kmwlang=lang,kmwkbd=kbd +RewriteRule "^go/([^/]+)/([^?]+)(\?)?(.+)?$" "/index.php?kmwlang=$1&kmwkbd=Keyboard_$2&$4" + +# Keymanweb.com 2.0 rewrite rules for Keymanweb.com 1.0 /lang/app.php urls + +# Redirect /lang/app?kmwlang=lang,kmwkbd=kbd to /?kmwlang=lang,kmwkbd=kbd +RedirectMatch "^../[^?]+?kmwlang=(.+)&kmwkbd=(.+)(&(.+))?$" "/go/$1/$2" + +# Redirect /lang/app to / +RedirectMatch "^../[^?]+$" "/" + +# Redirect /mini/* to / +RedirectMatch "^mini/" "/" + +# Control rules +RewriteRule "^_control/info$" "_control/info.php" [END] +RewriteRule "^_control/ready$" "_control/ready.php" [END] diff --git a/SPZITg5E.txt b/SPZITg5E.txt deleted file mode 100644 index b18c597..0000000 --- a/SPZITg5E.txt +++ /dev/null @@ -1 +0,0 @@ -1c30e207-a415-417b-9ee3-a73057e3add6 \ No newline at end of file diff --git a/_includes/2020/WebKeymanComSentry.php b/_includes/2020/WebKeymanComSentry.php index a898ee3..8b62d8a 100644 --- a/_includes/2020/WebKeymanComSentry.php +++ b/_includes/2020/WebKeymanComSentry.php @@ -1,21 +1,21 @@ -TierName(); - return KeymanSentry::GetBrowserHTML(SENTRY_DSN, $tier == 'stable' ? $kmwbuild : "$kmwbuild-$tier"); - } +TierName(); + return KeymanSentry::GetBrowserHTML(SENTRY_DSN, $tier == 'stable' ? $kmwbuild : "$kmwbuild-$tier"); + } } \ No newline at end of file diff --git a/_includes/autoload.php b/_includes/autoload.php index 5cfebed..83cf2ef 100644 --- a/_includes/autoload.php +++ b/_includes/autoload.php @@ -1,24 +1,24 @@ - *{ - margin: 0 5px; - } -} - -@media screen and (max-width: 400px) { - .example-box p { - font-size: 10px; - } -} - -/* Animation */ - -.textarea-animation { - animation: highlight 3s; -} - -@keyframes highlight { - from {box-shadow:#2EADD3 0px 0px 0px 3px;} - to {box-shadow: var(--textarea-box);} +* { + box-sizing: border-box; +} + +:root { + --textarea-box: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset +} + +body { + overflow: hidden; +} + +.container-flex { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; +} + +.hidden { + display: none !important; +} + +a { + margin: 0 !important; + padding: 0 !important; + text-decoration: none !important; +} + +/* Icons */ +i:hover { + transition: all 0.3s ease; +} + +.fa-grip-lines:hover { + cursor: grab; +} + +/* End of Icons */ + +/* Section Tag */ + +/* + Text area +*/ +.textarea-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; +} + +.text-area { + padding: 10px; + resize: none; + width: 100%; + box-shadow: var(--textarea-box); + font-size: 16px; + border: none; + padding: 10px; +} + +.text-area::highlight { + border: red; +} + +#copyTool { + color: var(--keyman-blue); + position: absolute; + right: 10px; + top: 97px; + opacity: 50%; +} + +#copyTool:hover { + cursor: pointer; + opacity: 100%; +} + +/* Divider */ +.divider-container i { + opacity: 50%; +} + +.divider-container i:hover { + color: var(--keyman-blue); + opacity: 100%; +} + +/* Items at the middle of the divider */ +.middle-divider { + grid-area: middle; + justify-self: center; + height: fit-content; + z-index: 1; +} + +.font-size-mobile { + display: none; +} + +/* Keyboard */ +.keyboard-container { + width: 900px; + height: 500px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.keyboard-area { + user-select: none; + flex: 1; + width: 100%; + height: 50vh; + border: 1px solid var(--keyman-blue); +} + +.example-box { + background-color: var(--keyman-blue); + color: white; + width: 100%; + text-align: center; + padding: 5px; + border-bottom: 1px solid rgb(159, 159, 159); +} + +.desktop-keyboard { + width: 100%; +} + +.phone-keyboard { + display: none; +} + +.example-box p { + margin: 10px; +} + +#example { + visibility: visible !important; +} + +#exampleBox { + visibility: visible !important; +} + +/* End of Section Tag */ + +/* ================================ + Computer and Laptop screen sizes +================================ */ +@media screen and (min-width: 940px) { + .item, .section-items { + margin: 5px + } + + /* Divider */ + .divider-container { + user-select: none; + display: grid; + grid-template-columns: repeat(5, 20%); + grid-template-rows: 100%; + align-items: center; + grid-template-areas: ". left middle right ."; + width: 100%; + height: 15px; + } +} + +/* ================================ + Most Tablet to Phone sizes +================================ */ + +@media screen and (max-width: 940px) { + /* Divider */ + .divider-container { + user-select: none; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + grid-template-rows: 100%; + align-items: center; + grid-template-areas: + "left middle right" + ; + width: 100%; + padding: 10px; + border-radius: 5px; + box-shadow: var(--box-shadow); + } + + /* Keyboard */ + .keyboard-container { + width: 100%; + height: 100%; + } + + .desktop-keyboard { + display: none; + } + + .phone-keyboard { + width: 100%; + display: block; + } + + .keyboard-download-box { + display: none; + } + + .spacing-purpose { + display: none; + } +} + +/* ================================ + Smallest Phone sizes +================================ */ +@media screen and (width < 565px) { + .font-size-desktop { + display: none; + } + + .font-size-mobile { + display: flex; + flex-direction: row; + align-items: center; + border-radius: 24px; + opacity: 50%; + } + + .font-size-mobile button { + border: 0; + background-color: #fff; + border-style: none; + } + + .font-size-mobile > *{ + margin: 0 5px; + } +} + +@media screen and (max-width: 400px) { + .example-box p { + font-size: 10px; + } +} + +/* Animation */ + +.textarea-animation { + animation: highlight 3s; +} + +@keyframes highlight { + from {box-shadow:#2EADD3 0px 0px 0px 3px;} + to {box-shadow: var(--textarea-box);} } \ No newline at end of file diff --git a/cdn/dev/css/kmw-desktop.css b/cdn/dev/css/kmw-desktop.css index 09cc8af..518796e 100644 --- a/cdn/dev/css/kmw-desktop.css +++ b/cdn/dev/css/kmw-desktop.css @@ -1,176 +1,217 @@ -/* Desktop browser CSS rules */ - -/* -====================== -==Universal Elements== -====================== -*/ - - #kmw_controls{ - border-top-left-radius: 8px; - border-top-right-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - } - - #kmw_btn_osk{ - border-top-right-radius: 10px; - } - - #kmw_controls_start{ - border-top-left-radius: 10px; - } - -textarea { - height:260px; - width:554px; - float:left; - margin: 0px 10px 10px; - color:black; - font-size:16px; - font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; - } - -form { - padding-right:10px; - float:left; - } -#messageContainer { - float:left; - width:80%; -} - -/* -====================== -==Keyboard Examples== -====================== -*/ - -#example,#help { - margin: 5px 0px; - text-align: center; -} - -#example { - visibility: hidden; - width: 100%; - min-height: 45px; - display: flex; - justify-content: center; - align-items: center; - padding-top: 5px; -} - -#example a { - padding-left: 10px; -} - -.highlightKeys kbd { - border: solid 1px #808080; - border-radius: 4px; - background: #cccccf; - color: black; - font-family: Verdana; - font-weight: normal; - min-width: 16px; - display: inline-block; - box-shadow: 2px 2px 1px rgba(128, 128, 128, 0.3); - margin-right: 4px; -} - -.highlightKeys kbd.space { - min-width: 64px; -} - -/* -====================== -==Keyboard Styling== -====================== -*/ -.desktop, .kmw-osk-frame { - display: block !important; - position: static !important; - width: 100% !important; - height: 264px !important; - max-width: 100% !important; - max-height: 264px !important; - border-radius: 0; -} - -.kmw-key-square { - z-index: 0 !important; -} - -.kmw-spacebar-caption { - color: gray !important; -} - -.desktop .kmw-osk-frame, .desktop .kmw-osk-inner-frame, .desktop .kmw-key-layer-group { - background-color: #95C6D6 !important; -} - -.desktop .kmw-key-default { - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #EEEFF0), color-stop(100%, #D3D3D9)); - background-image: -moz-linear-gradient(#EEEFF0,#D3D3D9); - background-color: #E0E0E4; -} - -.desktop .kmw-key-touched { - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #B5B5B5), color-stop(100%, #93969B)); - background-image: -moz-linear-gradient(#B5B5B5, #93969B) !important; - background-color: #B5B5B5; - } - -.desktop .kmw-key-shift{ - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #DBDBDB), color-stop(100%, #C0C0C4)); - background-image: -moz-linear-gradient(#DBDBDB, #C0C0C4) !important; - background-color: #DBDBDB; -} - - .desktop .kmw-key-shift-on { - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #B5B5B5), color-stop(100%, #93969B)); - background-image: -moz-linear-gradient(#B5B5B5, #93969B) !important; - background-color: #93969B; - } - - .desktop .kmw-key-shift .kmw-key-text, .desktop .kmw-key-shift-on .kmw-key-text { color: gray; font-size: 0.9em !important; text-shadow: 0 1px 1px #fff;} - .desktop .kmw-key-shift .kmw-key-text, .desktop .kmw-key-shift-on .kmw-key-text { top: 10%; } - .desktop .kmw-key-label { top: 5%; } - .desktop .kmw-key-label { left: 10%; } - .desktop .kmw-key-default .kmw-key-text { top: 25%; } - .desktop .kmw-footer, .desktop .kmw-title-bar { background: #2EADD3 !important; display: none;} - .desktop .kmw-title-bar div{min-height: 100%;} - .desktop .kmw-footer-caption a { color: white !important; } - .kmw-osk-frame, .kmw-osk-inner-frame { border-color: #2EADD3 !important; } - .kmw-key-shift, .kmw-key-shift-on { border-width: 2px !important; } - .kmw-key-shift, .kmw-key-shift-on { border-radius: 6px !important; } - .kmw-key-shift, .kmw-key-shift-on { border-color: #95C6D6 !important; } - .kmw-key-default { border-width: 2px !important; } - .kmw-key-default { border-radius: 6px !important; } - .kmw-key-default { border-color: #95C6D6 !important; } - .kmw-key-label { color: #2EADD3 !important; } - .kmw-key-label { top: 10% !important; } - .kmw-key-label { left: 15% !important; } - .kmw-key-default { - color: #313149; - } - -#keymandesktop p { - font-size: 11pt; - font-weight: bold; - text-align: center; -} - -@media all and (min-width: 1320px) { - ins.adsbygoogle { - display: inline-block !important; - height: 600px; - position: absolute; - right: 16px; - top: 120px; - width: 160px; - } -} - -.desktop .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { - top: -33%; -} +/* Desktop browser CSS rules */ + +/* +====================== +==Universal Elements== +====================== +*/ + + #kmw_controls{ + border-top-left-radius: 8px; + border-top-right-radius: 8px; + -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); + } + + #kmw_btn_osk{ + border-top-right-radius: 10px; + } + + #kmw_controls_start{ + border-top-left-radius: 10px; + } + +textarea { + height:260px; + width:554px; + float:left; + margin: 0px 10px 10px; + color:black; + font-size:16px; + font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; + } + +form { + padding-right:10px; + float:left; + } +#messageContainer { + float:left; + width:80%; +} +/* +====================== +==Keyboard Examples== +====================== +*/ + +#example,#help { + margin: 5px 0px; + text-align: center; +} + +#example { + visibility: hidden; + width: 100%; + min-height: 10px; + max-height: 45px; + display: flex; + justify-content: center; + align-items: center; + padding-top: 5px; +} + +#example a { + padding-left: 10px; +} + +.highlightKeys kbd { + border: solid 1px #808080; + border-radius: 4px; + background: #cccccf; + color: black; + font-family: Verdana; + font-weight: normal; + min-width: 16px; + display: inline-block; + box-shadow: 2px 2px 1px rgba(128, 128, 128, 0.3); + margin-right: 4px; +} + +.highlightKeys kbd.space { + min-width: 64px; +} + +/* +====================== +==Keyboard Styling== +====================== +*/ +.desktop, .kmw-osk-frame { + display: block !important; + position: static !important; + width: 100% !important; + height: 100% !important; + max-width: 100% !important; + max-height: 100% !important; + border-radius: 0; +} + +.kmw-help-osk-frame { + height: 100% !important; + scroll-behavior: smooth !important; + scrollbar-width: thin; + overflow-x: hidden !important; + overflow-y: scroll !important; + text-align: center !important; +} + +.kmw-osk-static { + height: fit-content !important; + text-align: center !important; + border: solid 1px var(--keyman-blue) !important; +} + +.kmw-osk-static table { + display: flex !important; + flex-direction: row !important; + align-items: center !important; + justify-content: center !important; + width: 100% !important; +} + +#kmw-osk-help-page > table > tbody > tr > td > .row { + --bs-gutter-x: 0 !important; +} + +.kmw-title-bar { + background-color: #2EADD3 !important; + border-radius: 0 !important; + height: fit-content !important; +} + +#keyboard_europeanlatin_help p, .kmw-osk-static p { + display: flex !important; + justify-content: end !important; + position: relative !important; + right: 0 !important; + top: 0 !important; +} + +.kmw-key-square { + z-index: 0 !important; +} + +.kmw-spacebar-caption { + color: gray !important; +} + +.desktop .kmw-osk-frame, .desktop .kmw-osk-inner-frame, .desktop .kmw-key-layer-group { + background-color: #95C6D6 !important; +} + +.desktop .kmw-key-default { + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #EEEFF0), color-stop(100%, #D3D3D9)); + background-image: -moz-linear-gradient(#EEEFF0,#D3D3D9); + background-color: #E0E0E4; +} + +.desktop .kmw-key-touched { + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #B5B5B5), color-stop(100%, #93969B)); + background-image: -moz-linear-gradient(#B5B5B5, #93969B) !important; + background-color: #B5B5B5; + } + +.desktop .kmw-key-shift{ + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #DBDBDB), color-stop(100%, #C0C0C4)); + background-image: -moz-linear-gradient(#DBDBDB, #C0C0C4) !important; + background-color: #DBDBDB; +} + + .desktop .kmw-key-shift-on { + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #B5B5B5), color-stop(100%, #93969B)); + background-image: -moz-linear-gradient(#B5B5B5, #93969B) !important; + background-color: #93969B; + } + + .desktop .kmw-key-shift .kmw-key-text, .desktop .kmw-key-shift-on .kmw-key-text { color: gray; font-size: 0.9em !important; text-shadow: 0 1px 1px #fff;} + .desktop .kmw-key-shift .kmw-key-text, .desktop .kmw-key-shift-on .kmw-key-text { top: 10%; } + .desktop .kmw-key-label { top: 5%; } + .desktop .kmw-key-label { left: 10%; } + .desktop .kmw-key-default .kmw-key-text { top: 25%; } + .desktop .kmw-footer, .desktop .kmw-title-bar { background-color: #2EADD3 !important; display: none;} + .desktop .kmw-title-bar div{min-height: 100%;} + .desktop .kmw-footer-caption a { color: white !important; } + .kmw-osk-frame, .kmw-osk-inner-frame { border-color: #2EADD3 !important; } + .kmw-key-shift, .kmw-key-shift-on { border-width: 2px !important; } + .kmw-key-shift, .kmw-key-shift-on { border-radius: 6px !important; } + .kmw-key-shift, .kmw-key-shift-on { border-color: #95C6D6 !important; } + .kmw-key-default { border-width: 2px !important; } + .kmw-key-default { border-radius: 6px !important; } + .kmw-key-default { border-color: #95C6D6 !important; } + .kmw-key-label { color: #2EADD3 !important; } + .kmw-key-label { top: 10% !important; } + .kmw-key-label { left: 15% !important; } + .kmw-key-default { + color: #313149; + } + +#keymandesktop p { + font-size: 11pt; + font-weight: bold; + text-align: center; +} + +@media all and (min-width: 1320px) { + ins.adsbygoogle { + display: inline-block !important; + height: 600px; + position: absolute; + right: 16px; + top: 120px; + width: 160px; + } +} + +.desktop .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { + top: -33%; +} diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index a3745a3..09bbb23 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -1,928 +1,867 @@ -:root { - --box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; - --keyman-orange: #FC7200; - --keyman-red: #B92034; - --keyman-blue: #2EADD3; -} - -* { - letter-spacing: .05rem; - font-weight: 400; -} - -hr { - margin: 0; -} - -header > div > img { - width: 100%; - display: block; - height: 5px; -} - -#searchDropdownMenu { - padding: 10px; - margin: 0; -} - -.main-header { - display: grid; - height: 75px; - padding: 0 10px; - box-shadow: var(--box-shadow); -} - -/* Left side of Header: - Search - Keyboard dropdown -*/ - -.left-header { - display: flex; - align-items: center; -} - -.left-header img { - margin-right: 10px; -} - -/* -Language Search box -*/ -#searchBar { - position: relative; - width: 550px; - margin-right: 10px; -} - -#searchIcons { - position: absolute; - right: 5px; - top: 12px; - border-left: 1px solid gray; -} - -#searchIcons > * { - margin-right: 10px; - padding-left: 15px; - opacity: 50%; -} - -#searchIcons > *:hover { - padding-left: 15px; - opacity: 100%; -} - -#magnifyingGlassIcon { - display: inline; -} - -#clearSearchIcon { - display: none; -} - -#searchBar #searchInput { - height: 50px; - width: 100%; - text-indent: 10px; - border-radius: 15px; - text-align: left; - font-family: inherit !important; - box-shadow: none; -} - -#searchInput:hover, #searchInput:focus { - border: 1px solid var(--keyman-orange); -} - -#searchDropdownMenu { - width: 100%; - max-height: 600px; - overflow: auto; - scrollbar-width: thin; -} - -#searchDropdownMenu hr { - margin: 15px 0; -} - -/* Enable keyboard Animation */ -.kb-icon-plus-animate { - animation: plustoTickToMinus 2s forwards; -} - -@keyframes plustoTickToMinus { - 0% { - content: "+"; - transform: scale(1); - } - 30% { - color: lime; - content: "โœ“"; - transform: scale(1.5); - } - 60% { - color: lime; - content: "โœ“"; - transform: scale(1.3); - } - 100% { - content: "-"; - transform: scale(1); - } -} - -/* Instruction on dropdown */ -.instruction-title, .keyboard-title { - width: 100%; -} - -.instruction-title p, .keyboard-title { - font-weight: 500; - font-size: 16px; - text-align: center; -} - -/* Map and Most download */ -.left-header .dropdown-menu .top-row #worldMap { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin: 10px 10px !important; -} - -#worldMap span { - opacity: 50%; -} - -#worldMap span:hover { - opacity: 100%; - cursor: pointer; -} - -#KeymanWebControl #kmw_controls -{ - display: flex !important; - flex-direction: row; - justify-content: space-evenly; - border-radius: 20px; - box-shadow: var(--box-shadow); - height: 35px; - padding: 5px; -} - -#KeymanWebControl .kmw_button, -#keymanWebControl .kmw_button_disabled, -#KeymanWebControl .kmw_button_selected -{ - width: fit-content !important; - background: none !important; - height: 0 !important; -} - -#KeymanWebControl #kmw_controls_start, -#KeymanWebControl #kmw_btn_osk, -.kmw_bar, #kmw_controls_end { - display: none; -} - -#KeymanWebControl .kmw_language { - padding: 3px; -} - -#kmw_control_keyboards { - width: fit-content; -} - -#kmw_selector_regions { - height: 100%; - overflow: hidden; - position: relative; -} - -.kmw_selector_region { - overflow-y: scroll; - overflow-x: hidden; - scrollbar-width: thin; - height: 600px; -} - -/* Search Dropdown cards */ -#languageSearchList > * { - margin-bottom: 5px; -} - -#languageSearchList > div:hover { - border: 1px solid var(--keyman-orange); - margin: 3px; -} - -.card-wrap { - box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;; - padding: 10px; - border-radius: 10px; - letter-spacing: .05rem; - overflow: hidden; - margin-bottom: 5px; -} - -.card-wrap.disabled { - opacity: 0.5; - pointer-events: none; - position: relative; -} - -.card-wrap.disabled .kb-icon-plus { - pointer-events: auto; - opacity: 1; - position: absolute; - right: 15px; - z-index: 1; -} - -.kb-icon-plus { - transition: 0.5s ease; -} - -.kb-icon-plus.animate { - color: green; -} - -.keyboard-id { - font-size: 12px; - margin-bottom: 10px; - color: #006622; -} - -.card-wrap h6 { - opacity: 75%; - font-size: 12px; - margin: 0 0 0.35rem; -} - -.keyboard-description { - color: gray; -} - -.keyboard-specs { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; -} - -.keyboard-specs .platform { - display: flex; - flex-direction: row; -} - -.keyboard-specs .platform span, -.keyboard-content .keyboard-platforms .platform span { - font-size: 0px; - width: 15px; - height: 20px; - margin: 0; -} - -.card-wrap .monthly-download { - opacity: 75%; -} - -.card-header { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin-bottom: 8px; -} - -.card-header h4 { - color: #0000EE; - font-weight: 400; - font-size: large; - margin: 0; -} - -.card-header h4 span { - color: black; -} - -.card-header p { - margin: 0; - position: relative; - float: right; - font-weight: 200; - font-size: medium; - color: var(--keyman-red); -} - -/* Pagination */ -#searchDropdownMenu .bottom-row-search { - background-color: white; - align-items: center; - justify-content: center; - width: fit-content; - border-radius: 10px; - width: 100%; - bottom: 0; - text-align: center; - box-shadow: rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px; -} - -.bottom-row-search > * { - margin: 10px; - cursor: pointer; -} - -/* Selected Keyboard Menu */ -#keyboardSelectionButton { - z-index: 3; -} - -.scroll-wrapper-keyboard-tab { - width: 350px; - height: 35px; - position: relative; -} - -#keyboardSelection { - display: flex; - flex-direction: column; - text-align: center; - width: 0; - height: 100%; - background-color: white; - color: black; - box-shadow: var(--box-shadow); - overflow-y: scroll; - scrollbar-width: none; - transition: all 1s ease-in-out; - margin-left: -10px; - border-radius: 10px; - z-index: 0; - white-space: nowrap; - text-indent: 15px; -} - -#keyboardSelection.open { - position: relative; - width: 400px; - height: fit-content; - padding: 0 0 10px; - z-index: 2; -} - -#keyboardSelection p { - margin: 0; - height: 25px; - width: 100%; -} - -.kb-item-header, .kb-item-footer { - display: flex; - align-items: center; - justify-content: center; - height: 30px; - font-weight: 500; - margin: 5px 0; -} - -.kb-item-header { - border-bottom: 1px solid gray; -} - -.kb-item-footer { - border-top: 1px solid gray; - cursor: pointer; -} - -.kb-item { - width: 100%; - max-height: fit-content; - height: 38px; - display: flex; - flex-direction: row; - justify-content: space-between; - padding: 5px; -} - -.kb-item:hover { - cursor: pointer; - background-color: var(--keyman-orange); - color: white; -} - -.kb-item span { - width: 50%; - text-wrap: wrap; - align-self: center; -} - -.keyboard-configs { - width: 50%; - height: fit-content; - display: grid; - grid-template-columns: repeat(4, 1fr); - list-style-type: none; - padding: 2px 0 0; -} - -::-webkit-scrollbar:horizontal { - height: 5px; -} - -::-webkit-scrollbar-thumb:horizontal { - background: #2c7be5; - border-radius: 6px; -} - -::-webkit-scrollbar-track:horizontal { - background: #f1f1f1; -} - -.btn-keyman-orange { - background-color: var(--keyman-orange) !important; - color: white !important; -} - -.keyboard-details { - position: absolute; - width: 400px; - height: fit-content; - background-color: white; - color: black; - box-shadow: var(--box-shadow); - border-radius: 20px; - padding: 10px; - z-index: 2; -} - -.keyboard-content-wrapper { - margin-top: 10px; -} - -.keyboard-content { - width: max-content; - list-style-type: none; - padding: 0; - text-align: left; - display: flex; - flex-direction: column; -} - -.keyboard-content > * { - margin: 5px 0px; -} - -.keyboard-content .keyboard-platforms .platform { - display: flex; - flex-direction: row; -} - -.keyboard-content li .row .col:nth-child(2), -.keyboard-content li .row .col:nth-child(2) * { - text-align: center; - white-space: normal; - word-break: break-word; - width: 200px; - overflow: hidden; -} - -.keyboard-content li .row .col:nth-child(1) { - width: 200px; -} - -#removeLanguage { - cursor: pointer; -} - -.platform span { - background-repeat: no-repeat; - padding-left: 24px; - background-size: 18px; - display: block; - margin: 4px 0; -} - -.platform span:hover, .keyboard-configs li:hover{ - cursor: help; -} - -.platform .platform-windows { - background-image: url('/cdn/dev/img/platforms/icon-windows.png'); -} - -.platform .platform-macos { - background-image: url('/cdn/dev/img/platforms/icon-macos.png'); -} - -.platform .platform-linux { - background-image: url('/cdn/dev/img/platforms/icon-linux.png'); -} - -.platform .platform-android { - background-image: url('/cdn/dev/img/platforms/icon-android.png'); -} - -.platform .platform-ios { - background-image: url('/cdn/dev/img/platforms/icon-ios.png'); -} - -.platform .platform-desktopweb { - background-image: url('/cdn/dev/img/platforms/icon-desktopWeb.png'); -} - -.platform .platform-mobileweb { - background-image: url('/cdn/dev/img/platforms/icon-mobileWeb.png'); -} - -/* Limits of Keyboard Selection */ -.warning-container { - position: fixed; - height: 100vh; - width: 100%; - z-index: 1000; - top: 0; - left: 0; - display: flex; - justify-content: center; - align-items: center; -} - -.warning-content { - width: 500px; - display: flex; - flex-direction: column; - align-items: center; - background-color: white; - color: black; - text-align: center; - padding: 30px 30px 70px; - border-radius: 20px; - box-shadow: var(--box-shadow); -} - -.warning-cancel-btn { - width: 30px; - font-size: 20px; - opacity: 50%; - align-self: flex-end; - background-color: transparent; - border: none; - margin-bottom: 10px; -} - -.warning-keyman-image { - width: 82px; - margin-bottom: 15px; -} - -.warning-text { - margin-bottom: 40px; - font-size: 18px; -} - -.warning-accept-btn { - background-color: var(--keyman-orange); - border: none; - border-radius: 5px; - width: 200px; - padding: 14px; - color: white; - box-shadow: var(--box-shadow); -} - -/* Middle of the header */ -.middle-header { - display: flex; - justify-content: center; - align-items: center; -} - -.middle-header i, .right-header i { - font-size: 24px; - opacity: 50%; -} - -.middle-header i:hover { - opacity: 100%; - cursor: pointer; - color: var(--keyman-red); -} - -/* Right side of the header: - Tools - Hamburger menu -*/ - -.right-header { - display: grid; - grid-template-columns: 80% 20%; - width: 100%; - justify-items: right; - align-items: center; - margin-right: 0; -} - -.right-header i:hover { - opacity: 100%; - cursor: pointer; - color: var(--keyman-blue); -} - -/* Font size slider + Hide/show keyboard */ -.tool-container { - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; -} - -.tool-container > * { - margin: 10px; -} - -.font-size-container { - display: flex; - flex-direction: row; - align-items: center; -} - -.font-size-slider { - display: flex; - flex-direction: column; - justify-content: end; - align-items: center; - height: 60px; -} - -#fontSizeRange[type=range] { - -webkit-appearance: none; - margin: 10px 0; - width: 100%; -} - - -.font-large { - font-size: 20px; -} - -input[type="range"] { - width: 100px; - background-color: transparent; -} - -input[type="range"]::-webkit-slider-runnable-track { - height: 3px; - background: rgb(107, 107, 107); - border-radius: 10px; -} - -input[type="range"]::-webkit-slider-thumb { - border-radius: 50%; - height: 20px; - width: 20px; - position: relative; - bottom: 6px; - background-size: 50%; - box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.4); - cursor: grab; -} - -#fontSizeRange[type=range]::-webkit-slider-runnable-track { - width: 100%; - cursor: pointer; - transform: 0.2s; - box-shadow: var(--box-shadow); - background: gray; - border-radius: 25px; -} - -#fontSizeRange[type=range]::-webkit-slider-thumb { - height: 10px; - width: 20px; - border-radius: 7px; - background: var(--keyman-blue); - cursor: pointer; - -webkit-appearance: none; - box-shadow: 0px 0px 5px rgb(143, 143, 143); - margin-top: 3px; -} - -#burgerMenu ul { - box-shadow: var(--box-shadow); -} - -#burgerMenu ul:hover { - cursor: pointer; -} - -.dropdown-grid-container { - display: grid; - grid-template-columns: 1fr 1fr; - grid-template-rows: 1fr; -} - -.dropdown-item:active { - background-color: transparent !important; -} - -#burgerMenu ul li { - align-items: center; - width: 300px; - border-bottom: 1px solid rgb(196, 196, 196); - margin-top: 10px; -} - -#burgerMenu ul li::after { - background-color: orange; -} - -#burgerMenu ul li p:hover { - opacity: 100%; -} - -#burgerMenu ul li p { - width: 90%; - white-space: normal; - position: relative; - left: 40px; - font-size: 14px; - opacity: 50%; - margin-top: 10px; -} - -#burgerMenu ul li a { - text-decoration: none; - color: black; - font-style: bold; - font-size: 16px; -} - -#burgerMenu ul li i, #burgerMenu ul li img { - margin: 0 10px; - font-size: 16px; - width: 18px; - opacity: 100%; - color: var(--keyman-orange) -} - -#burgerMenu button i:hover { - cursor: pointer; -} - -.kmw-socials, .kmw-version, .sil-logo { - font-size: 14px; -} - -.kmw-socials { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: 10px; -} - -.kmw-socials-icons { - display: grid; - grid-template-columns: 1fr 1fr 1fr; - justify-content: center; - align-items: center; - gap: 10px; -} - -.kmw-socials-icons > a { - text-decoration: none; - color: black; - opacity: 50%; - position: relative; -} - -.kmw-socials-icons > a:hover { - opacity: 100%; -} - -@font-face { - font-family: "social-logos"; - src: url("../../fonts/social-logos.ttf"), - url("social-logos.woff2") format("woff2"), - url("social-logos.woff") format("woff"); - font-weight: normal; - font-style: normal; -} - -[data-icon]:before { - font-family: "social-logos" !important; - content: attr(data-icon); - padding-right: 4px; - font-size: 16px; -} - -.kmw-version { - display: flex; - flex-direction: row; - justify-content: center; -} - -.sil-logo { - display: flex; - flex-direction: column; - align-items: center; -} - -/* ================================ - Computer, Laptop, some Tablet screen sizes -================================ */ -@media screen and (min-width: 1045px) { - .main-header { - grid-template-columns: 3fr 1fr; - } -} - -/* Expanding the search box */ -@media screen and (940px <= width <= 1045px) { - .main-header { - grid-template-columns: 4fr 1fr; - } -} - -/* ================================ - Most Tablet to Phone sizes -================================ */ - -@media screen and (max-width: 940px) { - .main-header { - grid-template-columns: 4fr 1fr; - } - - .left-header { - align-items: center; - justify-content: left; - align-items: center; - } - - .left-header img { - display: none; - } - - /* - Language Search box - */ - - #searchBar { - width: 50%; - } -} - -@media screen and (max-width: 565px) { - #searchDropdownMenu { - width: 300px !important; - } - - #keyboardSelection { - max-width: 300px !important; - } - - #keyboardTab { - display: grid; - grid-template-columns: repeat(3, 1fr); - } - - #keyboardTab > * { - margin-bottom: 10px; - } -} - -/* Animation */ - -.keyboardTab-animation { - animation: keyboardTab 1s; -} -.keyboardSelection-animation { - animation: keyboardSelection 1s ease-in; -} - -@keyframes keyboardSelection { - 0% { - transform: translateY(-5px); - } - 50% { - transform: translateY(-3px); - } - 75% { - transform: translateY(-1px); - } - 100% { - transform: translateY(0); - } -} - -@keyframes keyboardTab { - from { - opacity: 50%; - } - to { - opacity: 100%; - } +:root { + --box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + --keyman-orange: #FC7200; + --keyman-red: #B92034; + --keyman-blue: #2EADD3; +} + +* { + letter-spacing: .05rem; + font-weight: 400; +} + +hr { + margin: 0; +} + +header > div > img { + width: 100%; + display: block; + height: 5px; +} + +#searchDropdownMenu { + padding: 10px; + margin: 0; +} + +.main-header { + display: grid; + grid-template-columns: 1fr 1fr; + height: 75px; + padding: 0 10px; + box-shadow: var(--box-shadow); +} + +/* Left side of Header: + Search + Keyboard dropdown +*/ + +.left-header { + display: flex; + align-items: center; +} + +.left-header img { + margin-right: 10px; +} + +/* +Language Search box +*/ +#searchBar { + position: relative; + width: 550px; + margin-right: 10px; +} + +#searchIcons { + position: absolute; + right: 5px; + top: 12px; + border-left: 1px solid gray; + background-color: white; +} + +#searchIcons > * { + margin-right: 10px; + padding-left: 15px; + opacity: 50%; +} + +#searchIcons > *:hover { + padding-left: 15px; + opacity: 100%; +} + +#magnifyingGlassIcon { + display: inline; +} + +#clearSearchIcon { + display: none; +} + +#searchBar #searchInput { + height: 50px; + width: 100%; + text-indent: 10px; + border-radius: 15px; + text-align: left; + font-family: inherit !important; + box-shadow: none; +} + +#searchInput:hover, #searchInput:focus { + border: 1px solid var(--keyman-orange); +} + +#searchDropdownMenu { + width: 100%; + max-height: 600px; + overflow: auto; + scrollbar-width: thin; +} + +#searchDropdownMenu hr { + margin: 15px 0; +} + +/* Enable keyboard Animation */ +.kb-icon-plus-animate { + animation: plustoTickToMinus 2s forwards; +} + +@keyframes plustoTickToMinus { + 0% { + content: "+"; + transform: scale(1); + } + 30% { + color: lime; + content: "โœ“"; + transform: scale(1.5); + } + 60% { + color: lime; + content: "โœ“"; + transform: scale(1.3); + } + 100% { + content: "-"; + transform: scale(1); + } +} + +/* Instruction on dropdown */ +.instruction-title, .keyboard-title { + width: 100%; +} + +.instruction-title p, .keyboard-title { + font-weight: 500; + font-size: 16px; + text-align: center; +} + +/* Map and Most download */ +.left-header .dropdown-menu .top-row #worldMap { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 10px 10px !important; +} + +#worldMap span { + opacity: 50%; +} + +#worldMap span:hover { + opacity: 100%; + cursor: pointer; +} + +#KeymanWebControl #kmw_controls +{ + display: flex !important; + flex-direction: row; + justify-content: space-evenly; + border-radius: 20px; + box-shadow: var(--box-shadow); + height: 35px; + padding: 5px; +} + +#KeymanWebControl .kmw_button, +#keymanWebControl .kmw_button_disabled, +#KeymanWebControl .kmw_button_selected +{ + width: fit-content !important; + background: none !important; + height: 0 !important; +} + +#KeymanWebControl #kmw_controls_start, +#KeymanWebControl #kmw_btn_osk, +.kmw_bar, #kmw_controls_end { + display: none; +} + +#KeymanWebControl .kmw_language { + padding: 3px; +} + +#kmw_control_keyboards { + width: fit-content; +} + +#kmw_selector_regions { + height: 100%; + overflow: hidden; + position: relative; +} + +.kmw_selector_region { + overflow-y: scroll; + overflow-x: hidden; + scrollbar-width: thin; + height: 600px; +} + +/* Search Dropdown cards */ +#languageSearchList > * { + margin-bottom: 5px; +} + +#languageSearchList > div:hover { + border: 1px solid var(--keyman-orange); + margin: 3px; +} + +.card-wrap { + box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;; + padding: 10px; + border-radius: 10px; + letter-spacing: .05rem; + overflow: hidden; + margin-bottom: 5px; +} + +.card-wrap.disabled { + opacity: 0.5; + pointer-events: none; + position: relative; +} + +.card-wrap.disabled .kb-icon-plus { + pointer-events: auto; + opacity: 1; + position: absolute; + right: 15px; + z-index: 1; +} + +.kb-icon-plus { + transition: 0.5s ease; +} + +.kb-icon-plus.animate { + color: green; +} + +.keyboard-id { + font-size: 12px; + margin-bottom: 10px; + color: #006622; +} + +.card-wrap h6 { + opacity: 75%; + font-size: 12px; + margin: 0 0 0.35rem; +} + +.keyboard-description { + color: gray; +} + +.keyboard-specs { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.keyboard-specs .platform { + display: flex; + flex-direction: row; +} + +.keyboard-specs .platform span, +.keyboard-content .keyboard-platforms .platform span { + font-size: 0px; + width: 15px; + height: 20px; + margin: 0; +} + +.card-wrap .monthly-download { + opacity: 75%; +} + +.card-header { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; +} + +.card-header h4 { + color: #0000EE; + font-weight: 400; + font-size: large; + margin: 0; +} + +.card-header h4 span { + color: black; +} + +.card-header p { + margin: 0; + position: relative; + float: right; + font-weight: 200; + font-size: medium; + color: var(--keyman-red); +} + +/* Pagination */ +#searchDropdownMenu .bottom-row-search { + background-color: white; + align-items: center; + justify-content: center; + width: fit-content; + border-radius: 10px; + width: 100%; + bottom: 0; + text-align: center; + box-shadow: rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px; +} + +.bottom-row-search > * { + margin: 10px; + cursor: pointer; +} + +/* Selected Keyboard Menu */ +#keyboardSelectionButton { + z-index: 3; +} + +.scroll-wrapper-keyboard-tab { + width: 350px; + height: 35px; + position: relative; +} + +#keyboardSelection { + display: flex; + flex-direction: column; + text-align: center; + width: 0; + height: 100%; + background-color: white; + color: black; + box-shadow: var(--box-shadow); + overflow-y: scroll; + scrollbar-width: none; + transition: all 1s ease-in-out; + margin-left: -10px; + border-radius: 10px; + z-index: 0; + white-space: nowrap; + text-indent: 15px; +} + +#keyboardSelection.open { + position: relative; + width: 400px; + height: fit-content; + padding: 0 0 10px; + z-index: 2; +} + +#keyboardSelection p { + margin: 0; + height: 25px; + width: 100%; +} + +.kb-item-header, .kb-item-footer { + display: flex; + align-items: center; + justify-content: center; + height: 30px; + font-weight: 500; + margin: 5px 0; +} + +.kb-item-header { + border-bottom: 1px solid gray; +} + +.kb-item-footer { + border-top: 1px solid gray; + cursor: pointer; +} + +.kb-item { + width: 100%; + max-height: fit-content; + height: 38px; + display: flex; + flex-direction: row; + justify-content: space-between; + padding: 5px; +} + +.kb-item:hover { + cursor: pointer; + background-color: var(--keyman-orange); + color: white; +} + +.kb-item span { + width: 50%; + text-wrap: wrap; + align-self: center; +} + +.keyboard-configs { + width: 50%; + height: fit-content; + display: grid; + grid-template-columns: repeat(4, 1fr); + list-style-type: none; + padding: 2px 0 0; +} + +::-webkit-scrollbar:horizontal { + height: 5px; +} + +::-webkit-scrollbar-thumb:horizontal { + background: #2c7be5; + border-radius: 6px; +} + +::-webkit-scrollbar-track:horizontal { + background: #f1f1f1; +} + +.btn-keyman-orange { + background-color: var(--keyman-orange) !important; + color: white !important; +} + +.keyboard-details { + position: absolute; + width: 400px; + height: fit-content; + background-color: white; + color: black; + box-shadow: var(--box-shadow); + border-radius: 20px; + padding: 10px; + z-index: 2; +} + +.keyboard-content-wrapper { + margin-top: 10px; +} + +.keyboard-content { + width: max-content; + list-style-type: none; + padding: 0; + text-align: left; + display: flex; + flex-direction: column; +} + +.keyboard-content > * { + margin: 5px 0px; +} + +.keyboard-content .keyboard-platforms .platform { + display: flex; + flex-direction: row; +} + +.keyboard-content li .row .col:nth-child(2), +.keyboard-content li .row .col:nth-child(2) * { + text-align: center; + white-space: normal; + word-break: break-word; + width: 200px; + overflow: hidden; +} + +.keyboard-content li .row .col:nth-child(1) { + width: 200px; +} + +#removeLanguage { + cursor: pointer; +} + +.platform span { + background-repeat: no-repeat; + padding-left: 24px; + background-size: 18px; + display: block; + margin: 4px 0; +} + +.platform span:hover, .keyboard-configs li:hover{ + cursor: help; +} + +.platform .platform-windows { + background-image: url('/cdn/dev/img/platforms/icon-windows.png'); +} + +.platform .platform-macos { + background-image: url('/cdn/dev/img/platforms/icon-macos.png'); +} + +.platform .platform-linux { + background-image: url('/cdn/dev/img/platforms/icon-linux.png'); +} + +.platform .platform-android { + background-image: url('/cdn/dev/img/platforms/icon-android.png'); +} + +.platform .platform-ios { + background-image: url('/cdn/dev/img/platforms/icon-ios.png'); +} + +.platform .platform-desktopweb { + background-image: url('/cdn/dev/img/platforms/icon-desktopWeb.png'); +} + +.platform .platform-mobileweb { + background-image: url('/cdn/dev/img/platforms/icon-mobileWeb.png'); +} + +/* Limits of Keyboard Selection */ +.warning-container { + position: fixed; + height: 100vh; + width: 100%; + z-index: 1000; + top: 0; + left: 0; + display: flex; + justify-content: center; + align-items: center; +} + +.warning-content { + width: 500px; + display: flex; + flex-direction: column; + align-items: center; + background-color: white; + color: black; + text-align: center; + padding: 30px 30px 70px; + border-radius: 20px; + box-shadow: var(--box-shadow); +} + +.warning-cancel-btn { + width: 30px; + font-size: 20px; + opacity: 50%; + align-self: flex-end; + background-color: transparent; + border: none; + margin-bottom: 10px; +} + +.warning-keyman-image { + width: 82px; + margin-bottom: 15px; +} + +.warning-text { + margin-bottom: 40px; + font-size: 18px; +} + +.warning-accept-btn { + background-color: var(--keyman-orange); + border: none; + border-radius: 5px; + width: 200px; + padding: 14px; + color: white; + box-shadow: var(--box-shadow); +} + +/* Middle of the header */ +.middle-header { + display: flex; + justify-content: center; + align-items: center; +} + +.middle-header i, .right-header i { + font-size: 24px; + opacity: 50%; +} + +.middle-header i:hover { + opacity: 100%; + cursor: pointer; + color: var(--keyman-red); +} + +/* Right side of the header: + Tools + Hamburger menu +*/ + +.right-header { + display: grid; + grid-template-columns: 80% 20%; + width: 100%; + justify-items: right; + align-items: center; + margin-right: 0; +} + +.right-header i:hover { + opacity: 100%; + cursor: pointer; + color: var(--keyman-blue); +} + +/* Font size slider + Hide/show keyboard */ +.tool-container { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.tool-container > * { + margin: 10px; +} + +.font-size-container { + display: flex; + flex-direction: row; + align-items: center; +} + +.font-size-slider { + display: flex; + flex-direction: column; + justify-content: end; + align-items: center; + height: 60px; +} + +#fontSizeRange[type=range] { + -webkit-appearance: none; + margin: 10px 0; + width: 100%; +} + + +.font-large { + font-size: 20px; +} + +input[type="range"] { + width: 100px; + background-color: transparent; +} + +input[type="range"]::-webkit-slider-runnable-track { + height: 3px; + background: rgb(107, 107, 107); + border-radius: 10px; +} + +input[type="range"]::-webkit-slider-thumb { + border-radius: 50%; + height: 20px; + width: 20px; + position: relative; + bottom: 6px; + background-size: 50%; + box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.4); + cursor: grab; +} + +#fontSizeRange[type=range]::-webkit-slider-runnable-track { + width: 100%; + cursor: pointer; + transform: 0.2s; + box-shadow: var(--box-shadow); + background: gray; + border-radius: 25px; +} + +#fontSizeRange[type=range]::-webkit-slider-thumb { + height: 10px; + width: 20px; + border-radius: 7px; + background: var(--keyman-blue); + cursor: pointer; + -webkit-appearance: none; + box-shadow: 0px 0px 5px rgb(143, 143, 143); + margin-top: 3px; +} + +#burgerMenu ul { + box-shadow: var(--box-shadow); +} + +#burgerMenu ul:hover { + cursor: pointer; +} + +.dropdown-grid-container { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; +} + +.dropdown-item:active { + background-color: transparent !important; +} + +#burgerMenu ul li { + align-items: center; + width: 300px; + border-bottom: 1px solid rgb(196, 196, 196); + margin-top: 10px; +} + +#burgerMenu ul li::after { + background-color: orange; +} + +#burgerMenu ul li p:hover { + opacity: 100%; +} + +#burgerMenu ul li p { + width: 90%; + white-space: normal; + position: relative; + left: 40px; + font-size: 14px; + opacity: 50%; + margin-top: 10px; +} + +#burgerMenu ul li a { + text-decoration: none; + color: black; + font-style: bold; + font-size: 16px; +} + +#burgerMenu ul li i, #burgerMenu ul li img { + margin: 0 10px; + font-size: 16px; + width: 18px; + opacity: 100%; + color: var(--keyman-orange) +} + +#burgerMenu button i:hover { + cursor: pointer; +} + +.kmw-socials, .kmw-version, .sil-logo { + font-size: 14px; +} + +.kmw-socials { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 10px; +} + +.kmw-socials-icons { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + justify-content: center; + align-items: center; + gap: 10px; +} + +.kmw-socials-icons > a { + text-decoration: none; + color: black; + opacity: 50%; + position: relative; +} + +.kmw-socials-icons > a:hover { + opacity: 100%; +} + +@font-face { + font-family: "social-logos"; + src: url("../../fonts/social-logos.ttf"), + url("social-logos.woff2") format("woff2"), + url("social-logos.woff") format("woff"); + font-weight: normal; + font-style: normal; +} + +[data-icon]:before { + font-family: "social-logos" !important; + content: attr(data-icon); + padding-right: 4px; + font-size: 16px; +} + +.kmw-version { + display: flex; + flex-direction: row; + justify-content: center; +} + +.sil-logo { + display: flex; + flex-direction: column; + align-items: center; +} + +/* Animation */ + +.keyboardTab-animation { + animation: keyboardTab 1s; +} +.keyboardSelection-animation { + animation: keyboardSelection 1s ease-in; +} + +@keyframes keyboardSelection { + 0% { + transform: translateY(-5px); + } + 50% { + transform: translateY(-3px); + } + 75% { + transform: translateY(-1px); + } + 100% { + transform: translateY(0); + } +} + +@keyframes keyboardTab { + from { + opacity: 50%; + } + to { + opacity: 100%; + } } \ No newline at end of file diff --git a/cdn/dev/css/kmw-mobile.css b/cdn/dev/css/kmw-mobile.css index 95ce082..6c72d31 100644 --- a/cdn/dev/css/kmw-mobile.css +++ b/cdn/dev/css/kmw-mobile.css @@ -1,420 +1,166 @@ -/* KMW LIVE CSS for iPhone and other mobiles */ - -/* -====================== -==Universal Elements== -====================== -*/ - -html { - overflow-y: scroll; - overflow-x: hidden; -} - -body { - width:100%;height:100%; - font-family: Verdana, Arial, Helvetica, sans-serif; - color:#2D2C2C; - background-color: #eeeeee; - margin:0px; - } - -a { - text-decoration:none; - color: #AD4A28; - } - -a:hover { - text-decoration:underline; - } - -h3 { - font-size:18px; - } - -p { - font-size:13px; - line-height:1.5em; - } -/* -header, #content, footer { - margin:0px auto; - clear: both; - } -*/ - -hr { - display: none; - } - -/* -.box { - -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - } -*/ -/* -=================== -==Header Elements== -=================== -*/ -header img, #headerLeft { - display: none; -} -header { - position: absolute; - top: 190px; - background: #776666; - font-size: 9pt; - padding: 6px 0; - color: white; - width: 100%; - text-align: center; -} -header a { - color: #c0c0ff; - text-decoration: underline; -} - -/* -==================== -==Content Elements== -==================== -*/ -#content { - width: 100%; /* specific for mobile and tablet */ - margin: 0px auto; - background-color: #eeeeee; - /* min-height:375px; */ - } - - -/* KMW Main App */ -#app { - width:100%; - margin: 0px; - } -#KeymanWebControl { - display: none; - } - -#exampleBox,#example { - display:none; - } - -#messageContainer { - width: 80%; - float:left; - height: 50%; - } - -#message { - height:144px; - width: 100%;/*554px;*/ - float:left; - margin: 4px; - color:black; - font-size:17px; - font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; - } - - #font-size{ - display: none; - } - -/* KMW App Buttons */ - -#buttons { - float: right; - width: 40px; - margin: 8px 15px 8px 0px; - border: none; -} - -#buttons div { - /*width:50px;*/ - -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - background: #eeeeee; - border: none; - margin: 0px 0px 4px 10px; - height:40px; - width: 41px; - padding: 0px; - padding-top: 2px; - background-repeat: no-repeat; - background-position: center center; - background-size: 34px 34px; - } - -#font{ - text-align: center; -} - -#font p{ - display: none; -} - -#buttons div:disabled { - cursor: default !important; - color: gray !important; - /*border-color: gray !important; */ - } - -#search,#search.links{ - background-image:url('../img/btn_google.png'); - -} - -#search.linksOff{ - background-image:url('../img/btn_google_white.png'); -} - -#copy,#copy.links{ - background-image:url('../img/btn_copy.png'); - -} - -#copy.linksOff{ - background-image:url('../img/btn_copy_white.png'); -} - -#buttons div * { - display:inline; - } - -#buttons p { /* buttons have no text label on mobiles */ - display:none; - } - -div.links { - cursor:pointer; - } - -div.linksOff { - cursor:default !important; - border:none; - /*border: 1px solid #cccccc !important; */ - } - -div.linksOff * { - color: gray; - -webkit-user-select:none; - } - -#mobile-font{ - display: none; - width: 40px; - border-radius: 4px; - position: absolute; - left: 100%; - top: 60px; - margin-left: -45px; - text-align: center; - font-size: 24pt; - background: #fff; -} - -#mobile-increase{ - height: 40px; - line-height: 40px; - border-bottom: solid 1px #000; -} - -#mobile-decrease{ - height: 40px; - line-height: 40px; -} - -/* Aside Elements */ -aside, aside div { - display:none; - } - -/* -=================== -==Footer Elements== -=================== -*/ -.footer,footer { - display:none; - } - -#mobile-footer { - position: fixed; - bottom: 0; - width: 100%; -} - -#mobile-footer #mobile-version { - font-size: 7pt; - text-align: center; - width: 100%; -} - -.messageBox { - box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - margin-left: 10%; - margin-top: 10%; - width: 80%; - height: 150px; - position: fixed; -} - -.messageBox div { - width: 85%; - height: 84px; - left: 5%; - top: 10px; - padding: 8px; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; - background: white; -} - -.messageBox button { - width:83px; - position: absolute; - right: 10px; - bottom: 4px; - background: #414141; - border-top: 1px solid #383838; - border-right: 1px solid #1F1F1F; - border-bottom: 1px solid #151515; - border-left: 1px solid #1F1F1F; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - color: white; - font: bold 12px Helvetica, Verdana, Arial, sans-serif; - text-shadow: 0px -1px 1px #1E2D4D; - text-align:center; - margin: 0 auto 6px; - padding: 3px; - } - -.messageBox button:disabled { - cursor: default !important; - color: gray !important; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; -} - -.messageBox button:hover { - -webkit-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - cursor: pointer; -} - -.messageBox button:active { - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; -} - -.progressBox { - box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - top: 10%; - margin-left: 10%; - width: 80%; - height: 70px; - position: fixed; -} - -.progressBox div { - width: 85%; - height: 34px; - left: 5%; - top: 10px; - padding: 8px; - background: url('/img/wait.gif') no-repeat 354px 8px white; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; -} - - /* Additional rules for portrait orientation */ -@media only screen and (orientation: portrait) { - - #message { - height: 170px; - } - - #messageContainer { - float: left; - width: 80%; - height: 40%; - } -} - - - /* Additional rules for landscape orientation */ -@media only screen and (orientation: landscape) { - - #messageContainer { - float: left; - width: 85%; - height: 50%; - } - #message { - height: 50%; - } - #buttons { - margin: 4px 15px 4px 0; - } - - #font{ - display: none; - } -} - -/* -====================== -==Keyboard Styling== -====================== -*/ - -#kmw-language-menu p { - color: #000 !important; -} - -#kmw-language-menu .selected { - background-color: gray !important; -} - - -.phone .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { - top: -33%; - font-size: 0.8em !important; -} +/* KMW LIVE CSS for iPhone and other mobiles */ + +/* +====================== +==Universal Elements== +====================== +*/ + +:root { + --mobile-font-size: 12px; + --mobile-search-max-width: 250px; + --mobile-search-min-width: 50px; +} + +html { + overflow-y: scroll; + overflow-x: hidden; +} + +body { + width:100%;height:100%; + font-family: Verdana, Arial, Helvetica, sans-serif; + color:#2D2C2C; + background-color: #eeeeee; + margin:0px; + } + +a { + text-decoration:none; + color: #AD4A28; + } + +a:hover { + text-decoration:underline; + } + +h3 { + font-size:18px; + } + +p { + font-size:13px; + line-height:1.5em; + } + +/* +==================== +==Content Elements== +==================== +*/ + +/* KMW Main App */ +#app { + width: 100%; + margin: 0px; +} + +#KeymanWebControl { + display: none; +} + +#exampleBox, #example { + display: none; +} + +.main-header { + width: 100%; + grid-template-columns: 2fr 1fr; +} + +.left-header { + width: 70vw; +} + +.left-header img { + display: none; +} + +.right-header { + grid-template-columns: 50% 50%; +} + +.right-header { + width: 30vw; +} + +/* +Language Search box +*/ + +#searchBar { + width: 50%; +} + +#searchInput:focus, #searchDropdownMenu, #keyboardSelection:active { + width: var(--mobile-search-max-width) !important; +} + +#textArea { + height: 45vh !important; +} + +.mobile-font-size-container { + display: flex; + flex-direction: row; + position: absolute; + right: 50px; + top: 80px; + width: 150px; + background: white; + border: 1px solid black; + padding: 10px; + border-radius: 10px; +} + +/* Additional rules for portrait orientation */ +@media only screen and (orientation: portrait) { + + #message { + height: 170px; + } + + #messageContainer { + float: left; + width: 80%; + height: 40%; + } +} + +/* Additional rules for landscape orientation */ +@media only screen and (orientation: landscape) { + + #messageContainer { + float: left; + width: 85%; + height: 50%; + } + #message { + height: 50%; + } + #buttons { + margin: 4px 15px 4px 0; + } + #font { + display: none; + } +} + +/* +====================== +==Keyboard Styling== +====================== +*/ + +#kmw-language-menu p { + color: #000 !important; +} + +#kmw-language-menu .selected { + background-color: gray !important; +} + +.phone .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { + top: -33%; + font-size: 0.8em !important; +} diff --git a/cdn/dev/css/kmw-tablet.css b/cdn/dev/css/kmw-tablet.css index d48202d..4b1c4da 100644 --- a/cdn/dev/css/kmw-tablet.css +++ b/cdn/dev/css/kmw-tablet.css @@ -1,526 +1,550 @@ -/* KMW LIVE CSS for iPad and other tablet devices */ - -/* -====================== -==Universal Elements== -====================== -*/ - -html { - overflow-y: scroll; - overflow-x: hidden; -} - -body { - width:100%; - font-family: Verdana, Arial, Helvetica, sans-serif; - color:#2D2C2C; - background-color: #eeeeee; - margin:0px; - } - -a { - text-decoration:none; - color: #AD4A28; - } - -a:hover { - text-decoration:underline; - } - -h3 { - font-size:18px; - } - -p { - font-size:13px; - line-height:1.5em; - } - -header, footer { - width:100%; - margin:0px auto; - /*clear: both;*/ - } - -hr { - display: none; - } - -.box { - -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - } - -/* -=================== -==Header Elements== -=================== -*/ -header { - margin-top:0px; - } - -#headerLeft img { - display: block; /* default (inline) display inserts an unwanted bottom border */ - margin-top:0px; - height:60px; - /*-webkit-border-radius: 0px 0px 8px 8px; -moz-border-radius: 0px 0px 8px 8px; border-radius: 0px 0px 8px 8px;*/ - } - -header > div > img { - display: block; - width: 100%; - height: 8px; -} - -/* -==================== -==Content Elements== -==================== -*/ -#content { - width: 100%; /* specific for tablet and mobile */ - margin: 0px auto; - background-color: #eeeeee; - /*min-height:375px;*/ - } - - -/* KMW Main App */ -#app { - /*float:left;*/ - /*height:330px;*/ - width:100%; /*710px; */ - margin: 0px;/*30px 15px 15px;*/ - } - -#KeymanWebControl { - display: none; - } - -#exampleBox, #example { - display: none; - } - -#messageContainer { - width: 80%; - float:left; - } - -#message { - height:195px; - width: 100%;/*554px;*/ - float:left; - margin: 10px; - color:black; - font-size:17px; - font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; - } - -/* KMW App Buttons */ - -#buttons { - float: right; - width:15%; - margin: 0px 20px; - margin-top: -6px; - } - -#buttons div { - width:140px; - -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - background: #fff; - border: 1px solid #888888; - margin: 0px 10px; - padding: 3px; - padding-top: 9px; - height: 41px; - line-height: 36px; - background-repeat: no-repeat; - background-position: center left; - } - -#buttons div:disabled { - cursor: default !important; - color: gray !important; - border-color: gray !important; - } - -#buttons p{ - margin-left: 41px; -} - -#search.links, #search{ - background-image:url('../img/btn_google_small.png'); - -} - -#search.linksOff{ - background-image:url('../img/btn_google_small_white.png'); -} - -#copy.links, #copy{ - background-image:url('../img/btn_copy_small.png'); - -} - -#copy.linksOff{ - background-image:url('../img/btn_copy_small_white.png'); -} - -#buttons div * { - display:inline; - } - -div.links { - cursor:pointer; - } - -div.linksOff { - cursor:default !important; - border: 1px solid #cccccc !important; - } - -div.linksOff * { - color: gray; - -webkit-user-select:none; - } - -/* Aside Elements */ - -aside { - display:none; - } - -#font-size{ - display: none; -} - -/* - -#font, -=================== -==Footer Elements== -=================== -*/ -.footer, footer { - display: none; - background-color: #6A2915; - height:50px; - left:0px; - bottom:0px; - position: fixed; - /* -webkit-border-radius: 8px 8px 0px 0px; -moz-border-radius: 8px 8px 0px 0px; border-radius: 8px 8px 0px 0px; */ - } - -nav ul { - list-style: none outside none; - width:90%; - margin:0px auto; - padding:15px 0px; - } - -nav li { - display:inline; - padding:20px 39px; - } - -nav a { - color:#eee; - font-family:Tahoma; - font-weight:bold; - font-size:10.7px; - } - -.messageBox { - box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - position: fixed; - left: 50%; - top: 20%; - z-index: 999 !important; - margin-left: -250px; - margin-top: -100px; - width: 500px; - height: 200px; -} - -.messageBox div { - width: 464px; - height: 134px; - left: 10px; - top: 10px; - padding: 8px; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; - background: white; -} - -.messageBox button { - width:83px; - position: absolute; - right: 10px; - bottom: 4px; - background: #414141; - border-top: 1px solid #383838; - border-right: 1px solid #1F1F1F; - border-bottom: 1px solid #151515; - border-left: 1px solid #1F1F1F; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - color: white; - font: bold 12px Helvetica, Verdana, Arial, sans-serif; - text-shadow: 0px -1px 1px #1E2D4D; - text-align:center; - margin: 0 auto 6px; - padding: 3px; - } - -.messageBox button:disabled { - cursor: default !important; - color: gray !important; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; -} - -.messageBox button:hover { - -webkit-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - cursor: pointer; -} - -.messageBox button:active { - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; -} - -.progressBox { - box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - position: fixed; - left: 50%; - top: 20%; - z-index: 999; - margin-left: -200px; - margin-top: -54px; - width: 400px; - height: 54px; -} - -.progressBox div { - width: 364px; - height: 18px; - left: 10px; - top: 10px; - padding: 8px; - background: url('../img/wait.gif') no-repeat 354px 8px white; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; -} - -/* Elements modified for tablet */ -#headerBackground { - width: 100%; - background-color:white; -} - -#headerLeft { - float: left; - margin-left: 28px; -} - -#headerRight { - text-align: right; - height: 40px; - float: right; - padding-bottom: 33px; - padding-right: 10px; -} - -#headerRight-beta { - display: block; - font-weight: bold; - color: red; - font-size: 16pt; - padding: 16px 12px 0; -} - -#headerRight-link { - padding: 0 12px 0; -} - - -#instructions { - margin:10px; - font:12pt Helvetica,Verdana,Arial,sans-serif; - color: white; -} - -/* Additional rules for portrait orientation */ -@media only screen and (orientation: landscape) { - #buttons{ - padding-top: 11px; - } - #buttons div { - margin: 4px 20px 10px 0px; - padding: 0px; - } - #font span:first-child{ - margin-left: 3px; - } - #font p{ - margin-left: 8px; - position: relative; - top: -5px; - } - #mobile-font{ - display: none; - width: 136px; - border-radius: 4px; - position: absolute; - left: 100%; - top: 136px; - margin-left: -170px; - text-align: center; - font-size: 24pt; - background: #fff; - } - - #mobile-increase{ - height: 40px; - line-height: 40px; - border-bottom: solid 1px #000; - } - - #mobile-decrease{ - height: 40px; - line-height: 40px; - } -} - -/* Additional rules for portrait orientation */ -@media only screen and (orientation: portrait) { - - #app { - width: 97%; - } - - #message { - height: 350px; - } - - #messageContainer { - width: 100%; - } - - #buttons { - clear:both; - width: 90%; - } - - #buttons div { - display: inline-block; - margin: 10px 10px 0; - width: 130px; - height: 40px; - } - - #font{ - position: relative; - top: 4px; - } - - #font span:first-child{ - margin-left: 3px; - } - - #font p{ - margin-left: 8px; - position: relative; - top: -4px; - } - - #mobile-font{ - display: none; - width: 301px; - position: absolute; - left: 50%; - top: 452px; - margin-left: -155px; - text-align: center; - font-size: 24pt; - } - - #mobile-increase{ - float: right; - width: 136px; - height: 53px; - line-height: 53px; - background: #fff; - border: 1px solid #888888; - border-radius: 4px; - } - - #mobile-decrease{ - float: right; - width: 136px; - height: 53px; - line-height: 53px; - background: #fff; - border: 1px solid #888888; - margin-right: 25px; - border-radius: 4px; - } -} - -/* -====================== -==Keyboard Styling== -====================== -*/ - -#kmw-language-menu p { - color: #000 !important; -} - -#kmw-language-menu .selected { - background-color: gray !important; -} - -.tablet .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { - top: -33%; -} +/* KMW LIVE CSS for iPad and other tablet devices */ + +/* +====================== +==Universal Elements== +====================== +*/ + +html { + overflow-y: scroll; + overflow-x: hidden; +} + +body { + width:100%; + font-family: Verdana, Arial, Helvetica, sans-serif; + color:#2D2C2C; + background-color: #eeeeee; + margin:0px; + } +section { + background-color: darkred; +} + +a { + text-decoration:none; + color: #AD4A28; + } + +a:hover { + text-decoration:underline; + } + +h3 { + font-size:18px; + } + +p { + font-size:13px; + line-height:1.5em; + } + +header, footer { + width:100%; + margin:0px auto; + /*clear: both;*/ + } + +hr { + display: none; + } + +.box { + -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; + -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); + } + +/* +=================== +==Header Elements== +=================== +*/ +header { + margin-top:0px; + } + +#headerLeft img { + display: block; /* default (inline) display inserts an unwanted bottom border */ + margin-top:0px; + height:60px; + /*-webkit-border-radius: 0px 0px 8px 8px; -moz-border-radius: 0px 0px 8px 8px; border-radius: 0px 0px 8px 8px;*/ + } + +header > div > img { + display: block; + width: 100%; + height: 8px; +} + + +/* Expanding the search box */ +/* @media screen and (940px <= width <= 1045px) { + .main-header { + grid-template-columns: 2fr 1fr 1fr; + } +} */ + +.main-header { + width: 100%; + grid-template-columns: 3fr 1fr; +} + +.left-header { + width: 70vw; +} + +.right-header { + width: 300px; +} + +/* +==================== +==Content Elements== +==================== +*/ +#content { + width: 100%; /* specific for tablet and mobile */ + margin: 0px auto; + background-color: #eeeeee; + /*min-height:375px;*/ + } + + +/* KMW Main App */ +#app { + /*float:left;*/ + /*height:330px;*/ + width:100%; /*710px; */ + margin: 0px;/*30px 15px 15px;*/ + } + +#KeymanWebControl { + display: none; + } + +#exampleBox, #example { + display: none; + } + +#messageContainer { + width: 80%; + float:left; + } + +#message { + height:195px; + width: 100%;/*554px;*/ + float:left; + margin: 10px; + color:black; + font-size:17px; + font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; + } + +/* KMW App Buttons */ + +#buttons { + float: right; + width:15%; + margin: 0px 20px; + margin-top: -6px; + } + +#buttons div { + width:140px; + -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; + background: #fff; + border: 1px solid #888888; + margin: 0px 10px; + padding: 3px; + padding-top: 9px; + height: 41px; + line-height: 36px; + background-repeat: no-repeat; + background-position: center left; + } + +#buttons div:disabled { + cursor: default !important; + color: gray !important; + border-color: gray !important; + } + +#buttons p{ + margin-left: 41px; +} + +#search.links, #search{ + background-image:url('../img/btn_google_small.png'); + +} + +#search.linksOff{ + background-image:url('../img/btn_google_small_white.png'); +} + +#copy.links, #copy{ + background-image:url('../img/btn_copy_small.png'); + +} + +#copy.linksOff{ + background-image:url('../img/btn_copy_small_white.png'); +} + +#buttons div * { + display:inline; + } + +div.links { + cursor:pointer; + } + +div.linksOff { + cursor:default !important; + border: 1px solid #cccccc !important; + } + +div.linksOff * { + color: gray; + -webkit-user-select:none; + } + +/* Aside Elements */ + +aside { + display:none; + } + +#font-size{ + display: none; +} + +/* + +#font, +=================== +==Footer Elements== +=================== +*/ +.footer, footer { + display: none; + background-color: #6A2915; + height:50px; + left:0px; + bottom:0px; + position: fixed; + /* -webkit-border-radius: 8px 8px 0px 0px; -moz-border-radius: 8px 8px 0px 0px; border-radius: 8px 8px 0px 0px; */ + } + +nav ul { + list-style: none outside none; + width:90%; + margin:0px auto; + padding:15px 0px; + } + +nav li { + display:inline; + padding:20px 39px; + } + +nav a { + color:#eee; + font-family:Tahoma; + font-weight:bold; + font-size:10.7px; + } + +.messageBox { + box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + background: #c4c4c4; + position: fixed; + left: 50%; + top: 20%; + z-index: 999 !important; + margin-left: -250px; + margin-top: -100px; + width: 500px; + height: 200px; +} + +.messageBox div { + width: 464px; + height: 134px; + left: 10px; + top: 10px; + padding: 8px; + font-size: 13px; + position: absolute; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 3px; + background: white; +} + +.messageBox button { + width:83px; + position: absolute; + right: 10px; + bottom: 4px; + background: #414141; + border-top: 1px solid #383838; + border-right: 1px solid #1F1F1F; + border-bottom: 1px solid #151515; + border-left: 1px solid #1F1F1F; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + color: white; + font: bold 12px Helvetica, Verdana, Arial, sans-serif; + text-shadow: 0px -1px 1px #1E2D4D; + text-align:center; + margin: 0 auto 6px; + padding: 3px; + } + +.messageBox button:disabled { + cursor: default !important; + color: gray !important; + -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; + -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; + -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; + -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; + box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; +} + +.messageBox button:hover { + -webkit-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -moz-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -ms-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -o-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + cursor: pointer; +} + +.messageBox button:active { + -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; + -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; + -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; + -o-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; + box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; +} + +.progressBox { + box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + background: #c4c4c4; + position: fixed; + left: 50%; + top: 20%; + z-index: 999; + margin-left: -200px; + margin-top: -54px; + width: 400px; + height: 54px; +} + +.progressBox div { + width: 364px; + height: 18px; + left: 10px; + top: 10px; + padding: 8px; + background: url('../img/wait.gif') no-repeat 354px 8px white; + font-size: 13px; + position: absolute; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 3px; +} + +/* Elements modified for tablet */ +#headerBackground { + width: 100%; + background-color:white; +} + +#headerLeft { + float: left; + margin-left: 28px; +} + +#headerRight { + text-align: right; + height: 40px; + float: right; + padding-bottom: 33px; + padding-right: 10px; +} + +#headerRight-beta { + display: block; + font-weight: bold; + color: red; + font-size: 16pt; + padding: 16px 12px 0; +} + +#headerRight-link { + padding: 0 12px 0; +} + + +#instructions { + margin:10px; + font:12pt Helvetica,Verdana,Arial,sans-serif; + color: white; +} + +/* Additional rules for portrait orientation */ +@media only screen and (orientation: landscape) { + #buttons{ + padding-top: 11px; + } + #buttons div { + margin: 4px 20px 10px 0px; + padding: 0px; + } + #font span:first-child{ + margin-left: 3px; + } + #font p{ + margin-left: 8px; + position: relative; + top: -5px; + } + #mobile-font{ + display: none; + width: 136px; + border-radius: 4px; + position: absolute; + left: 100%; + top: 136px; + margin-left: -170px; + text-align: center; + font-size: 24pt; + background: #fff; + } + + #mobile-increase{ + height: 40px; + line-height: 40px; + border-bottom: solid 1px #000; + } + + #mobile-decrease{ + height: 40px; + line-height: 40px; + } +} + +/* Additional rules for portrait orientation */ +@media only screen and (orientation: portrait) { + + #app { + width: 97%; + } + + #message { + height: 350px; + } + + #messageContainer { + width: 100%; + } + + #buttons { + clear:both; + width: 90%; + } + + #buttons div { + display: inline-block; + margin: 10px 10px 0; + width: 130px; + height: 40px; + } + + #font{ + position: relative; + top: 4px; + } + + #font span:first-child{ + margin-left: 3px; + } + + #font p{ + margin-left: 8px; + position: relative; + top: -4px; + } + + #mobile-font{ + display: none; + width: 301px; + position: absolute; + left: 50%; + top: 452px; + margin-left: -155px; + text-align: center; + font-size: 24pt; + } + + #mobile-increase{ + float: right; + width: 136px; + height: 53px; + line-height: 53px; + background: #fff; + border: 1px solid #888888; + border-radius: 4px; + } + + #mobile-decrease{ + float: right; + width: 136px; + height: 53px; + line-height: 53px; + background: #fff; + border: 1px solid #888888; + margin-right: 25px; + border-radius: 4px; + } +} + +/* +====================== +==Keyboard Styling== +====================== +*/ + +#kmw-language-menu p { + color: #000 !important; +} + +#kmw-language-menu .selected { + background-color: gray !important; +} + +.tablet .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { + top: -33%; +} diff --git a/cdn/dev/css/kmw.css b/cdn/dev/css/kmw.css index 02c9c07..8e80256 100644 --- a/cdn/dev/css/kmw.css +++ b/cdn/dev/css/kmw.css @@ -1,78 +1,78 @@ -/* -============= -==Reset CSS== -============= -*/ -html, body, div, span, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -abbr, address, cite, code, -del, dfn, em, img, ins, kbd, q, samp, -small, strong, sub, sup, var, -b, i, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, figcaption, figure, -footer, header, hgroup, menu, nav, section, summary, -time, mark, audio, video { - margin:0; - padding:0; - border:0; - outline:0; - vertical-align:baseline; - background:transparent; - } - -a { - margin:0; - padding:0; - vertical-align:baseline; - background:transparent; - } - -article,aside,details,figcaption,figure, -section,header,footer,hgroup,menu,nav { - display:block; - } - -ins { - background-color:#ff9; - text-decoration:none; - } - -mark { - background-color:#ff9; - font-weight:bold; - } - -del { - text-decoration: line-through; - } - -abbr[title], dfn[title] { - border-bottom:1px dotted; - cursor:help; - } - -table { - border-collapse:collapse; - border-spacing:0; - } - -hr { - display:block; - height:1px; - border:0; - border-top:1px solid #cccccc; - padding:0; -} - -button, input, select { - vertical-align:middle; -} - -/* === End of CSS reset rules === */ - -ins.adsbygoogle { - display: none !important; -} +/* +============= +==Reset CSS== +============= +*/ +html, body, div, span, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +abbr, address, cite, code, +del, dfn, em, img, ins, kbd, q, samp, +small, strong, sub, sup, var, +b, i, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, figcaption, figure, +footer, header, hgroup, menu, nav, section, summary, +time, mark, audio, video { + margin:0; + padding:0; + border:0; + outline:0; + vertical-align:baseline; + background:transparent; + } + +a { + margin:0; + padding:0; + vertical-align:baseline; + background:transparent; + } + +article,aside,details,figcaption,figure, +section,header,footer,hgroup,menu,nav { + display:block; + } + +ins { + background-color:#ff9; + text-decoration:none; + } + +mark { + background-color:#ff9; + font-weight:bold; + } + +del { + text-decoration: line-through; + } + +abbr[title], dfn[title] { + border-bottom:1px dotted; + cursor:help; + } + +table { + border-collapse:collapse; + border-spacing:0; + } + +hr { + display:block; + height:1px; + border:0; + border-top:1px solid #cccccc; + padding:0; +} + +button, input, select { + vertical-align:middle; +} + +/* === End of CSS reset rules === */ + +ins.adsbygoogle { + display: none !important; +} diff --git a/cdn/dev/js/kmwBody.js b/cdn/dev/js/kmwBody.js index 77c0f2b..d0f800a 100644 --- a/cdn/dev/js/kmwBody.js +++ b/cdn/dev/js/kmwBody.js @@ -1,173 +1,118 @@ -document.addEventListener('DOMContentLoaded', function() { - // Define the divider, text area and keyboard - const divider = document.getElementById('Divider') - const resizer = divider.querySelector('#resizeGrip') - let prevElement = divider.previousElementSibling.querySelector('.text-area'); - let nextElement = divider.nextElementSibling; - let isResizing = false; - - // Define the heights of text area, keyboard, and the vertical screen - let prevElementHeight = 0; - let prevElementWidth = 0; - let verticalViewport = 0; - - const mouseDownHandler = (e) => { - e.preventDefault(); - resizer.style.cursor = 'grabbing' - isResizing = true - - // Get the Y coordinate of mouse click & Text Area + Keyboard heights - prevElementHeight = prevElement.getBoundingClientRect().height; - prevElementWidth = prevElement.getBoundingClientRect().width; - verticalViewport = e.clientY; - - document.addEventListener('mousemove', mouseMoveHandler) - document.addEventListener('mouseup', mouseUpHandler) - } - const mouseUpHandler = () => { - resizer.style.removeProperty('cursor') - isResizing = false - } - - const mouseMoveHandler = function (e) { - if (!isResizing) return; - // Calculate the cursor movement - let value = e.clientY - verticalViewport - let clientX = e.clientX - calcElementSize(value, clientX) - } - - function calcElementSize(val, x) { - // Get the dynamic heights of both elements - let newPrevHeight = prevElementHeight + val; - let newNextWidth = (x / prevElementWidth) * 150; - - // Define minimum and maximum heights - const minPrevHeight = 150; - const maxPrevHeight = window.innerHeight * 0.8; - const minNextWidth = 50; - const maxNextWidth = 80; - - // Ensure the heights do need exceed the define heights - newPrevHeight = Math.max(minPrevHeight, Math.min(newPrevHeight, maxPrevHeight)); - newNextWidth = Math.max(minNextWidth, Math.min(newNextWidth, maxNextWidth)); - - // Update the heights of Prev and Next Elements - prevElement.style.height = `${newPrevHeight}px` - - if (newPrevHeight >= maxPrevHeight) { - fullScreenSize() - } else if (newPrevHeight < maxPrevHeight) { - divider.style.display = "grid" - nextElement.style.display = "flex" - } - } - - /* Hide-Show Keyboard */ - const hideKeyboardBtn = document.querySelector('#hideKeyboard') - - let isTextAreaFullHeight = true - const fullHeightTextArea = window.innerHeight * 0.9 - const defaultHeightTextArea = window.innerHeight * 0.3 - - function defaultSize() { - prevElement.style.height= `${defaultHeightTextArea}px` - isTextAreaFullHeight = true - } - - function fullScreenSize() { - prevElement.style.height = `${fullHeightTextArea}px` - isTextAreaFullHeight = false - } - - hideKeyboardBtn.addEventListener('click', () => { - if (!isTextAreaFullHeight) { - defaultSize() - } else { - fullScreenSize() - } - }) - window.onresize = updateSize - // Detect desktop browser height and modify css - function updateSize() { - // Set OSK size/position - p = new Object(); - - var height = $(window).height(); - var width = $(window).width(); - var appPos = $('#textAndKeyboardSection').position(); - var appLeft = appPos.left; - - // We can't proceed any further if KMW hasn't loaded yet. - // No point handling resizes until that's occurred. - if(!getKeymanWeb() || !getKeymanWeb().osk) { - return; - } - - // Adjust the message box height only if a desktop browser - if(!getKeymanWeb().util.isTouchDevice()) - { - if (height <= 768) { - $('#textArea').css('height', '209px'); - p['height'] = 264; - } - - if(height > 768) { - $('#textArea').css('height', '260px'); - if (height < 820) { - p['height'] = 246; - } - else if(height < 860) { - p['height'] = 246; - } - else{ - p['height'] = 264; - } - } - } - - p['top'] = $('#textAndKeyboardSection').offset().top + $('#textAndKeyboardSection').outerHeight() + 8; - p['left'] = appLeft + 15; - p['width'] = 710; - - // Update keyboard position and size - getKeymanWeb().osk.setRect(p); - } - - // Copy tool - const copyBtn = document.querySelector('#copyTool') - const textArea = document.querySelector('#textArea') - copyBtn.addEventListener('click', async function() { - try { - let textToCopy = textArea.value.trim() - - if(!textToCopy) { - copyBtn.classList.replace('fa-copy', 'fa-xmark') - // copyBtn.textContent = ' No characters to copy' - setTimeout(() => { - copyBtn.classList.replace('fa-xmark', 'fa-copy') - copyBtn.textContent = '' - }, 3000) - return; - } - - await navigator.clipboard.writeText(textToCopy) - - copyBtn.classList.replace('fa-copy', 'fa-check'); - - setTimeout(() => { - copyBtn.classList.replace('fa-check', 'fa-copy'); - }, 1000); - - } catch (error) { - console.error('Failed to copy: ', error) - } - }) - - const fontSliderBtn = document.querySelector('#fontSizeRange') - fontSliderBtn.addEventListener('input', function() { - textArea.style.fontSize = `${this.value}px` - }) - defaultSize() - resizer.addEventListener('mousedown', mouseDownHandler) +document.addEventListener('DOMContentLoaded', function() { + // Define the divider, text area and keyboard + const container = document.querySelector('.container-flex') + const divider = document.getElementById('Divider') + + const resizer = divider.querySelector('#resizeGrip') + const prevElementOfResizer = divider.previousElementSibling.querySelector('.text-area') + const nextElementOfResizer = divider.nextElementSibling + + let isResizing = false; + + let startY, startHeightTop, startHeightBottom = 0 + + const mouseDownHandler = (e) => { + e.preventDefault(); + resizer.style.cursor = 'grabbing' + isResizing = true + + startY = e.clientY + startHeightTop = prevElementOfResizer.offsetHeight + startHeightBottom = nextElementOfResizer.offsetHeight + + document.addEventListener('mousemove', mouseMoveHandler) + document.addEventListener('mouseup', mouseUpHandler) + } + + const mouseUpHandler = () => { + resizer.style.removeProperty('cursor') + isResizing = false + document.removeEventListener('mousemove', mouseMoveHandler) + } + + const mouseMoveHandler = function (e) { + if (!isResizing) return; + + let deltaY = e.clientY - startY // Get up or down direction + + let newTopHeight = startHeightTop + deltaY + let newBottomHeight = startHeightBottom - deltaY + + newTopHeight = Math.max(100, Math.min(newTopHeight, window.innerHeight * 0.8)) + newBottomHeight = Math.max(100, Math.min(newBottomHeight, window.innerHeight * 0.7)) + + prevElementOfResizer.style.height = `${newTopHeight}px` + nextElementOfResizer.style.height = `${newBottomHeight}px` + + if (newBottomHeight <= 200) { + fullScreenSize() + } + } + + /* Hide-Show Keyboard */ + const hideKeyboardBtn = document.querySelector('#hideKeyboard') + + let isTextAreaFullHeight = false + const fullHeightTextArea = window.innerHeight * 0.9 + const defaultHeightTextArea = window.innerHeight * 0.3 + + function defaultSize() { + prevElementOfResizer.style.height = `${defaultHeightTextArea}px` + nextElementOfResizer.style.height = `500px` + // nextElementOfResizer.style.width = `900px` + isTextAreaFullHeight = false + } + + function fullScreenSize() { + prevElementOfResizer.style.height = `${fullHeightTextArea}px` + isTextAreaFullHeight = true + } + + hideKeyboardBtn.addEventListener('click', () => { + if (isTextAreaFullHeight) { + defaultSize() + } else { + fullScreenSize() + } + }) + + // Copy tool + const copyBtn = document.querySelector('#copyTool') + const textArea = document.querySelector('#textArea') + copyBtn.addEventListener('click', async function() { + try { + let textToCopy = textArea.value.trim() + + if(!textToCopy) { + copyBtn.classList.replace('fa-copy', 'fa-xmark') + // copyBtn.textContent = ' No characters to copy' + setTimeout(() => { + copyBtn.classList.replace('fa-xmark', 'fa-copy') + copyBtn.textContent = '' + }, 3000) + return; + } + + await navigator.clipboard.writeText(textToCopy) + + copyBtn.classList.replace('fa-copy', 'fa-check'); + + setTimeout(() => { + copyBtn.classList.replace('fa-check', 'fa-copy'); + }, 1000); + + } catch (error) { + console.error('Failed to copy: ', error) + } + }) + + // Font slider + const fontSliderBtn = document.querySelector('#fontSizeRange') + fontSliderBtn.addEventListener('input', function() { + textArea.style.fontSize = `${this.value}px` + }) + + defaultSize() + + resizer.addEventListener('mousedown', mouseDownHandler) }) \ No newline at end of file diff --git a/cdn/dev/js/kmwElements.js b/cdn/dev/js/kmwElements.js new file mode 100644 index 0000000..849f8ae --- /dev/null +++ b/cdn/dev/js/kmwElements.js @@ -0,0 +1,36 @@ +const calcScreenSize = Math.min(screen.width, screen.height) > 720 ? 'tablet' : 'mobile' + +const searchBox = document.getElementById('searchInput') +const fontSizeContainer = document.getElementsByClassName('font-size-container') +const kbSelectionBtn = document.getElementById('keyboardSelectionButton') +const searchIcon = document.getElementById('searchIcons') + +const fontSizeElements = ` +
    + A + + A +
    ` + +if (calcScreenSize == 'tablet') { + +} + +if (calcScreenSize == 'mobile') { + const firstChild = fontSizeContainer[0].children[0] + const secondChild = fontSizeContainer[0].children[1] + firstChild.remove() + secondChild.remove() + + searchBox.addEventListener('click', () => { + kbSelectionBtn.style.display = 'none' + searchIcon.style.left = '200px' + }) +} + +const fontSizeChild = fontSizeContainer[0].children[0] +fontSizeChild.addEventListener('click', () => { + fontSizeChild.innerHTML = fontSizeElements +}) + + diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index 5687861..c9a76d4 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -1,1166 +1,1356 @@ -keyman = getKeymanWeb() - -function getKeymanWeb() { - if(window.tavultesoft) { - return window.tavultesoft.keymanweb; - } - return window.keyman; -} -/* Global Variables */ -let selectedKbList = [] // Main array for the search, kb selection...etc. -let dataKbForRemoval // For History search -let kmwLang = keyman.getActiveLanguage() -let kmwKb = keyman.getActiveKeyboard() - -const clearSearchIcon = document.querySelector('#clearSearchIcon') -const magnifying = document.querySelector('#magnifyingGlassIcon') - -const elements = { - worldMapBtn: document.querySelector('#worldMap'), - kmwControls: document.querySelector('#KeymanWebControl'), - - kbSelection: document.querySelector('#keyboardSelection'), - keyboardSelectionButton: document.querySelector('#keyboardSelectionButton'), - caretRightIcon: keyboardSelectionButton.querySelector('.fa-caret-right'), - - searchBar: document.querySelector('#searchBar'), - searchInput: document.querySelector('#searchInput'), - searchDropdownMenu: document.querySelector('#searchDropdownMenu'), - searchIcons: document.querySelector('#searchIcons'), -} - -const state = { - mapIsOpen: false -} - -/* - ===================================== Default keyboard ========================================= -*/ - -function defaultKeyboard(kbdname = "basic_kbdus", languageCode = "en") { - if(!exists(kbdname, languageCode)) { - if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' - return - } - setKeyboardWithDirection(kbdname, languageCode) -} - -/* - ============================= Toggle between World Map and Search ============================== -*/ -elements.worldMapBtn?.addEventListener('click', (e) => { - e.preventDefault() - state.mapIsOpen = true - if (state.mapIsOpen == true) { - openMap() - keyman.addEventListener('keyboardchange', () => { - location.replace(`#${keyman.getActiveLanguage()},${keyman.getActiveKeyboard()}`) - updateExample(keyman.getActiveKeyboard()) - }) - } else { - openSearch() - } -}) - -function openSearch() { - state.mapIsOpen = false - hideEls( - elements.kmwControls, - ) - showEls( - elements.searchDropdownMenu, - elements.searchIcons - ) - - if (selectedKbList.length > 0) { - elements.caretRightIcon.textContent = selectedKbList.length - removeClass(elements.caretRightIcon, 'fa-magnifying-glass') - } else { - elements.caretRightIcon.textContent = '' - elements.caretRightIcon.classList.add('fa-caret-right') - } - - elements.searchBar.replaceChildren( - elements.searchInput, - elements.searchIcons, - elements.searchDropdownMenu - ) -} - -function openMap() { - state.mapIsOpen = true - removeClass( - elements.kmwControls, 'hidden', - elements.caretRightIcon, 'fa-caret-right' - ) - hideEls( - elements.searchDropdownMenu - ) - removeTextContent( - elements.caretRightIcon - ) - elements.keyboardSelectionButton.removeAttribute('id', 'keyboardSelectionButton') - elements.keyboardSelectionButton.setAttribute('id', 'returnToSearchButton') - elements.caretRightIcon.classList.add('fa-magnifying-glass') - elements.keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" - elements.keyboardSelectionButton.style.border = '0px' - elements.keyboardSelectionButton.classList.add('return-to-search') - elements.kbSelection.style.display = "none" - elements.searchBar.replaceChildren( - elements.kmwControls - ) -} - -function returnToSearch() { - elements.keyboardSelectionButton.removeAttribute('id', 'returnToSearchButton') - elements.keyboardSelectionButton.setAttribute('id', 'keyboardSelectionButton') - - if ((selectedKbList?.length || 0) < 1) { - elements.caretRightIcon.classList.add('fa-caret-right') - removeClass(elements.caretRightIcon, 'fa-magnifying-glass') - elements.caretRightIcon.textContent = '' - } - - elements.keyboardSelectionButton.style.backgroundColor = "" - elements.kbSelection.style.display = "block" - openSearch() -} - -function waitForElement(selector) { - return new Promise((resolve) => { - const interval = setInterval(() => { - const element = document.querySelector(selector) - if (element) { - clearInterval(interval) - resolve(element) - } - }, 100) - }) -} - -waitForElement('#returnToSearchButton').then((element) => { - element.addEventListener('click', (e) => { - e.preventDefault() - returnToSearch() - }) -}) - -waitForElement(".kmw-osk-frame").then((oskDiv) => { - document.querySelector('.keyboard-area').appendChild(oskDiv) -}) - -/* - ==================== Search Interaction =================== -*/ - -/* Search Input */ -const dropdown = new bootstrap.Dropdown(elements.searchInput, { - autoClose: 'outside' -}) - -document.addEventListener('click', (e) => { - if (!elements.searchInput.contains(e.target) && !elements.searchDropdownMenu.contains(e.target)) { - dropdown.hide() - } -}) - -elements.searchInput.addEventListener('click', (e) => { - e.stopPropagation() - // defaultKeyboard() - dropdown.show() -}) - -// Hide Dropdown Search on Mouse leave -elements.searchDropdownMenu.addEventListener('mouseleave', (e) => { - e.preventDefault() - dropdown.hide() -}) - -/* - =========================== Utility functions ============================ -*/ -function hideEls(...elements) { - return elements.every(el => el.classList.add('hidden')) -} - -function showEls(...elements) { - return elements.every(el => el.classList.remove('hidden')) -} - -function removeClass(element, className) { - return element.classList.remove(className) -} - -function removeTextContent(...elements) { - return elements.every(el => el.textContent = '') -} - -/* Elements validation */ -function exists(...elements) { - return elements.every(el => el != null) -} - -document.addEventListener('DOMContentLoaded', () => { - defaultKeyboard() - /* UI Behavior of the Selected Keyboard menu */ - if (exists(elements)) { - elements.keyboardSelectionButton.addEventListener('mouseenter', () => { - elements.kbSelection.classList.add('open') - }) - elements.keyboardSelectionButton.addEventListener('click', () => { - elements.kbSelection.classList.remove('open') - }) - elements.kbSelection.addEventListener('mouseleave', () => { - elements.kbSelection.classList.remove('open') - }) - } -}) - -/* - === Keyboard Execution === -*/ -const downloadBtn = document.getElementById('kbDownloadPage') -const textArea = document.getElementById('textArea') -let langExamples = []; - -function selectKb(kbdname, languageCode) { - if(!exists(kbdname, languageCode)) { - if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' - return - } - setKeyboardWithDirection(kbdname, languageCode) -} - -function setTextDirection(targetEls, dir) { - const copyBtn = document.querySelector('#copyTool') - - targetEls.dir = dir - if (dir == 'rtl') { - copyBtn.style.right = '0' - copyBtn.style.left = '10px' - } else { - copyBtn.style.right = '' - copyBtn.style.left = '' - } -} - -// Change and type keyboard -async function setKeyboardWithDirection(kbdname, languageCode) { - const kbSpan = document.querySelector('#kbSpan') - const langTag = `#${languageCode}` - let kbTag = '' - - if (kbdname.match(/Keyboard_*/)) { - kbTag = `${kbdname}` - } else { - kbTag = `Keyboard_${kbdname}` - } - - location.replace(`${langTag},${kbTag}`) - - await keyman.addKeyboards(kbdname) - const kbd = keyman.getKeyboard(kbdname, languageCode) - await keyman.setActiveKeyboard(kbdname, languageCode) - - if(kbd) { - textArea.placeholder = `The ${kbdname} keyboard is selected. Start typing...` - kbSpan.innerHTML = `${kbdname}` - - setTextDirection(textArea, textArea.dir) - } - updateExample(kbdname) - if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname) -} - -/* Language Examples AJAX */ -async function updateExample(kbdname) { - const keymanExample = document.getElementById("example") - const exampleBox = document.getElementById("exampleBox") - - if (!keymanExample || !exampleBox) return false; - - if(kbdname == '') - { - keymanExample.textContent = `No example is available due to empty Keyboard name.` - return true; - } - - let activeLanguage = keyman.getActiveLanguage(); - - if(langExamples[activeLanguage + '_' + kbdname]) - { - keymanExample.innerHTML = langExamples[activeLanguage + '_' + kbdname]; - return true; - } - - langExamples[activeLanguage + '_' + kbdname] = 'Loading...'; - keymanExample.innerHTML = 'Loading...'; - - const link = `/prog/languageexample.php?keyboard=${kbdname}&language=${activeLanguage}`; - try { - const response = await fetch(link); - if(response.status == 200) { - const content = await response.text(); - - langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = content; - } else { - throw new Error(`Unable to retrieve content, status was ${response.status}: ${response.statusText}`); - } - } catch(e) { - langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = 'Error retrieving example: '+e.message; - throw e; - } -} - -/* Search */ -const kbSearchCard = document.getElementById('kbSearchCardUI'); -let debounceTimer - -/* Pagination */ -prevBtn = document.getElementById('prevPage') -nextBtn = document.getElementById('nextPage') -pageInfo = document.getElementById('pageInfo') - -searchResultCount = document.getElementById('resultCount') -paginationCtrl = document.getElementById('paginationControls') - -let currentPage = 1 -let currentQuery = '' -let totalPage -const itemPerPage = 10 - -prevBtn.addEventListener('click', goPrevPage) -nextBtn.addEventListener('click', goNextPage) - -function updatePaginationCtrl() { - pageInfo.textContent = `${currentPage} of ${totalPage}` - nextBtn.disabled = currentPage >= totalPage - prevBtn.disabled = currentPage <= 1 -} - -function goPrevPage() { - if (currentPage > 1) { - currentPage-- - searchKeyboard(currentQuery, currentPage) - } -} - -function goNextPage() { - if (currentPage < totalPage) { - currentPage++ - searchKeyboard(currentQuery, currentPage) - } -} - -/* Click: Open Search and Display search instructions */ -elements.searchInput.addEventListener('click', function(e) { - const query = e.target.value.trim() - if (query == "") { - resetSearch() - } else { - searchKeyboard(query) - } -}) - -/* Input: Search and Display keyboards */ -elements.searchInput.addEventListener('input', function(e) { - handleSearch(e.target.value) -}) - -clearSearchIcon.addEventListener('click', () => { - elements.searchInput.value = '' - handleSearch() - elements.searchInput.focus() -}) - -function handleSearch(value = "") { - currentQuery = value.trim() - currentPage = 1 - - updateSearchIcon(value) - - if (!currentQuery) { - resetSearch() - return - } - debounceSearch(currentQuery, currentPage) -} - -function resetSearch() { - paginationCtrl.style.display = 'none' - defaultSearch() -} - -function updateSearchIcon(value) { - const hasValue = value.length > 0 - magnifying.style.display = hasValue ? 'none' : 'inline' - clearSearchIcon.style.display = hasValue ? 'inline' : 'none' -} - -function debounceSearch(query, page) { - clearTimeout(debounceTimer) - if (query.length > 1) { - debounceTimer = setTimeout(() => { - searchKeyboard(query, page) - }, 300) - } -} - -/* == Section == - Search -*/ - -/* Display top downloads with search Instruction */ -async function defaultSearch() { - kbSearchCard.innerHTML = `

    Loading...

    ` - try { - let response = await fetch(`https://api.keyman.com/search/2.0?q=p:popular`) - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}`) - } - - let data = await response.json() - - let mostDownloadkb = data.keyboards - - if (!mostDownloadkb || !Array.isArray(mostDownloadkb)) { - throw new Error(`Invalid API response structure`) - } - displaySearch(mostDownloadkb) - } - catch(error) { - console.error(`Error fetching ${error}`) - kbSearchCard.innerHTML = `
    No keyboards are found.
    ` - paginationCtrl.style.display = 'none' - } -} - -/* Get query and return search */ -async function searchKeyboard(query = null, page) { - kbSearchCard.innerHTML = `
    Searching ${query}...
    ` - kbSearchCard.style.display = 'block' - - let response = await fetch(`https://api.keyman.com/search/2.0?q=${encodeURIComponent(query)}&p=${page}`) - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}`) - } - - let data = await response.json() - // Found with Context: Setup pagination - if (data.context) { - totalPage = data.context.totalPages || 1; - currentPage = data.context.pageNumber || 1; - } else { - totalPage = Math.ceil(data.keyboards.length / itemPerPage); - } - - // Validate data.keyboards - let keyboardData = data.keyboards - if (!keyboardData || !Array.isArray(keyboardData)) { - throw new Error("Invalid API response structure") - } - - // Get total result - let totalFound = data.context.totalRows - - updatePaginationCtrl() - displaySearch(keyboardData, totalFound, query) -} - -/* Display items return from search */ -function displaySearch(data, total = 0, query = '') { - kbSearchCard.innerHTML = ''; - - if (!data || data.length == 0) { - kbSearchCard.innerHTML = 'No keyboards are found.' - paginationCtrl.style.display = 'none' - return - } - - if (total) { - searchResultCount.innerHTML = `${total} results` - searchResultCount.classList.remove('hidden') - } - - // Getting searched Word ready for highlight - const marked = getMarkedContext(query) - - const searchInstruction = document.querySelector('.search-instruction') - const kbHrTitle = document.querySelector('.keyboard-title') - if (!query) { - searchInstruction.classList.remove("hidden") - kbHrTitle.textContent = "Most Downloads" - } else { - searchInstruction.classList.add("hidden") - kbHrTitle.textContent = "" - } - data.forEach(kb => { - const card = searchKbCardUI(kb, marked, selectedKbList, data) - kbSearchCard.appendChild(card) - // dataKbForRemoval = selectedKbList - }) - paginationCtrl.style.display = 'flex'; -} - -// UI Search card -function searchKbCardUI(kb, marked = '', selectedKbList, data) { - const kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) - // Keyboard card container - let cardWrap = document.createElement('div') - cardWrap.classList.add('card-wrap') - cardWrap.setAttribute('id', 'keyboardCardWrap') - - // Keyboard header container - let cardHeader = document.createElement('div') - cardHeader.classList.add('card-header') - - const {matchFound, matchField, matchValue} = highlightSearchContext(kb, marked) - - const kbNameHeading = matchFound ? showMarkedContext(kb, matchField, matchValue) - : (() => { - const heading = document.createElement('h4') - heading.innerHTML = kb.name - return heading - }) - - // Keyboard Plus (+) icon - const kbIconPTag = document.createElement('p') - kbIconPTag.textContent = kbFoundInList ? "-" : "+" - kbIconPTag.style.fontSize = '20px' - kbIconPTag.style.cursor = 'pointer' - kbIconPTag.classList.add('kb-icon-plus') - - checkKbCardUI(kbIconPTag, cardWrap, kb) - // Keyboard ID - const kbIdPTag = document.createElement('p') - kbIdPTag.classList.add('keyboard-id') - kbIdPTag.textContent = kb.id - - // Keyboard Description - const kbDescHeading = truncateDesc(kb, matchField, marked) - - // Keyboard monthly downloads and platform support - const kbSpecs = document.createElement('div') - kbSpecs.classList.add('keyboard-specs') - - const kbDownloadHeading = document.createElement('h6') - kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` - kbDownloadHeading.classList.add('monthly-download') - - const kbPlatformSupport = document.createElement('div') - kbPlatformSupport.classList.add('platform') - kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) - - // Append children - cardHeader.appendChild(kbNameHeading) - cardHeader.appendChild(kbIconPTag) - - kbSpecs.appendChild(kbDownloadHeading) - kbSpecs.appendChild(kbPlatformSupport) - - cardWrap.appendChild(cardHeader) - cardWrap.appendChild(kbIdPTag) - cardWrap.appendChild(kbDescHeading) - cardWrap.appendChild(kbSpecs) - - // Choose keyboard to selection - kbIconPTag.onclick = (e) => { - e.stopPropagation() - addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) - textArea.focus() - selectKb() - } - // console.log("Recent:", historyKbSelection.getHistory()); - - return cardWrap -} - -// Disable or Enable search card -function checkKbCardUI(kbIconPTag, cardWrap, kb) { - // For checking if the keyboard exists in selected Kbs - let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) - if (kbFoundInList) { - cardWrap.classList.add('disabled') - } else { - cardWrap.classList.remove('disabled') - } -} - -// Highlight word searched -function getMarkedContext(query) { - let escapedTerm = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - return new RegExp(escapedTerm, 'i') -} - -// Find a match between Search Context and Language, Keyboard name, Description -function highlightSearchContext(kb, marked) { - let matchFound = false - let matchField = "" - let matchValue = "" - - // Get and find language that matches the search - for (lang in kb.languages) { - let langData = kb.languages[lang] - for (key in langData) { - const value = langData[key] - if (typeof value == "string" && marked.test(value)) { - matchFound = true - matchValue = value.replace(marked, (m) => m ? `${m}` : m) - matchField = "language" - break - } - } - if (matchFound) break - } - - // Find a match for keyboard name if language is not a match - if (!matchFound && marked.test(kb.name)) { - matchFound = true - matchValue = kb.name.replace(marked, '$&') - matchField = "keyboard" - } - - // Find a match for keyboard description if name is not a match - if (!matchFound && marked.test(kb.description)) { - matchFound = true - matchField = "description" - } - - return {matchField, matchValue, matchFound} -} - -// Display Highlighted Search Context -function showMarkedContext(kb, matchField, matchValue) { - const kbNameHeading = document.createElement('h4') - - const kbHelpLink = document.createElement('a') - kbHelpLink.href = `https://help.keyman.com/keyboard/${kb.id}` - kbHelpLink.target = '_blank' - kbHelpLink.rel = 'noopener noreferrer' - - // Display matched language - const langNameSpan = document.createElement('span') - langNameSpan.style.fontSize = "14px" - if (matchField == "language") { - langNameSpan.innerHTML = matchField == "language" ? ` (${matchValue} language)` : "" - } - - // Display matched keyboard - if (matchField == "keyboard") { - kbHelpLink.innerHTML = matchValue - } else { - kbHelpLink.textContent = kb.name - } - kbNameHeading.appendChild(kbHelpLink) - kbNameHeading.appendChild(langNameSpan) - kbNameHeading.addEventListener('click', () => { - const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) - const newURL = checkedURL + kb.id - window.open(newURL, '_blank') - }) - - return kbNameHeading -} - -// Truncated Keyboard Description -function truncateDesc(kb, matchField, marked) { - const kbDescHeading = document.createElement('h6') - kbDescHeading.classList.add("keyboard-description") - const word_limits = 90 - - let temp = document.createElement('div') - temp.innerHTML = kb.description - - let fullDesc = kb.description - let plainText = temp.textContent - let shortText = "" - - let isTruncated = false - - if (plainText.length >= word_limits) { - shortText = plainText.slice(0, word_limits) + "..." - kbDescHeading.innerHTML = shortText - isTruncated = true - } else { - kbDescHeading.innerHTML = fullDesc - isTruncated = false - } - - if (isTruncated) { - const toggleBtn = document.createElement('a') - toggleBtn.href = "#" - toggleBtn.style.marginLeft = "6px" - toggleBtn.textContent = "Show more" - - toggleBtn.addEventListener('click', e => { - e.preventDefault() - const isExpanded = toggleBtn.textContent == "Show more" - kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, (m) => m ? `${m}` : m) : fullDesc - if (matchField == 'description') { - kbDescHeading.innerHTML = isExpanded ? fullDesc.replace(marked, '$&') : shortText - } - kbDescHeading.style.color = isExpanded ? 'black' : 'gray' - toggleBtn.textContent = isExpanded ? "Show less" : "Show more" - kbDescHeading.appendChild(toggleBtn) - }) - kbDescHeading.appendChild(toggleBtn) - } - - return kbDescHeading -} - -/* - == End of Search Section == -*/ - -// Platform Support -function platformSupport(data) { - const platformMap = { - android: "Android", - desktopWeb: "Web", - ios: "iPhone and iPad", - linux: "Linux", - macos: "macOS", - mobileWeb: "Mobile web", - windows: "Windows" - } - let platformSpan = Object.entries(data) - .filter(([_, supportLevel]) => supportLevel == 'full') - .map(([platform]) => `${platformMap[platform]}`).join('') - - return platformSpan -} - -/* == Section == - Keyboard Selection Menu -*/ -function addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) { - const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') - let isSelected = selectedKbList.some(selected => selected.id == kb.id) - addDataKb(data) - // Remove keyboard - if (isSelected) { - removeKbSelected(kb.id) - kbIconPTag.textContent = '+' - generateKbUI(selectedKbList) - checkKbCardUI(kbIconPTag, cardWrap, kb) - - return - } - if(selectedKbList.length < 5) { - addKbToSelection(kb) - generateKbUI(selectedKbList) - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('kb-icon-plus-animate') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('kb-icon-plus-animate') - keyboardSelectionButton.classList.remove('btn-secondary') - keyboardSelectionButton.classList.add('btn-keyman-orange') - }, 800) - - checkKbCardUI(kbIconPTag, cardWrap, kb) - return - } - confirmAndAddKb(() => { - addKbToSelection(kb) - generateKbUI(selectedKbList) - - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('kb-icon-plus-animate') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('kb-icon-plus-animate') - keyboardSelectionButton.classList.remove('btn-secondary') - keyboardSelectionButton.classList.add('btn-keyman-orange') - }, 800) - checkKbCardUI(kbIconPTag, cardWrap, kb) - }) -} - -// Add keyboard for kb search and selection UI -function addKbToSelection(kb) { - const kbInfo = { - "id": kb.id, - "name": kb.name, - "version": kb.version, - "helpLink": kb.helpLink, - "platformSupport": kb.platformSupport, - "totalDownloads": kb.match.totalDownloads, - "sourcePath": kb.sourcePath, - "supportedLanguage": kb.languages, - "lastUpdated": kb.lastModifiedDate - } - // historyKbSelection.add(kbInfo) - selectedKbList.push(kbInfo) -} - -// UI for keyboard selection menu -function generateKbUI(selectedKbList) { - const keyboardSelection = document.getElementById("keyboardSelection") - keyboardSelection.innerHTML = '' - - if(selectedKbList.length < 1) { - triggerKbCount(selectedKbList) - resetKbSelectionMenu() - return - } - - const kbDivHeader = document.createElement('div') - kbDivHeader.textContent = "Keyboard Selection menu" - kbDivHeader.classList.add('kb-item-header') - - const kbDivFoot = document.createElement('div') - kbDivFoot.textContent = "US Basic Keyboard" - kbDivFoot.classList.add('kb-item-footer') - - keyboardSelection.appendChild(kbDivHeader) - - selectedKbList.forEach(data => { - const kbDiv = document.createElement('div') - kbDiv.classList.add("kb-item") - kbDiv.setAttribute('id', `${data.id}`) - - const kbName = document.createElement('span') - kbName.textContent = data.name - - const kbConfigList = document.createElement('ul') - kbConfigList.classList.add('keyboard-configs') - kbConfigList.innerHTML = ` -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • - ` - - const kbDetails = displayKbDetails(data) - - kbDiv.appendChild(kbName) - kbDiv.appendChild(kbConfigList) - kbDiv.appendChild(kbDetails) - keyboardSelection.appendChild(kbDiv) - keyboardSelection.append(kbDivFoot) - - let kbdName = data.id - let langCode = Object.keys(data.supportedLanguage)[0] || "en" - - selectKb(kbdName, langCode) - kbConfigList.addEventListener('click', (e) => { - const target = e.target - if (target.tagName == 'I' && target.dataset.action) { - const action = target.dataset.action - const id = target.dataset.id - const helpLink = target.dataset.helplink - kbConfigMenu(action, id, helpLink) - } - }) - - kbDiv.addEventListener('click', () => { - kbdName = data.id - langCode = Object.keys(data.supportedLanguage)[0] || "en" - textArea.focus() - selectKb(kbdName, langCode) - }) - - kbDivFoot.onclick = () => { - defaultKeyboard() - } - - const kbHelpLink = document.querySelector('#kbHelpdocLink') - kbHelpLink.addEventListener('click', (e) => { - kbConfigMenu('help', '', data.helpLink) - }) - }) - triggerKbCount(selectedKbList) -} - -// Keyboard count for Keyboard selection menu -function triggerKbCount(selectedKbList) { - const kbSelectedLength = selectedKbList.length - const keyboardSelectionButton = document.querySelector('#keyboardSelectionButton') - const keyboardCount = document.querySelector('#kbCount') - - if (kbSelectedLength >= 1) { - keyboardCount.classList.remove('fa-caret-right') - keyboardCount.textContent = `${kbSelectedLength}` - keyboardSelectionButton.classList.add('btn-keyman-orange') - keyboardSelectionButton.classList.remove('btn-secondary') - } else { - keyboardCount.classList.add('fa-caret-right') - keyboardCount.textContent = '' - keyboardSelectionButton.classList.remove('btn-keyman-orange') - keyboardSelectionButton.classList.add('btn-secondary') - } -} - -// Keyboard count default for Keyboard selection menu -function resetKbSelectionMenu() { - const keyboardSelection = document.querySelector("#keyboardSelection") - - const kbDivHeader = document.createElement('div') - kbDivHeader.textContent = "Keyboard Selection menu" - kbDivHeader.classList.add('kb-item-header') - - const kbItem = document.createElement('div') - kbItem.classList.add('.kb-item') - - const pTag = document.createElement('p') - pTag.textContent = "Open Search to get your keyboard" - - const kbDivFoot = document.createElement('div') - kbDivFoot.textContent = "US Basic Keyboard" - kbDivFoot.classList.add('kb-item-footer') - - kbItem.appendChild(pTag) - - keyboardSelection.appendChild(kbDivHeader) - keyboardSelection.appendChild(kbItem) - keyboardSelection.appendChild(kbDivFoot) -} - -// Compare and remove keyboard -function removeKbSelected(kbId) { - if(kbId) { - selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) - } -} - -// Check 6th keyboard -function confirmAndAddKb(onConfirmAdd) { - if (typeof onConfirmAdd != 'function') { - console.log("Expected the onConfirmAdd a function, instead got: " + typeof onConfirmAdd) - alert("Click on the keyboard again to enable.") - } - - const warningDialogUI = limitKbSelectionUI(() => { - onConfirmAdd() - selectedKbList.shift() - generateKbUI(selectedKbList) - }) - - document.body.appendChild(warningDialogUI) -} - -// UI for Keyboard Selected Limitation -function limitKbSelectionUI(onAccept) { - const dialogDiv = document.createElement('div') - dialogDiv.classList.add('warning-container') - - const dialogContentDiv = document.createElement('div') - dialogContentDiv.classList.add('warning-content') - - const dialogCancel = document.createElement('button') - dialogCancel.classList.add('warning-cancel-btn') - dialogCancel.setAttribute('id', 'cancelWarningBtn') - dialogCancel.textContent = 'โœ–' - dialogCancel.onclick = () => { - dialogDiv.remove() - generateKbUI(selectedKbList) - } - - const dialogImgTag = document.createElement('img') - dialogImgTag.classList.add('warning-keyman-image') - dialogImgTag.src = `/cdn/dev/img/keymanweb-mini-logo-88.png` - dialogImgTag.alt = "Keyman Logo" - - const firstKeyboard = selectedKbList[0].name - - const dialogPTag = document.createElement('p') - dialogPTag.classList.add('warning-text') - dialogPTag.innerHTML = `The keyboards selected exceeds the limitation of 5 keyboards. Click 'Allow' to remove the
    ${firstKeyboard} keyboard.` - - const dialogUlTag = document.createElement('ol') - dialogUlTag.textContent = "Your keyboards selection:" - selectedKbList.forEach((kb, index) => { - const dialogLiTag = document.createElement('li') - if (index == 0) { - const markKeyboard = document.createElement('mark') - markKeyboard.textContent = kb.name - dialogLiTag.appendChild(markKeyboard) - } else { - dialogLiTag.textContent = kb.name - } - dialogUlTag.appendChild(dialogLiTag) - - }) - - const dialogAccept = document.createElement('button') - dialogAccept.classList.add('warning-accept-btn') - dialogAccept.setAttribute('id', 'acceptWarningBtn') - dialogAccept.textContent = "Allow" - dialogAccept.onclick = () => { - dialogDiv.remove() - onAccept() - } - - dialogContentDiv.appendChild(dialogCancel) - dialogContentDiv.appendChild(dialogImgTag) - dialogContentDiv.appendChild(dialogPTag) - dialogContentDiv.appendChild(dialogUlTag) - dialogContentDiv.appendChild(dialogAccept) - - dialogDiv.appendChild(dialogContentDiv) - - return dialogDiv -} - -// Seperate list for History/Remember Search - -/* - ========================== To be continued ========================== -*/ -function addDataKb(data) { - let selectedKbData = [] - // console.log(data) - const kbInfo = { - "platformSupport": data.platformSupport, - // "monthlyDownloads": data.match.downloads, - "sourceFile": data.sourcePath, - } - selectedKbData.push(kbInfo) -} - -// End of History search - -// Keyboard selection menu's tools: help, download, and remove -function kbConfigMenu(action, id, helplink) { - if (action == "help") { - window.open(helplink, '_blank') - } - - if (action == "download") { - const downloadUrl = `https://keyman.com/keyboards/install/${id}` - window.open(downloadUrl, '_blank') - } - - if (action == "remove") { - removeKbSelected(id) - generateKbUI(selectedKbList) - triggerKbCount(selectedKbList) - } - - if (action == "info") { - const kbDetails = document.querySelector(`#keyboard-${id}-details`) - - kbDetails.addEventListener('mouseleave', () => { - kbDetails.classList.add('hidden') - }) - kbDetails.classList.remove('hidden') - } -} - -// Keyboard details for Keyboard selection menu -function displayKbDetails(data) { - const item = selectedKbList.find(kb => kb.id == data.id) - if (!item) return; - - const kbDetails = document.createElement('div') - kbDetails.classList.add('keyboard-details') - kbDetails.setAttribute('id', `keyboard-${data.id}-details`) - kbDetails.classList.add('animate__animated', 'animate__fadeIn') - kbDetails.classList.add('hidden') - - const kbDetailsHead = document.createElement('div') - kbDetailsHead.textContent = 'Keyboard Details' - kbDetailsHead.classList.add('kb-item-header') - - const kbDetailsContent = document.createElement('div') - kbDetailsContent.classList.add('keyboard-content-wrapper') - kbDetailsContent.innerHTML = ` -
      -
    • -
      -
      Name
      -
      ${item.name || "N/A"}
      -
      -
    • -
    • -
      -
      Keyboard ID
      -
      ${item.id || "N/A"}
      -
      -
    • -
    • -
      -
      Version
      -
      ${item.version || "N/A"}
      -
      -
    • -
    • -
      -
      Total downloads
      -
      ${item.totalDownloads || 0}
      -
      -
    • -
    • -
      -
      Source Path
      - -
      -
    • -
    • -
      -
      Supported Platforms
      -
      - ${platformSupport(item.platformSupport) || 'No platforms supported'} -
      -
      -
    • -
    • -
      -
      Last Updated
      -
      ${getOnlyDates(item.lastUpdated) || 0}
      -
      -
    • -
    - ` - kbDetails.appendChild(kbDetailsHead) - kbDetails.appendChild(kbDetailsContent) - - return kbDetails -} - -// Get only the YYYY-mm-dd format -function getOnlyDates(dateData) { - const finalDateData = dateData.match(/^\d{4}-\d{2}-\d{2}/) - return finalDateData -} - -// Validate URLs -function validateURL(string) { - try { - const newUrl = new URL(string) - if (newUrl.protocol === 'https:') { - return newUrl - } else { - return false - } - } catch (error) { - console.error(error) - } -} -/* - == End of Keyboard Selection menu Section == -*/ +keyman = getKeymanWeb() + +function getKeymanWeb() { + if(window.tavultesoft) { + return window.tavultesoft.keymanweb; + } + return window.keyman; +} +/* Global Variables */ +let selectedKbList = [] // Main array for the search, kb selection...etc. +let kbSearchData = [] // For History search +let kmwLang = keyman.getActiveLanguage() +let kmwKb = keyman.getActiveKeyboard() + +const clearSearchIcon = document.querySelector('#clearSearchIcon') +const magnifying = document.querySelector('#magnifyingGlassIcon') + +const elements = { + worldMapBtn: document.querySelector('#worldMap'), + kmwControls: document.querySelector('#KeymanWebControl'), + + kbSelection: document.querySelector('#keyboardSelection'), + keyboardSelectionButton: document.querySelector('#keyboardSelectionButton'), + caretRightIcon: keyboardSelectionButton.querySelector('.fa-caret-right'), + + searchBar: document.querySelector('#searchBar'), + searchInput: document.querySelector('#searchInput'), + searchDropdownMenu: document.querySelector('#searchDropdownMenu'), + searchIcons: document.querySelector('#searchIcons'), +} + +const state = { + mapIsOpen: false +} + +/* + ===================================== Default keyboard ========================================= +*/ + +function defaultKeyboard(kbdname = "basic_kbdus", languageCode = "en") { + if(!exists(kbdname, languageCode)) { + if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' + return + } + setKeyboardWithDirection(kbdname, languageCode) +} + +/* + ============================= Toggle between World Map and Search ============================== +*/ +elements.worldMapBtn?.addEventListener('click', (e) => { + e.preventDefault() + state.mapIsOpen = true + if (state.mapIsOpen == true) { + openMap() + keyman.addEventListener('keyboardchange', () => { + location.replace(`#${keyman.getActiveLanguage()},${keyman.getActiveKeyboard()}`) + updateExample(keyman.getActiveKeyboard()) + setTimeout(() => { + applyClassToKb(), 0 + }) + }) + } else { + openSearch() + } +}) + +function openSearch() { + state.mapIsOpen = false + hideEls( + elements.kmwControls, + ) + showEls( + elements.searchDropdownMenu, + elements.searchIcons + ) + + if (selectedKbList.length > 0) { + elements.caretRightIcon.textContent = selectedKbList.length + removeClass(elements.caretRightIcon, 'fa-magnifying-glass') + } else { + elements.caretRightIcon.textContent = '' + elements.caretRightIcon.classList.add('fa-caret-right') + } + + elements.searchBar.replaceChildren( + elements.searchInput, + elements.searchIcons, + elements.searchDropdownMenu + ) +} + +function openMap() { + state.mapIsOpen = true + removeClass( + elements.kmwControls, 'hidden', + elements.caretRightIcon, 'fa-caret-right' + ) + hideEls( + elements.searchDropdownMenu + ) + removeTextContent( + elements.caretRightIcon + ) + elements.keyboardSelectionButton.removeAttribute('id', 'keyboardSelectionButton') + elements.keyboardSelectionButton.setAttribute('id', 'returnToSearchButton') + elements.caretRightIcon.classList.add('fa-magnifying-glass') + elements.keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" + elements.keyboardSelectionButton.style.border = '0px' + elements.keyboardSelectionButton.classList.add('return-to-search') + elements.kbSelection.style.display = "none" + elements.searchBar.replaceChildren( + elements.kmwControls + ) +} + +function returnToSearch() { + elements.keyboardSelectionButton.removeAttribute('id', 'returnToSearchButton') + elements.keyboardSelectionButton.setAttribute('id', 'keyboardSelectionButton') + + if ((selectedKbList?.length || 0) < 1) { + elements.caretRightIcon.classList.add('fa-caret-right') + removeClass(elements.caretRightIcon, 'fa-magnifying-glass') + elements.caretRightIcon.textContent = '' + } + + elements.keyboardSelectionButton.style.backgroundColor = "" + elements.kbSelection.style.display = "block" + openSearch() +} + +function waitForElement(selector) { + return new Promise((resolve) => { + const interval = setInterval(() => { + const element = document.querySelector(selector) + if (element) { + clearInterval(interval) + resolve(element) + } + }, 100) + }) +} + +waitForElement('#returnToSearchButton').then((element) => { + element.addEventListener('click', (e) => { + e.preventDefault() + returnToSearch() + }) +}) + +waitForElement(".kmw-osk-frame").then((oskDiv) => { + document.querySelector('.keyboard-area').appendChild(oskDiv) +}) + +/* + ==================== Search Interaction =================== +*/ + +/* Search Input */ +const dropdown = new bootstrap.Dropdown(elements.searchInput, { + autoClose: 'outside' +}) + +document.addEventListener('click', (e) => { + if (!elements.searchInput.contains(e.target) && !elements.searchDropdownMenu.contains(e.target)) { + dropdown.hide() + } +}) + +elements.searchInput.addEventListener('click', (e) => { + e.stopPropagation() + // defaultKeyboard() + dropdown.show() +}) + +// Hide Dropdown Search on Mouse leave +elements.searchDropdownMenu.addEventListener('mouseleave', (e) => { + e.preventDefault() + dropdown.hide() +}) + +/* + =========================== Utility functions ============================ +*/ +function hideEls(...elements) { + return elements.every(el => el.classList.add('hidden')) +} + +function showEls(...elements) { + return elements.every(el => el.classList.remove('hidden')) +} + +function removeClass(element, className) { + return element.classList.remove(className) +} + +function removeTextContent(...elements) { + return elements.every(el => el.textContent = '') +} + +/* Elements validation */ +function exists(...elements) { + return elements.every(el => el != null) +} + +document.addEventListener('DOMContentLoaded', () => { + /* UI Behavior of the Selected Keyboard menu */ + if (exists(elements)) { + elements.keyboardSelectionButton.addEventListener('mouseenter', () => { + elements.kbSelection.classList.add('open') + }) + elements.keyboardSelectionButton.addEventListener('click', () => { + elements.kbSelection.classList.remove('open') + }) + elements.kbSelection.addEventListener('mouseleave', () => { + elements.kbSelection.classList.remove('open') + }) + } +}) + +/* + === Keyboard Execution === +*/ +const downloadBtn = document.getElementById('kbDownloadPage') +const textArea = document.getElementById('textArea') +let langExamples = []; + +function selectKb(kbdname, languageCode) { + if(!exists(kbdname, languageCode)) { + if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' + return + } + setKeyboardWithDirection(kbdname, languageCode) +} + +function setTextDirection(targetEls, dir) { + const copyBtn = document.querySelector('#copyTool') + + targetEls.dir = dir + if (dir == 'rtl') { + copyBtn.style.right = '0' + copyBtn.style.left = '10px' + } else { + copyBtn.style.right = '' + copyBtn.style.left = '' + } +} + +// Change and type keyboard +async function setKeyboardWithDirection(kbdname, languageCode) { + const kbSpan = document.querySelector('#kbSpan') + const langTag = `#${languageCode}` + let kbTag = '' + + if (kbdname.match(/Keyboard_*/)) { + kbTag = `${kbdname}` + } else { + kbTag = `Keyboard_${kbdname}` + } + + location.replace(`${langTag},${kbTag}`) + await keyman.addKeyboards(kbdname) + const kbd = keyman.getKeyboard(kbdname, languageCode) + await keyman.setActiveKeyboard(kbdname, languageCode) + + // setTimeout(() => { + // applyClassToKb(), 0 + // }) + + if(kbd) { + textArea.placeholder = `The ${kbdname} keyboard is selected. Start typing...` + kbSpan.innerHTML = `${kbdname}` + + setTextDirection(textArea, textArea.dir) + } + updateExample(kbdname) + if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname) +} + +/* Language Examples AJAX */ +async function updateExample(kbdname) { + const keymanExample = document.getElementById("example") + const exampleBox = document.getElementById("exampleBox") + + if (!keymanExample || !exampleBox) return false; + + if(kbdname == '') + { + keymanExample.textContent = `No example is available due to empty Keyboard name.` + return true; + } + + let activeLanguage = keyman.getActiveLanguage(); + + if(langExamples[activeLanguage + '_' + kbdname]) + { + keymanExample.innerHTML = langExamples[activeLanguage + '_' + kbdname]; + return true; + } + + langExamples[activeLanguage + '_' + kbdname] = 'Loading...'; + keymanExample.innerHTML = 'Loading...'; + + const link = `/prog/languageexample.php?keyboard=${kbdname}&language=${activeLanguage}`; + try { + const response = await fetch(link); + if(response.status == 200) { + const content = await response.text(); + + langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = content; + } else { + throw new Error(`Unable to retrieve content, status was ${response.status}: ${response.statusText}`); + } + } catch(e) { + langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = 'Error retrieving example: '+e.message; + throw e; + } +} + +function applyClassToKb() { + + const kbArea = document.querySelector('.keyboard-area') + if (!kbArea) return + + const apply = () => { + const child = kbArea.children + for (const c of child) { + if (!c.classList.contains('kmw-osk-frame')) { + c.classList.add('kmw-osk-frame') + c.classList.add('kmw-help-osk-frame') + } + } + } + + apply() + + // const observer = new MutationObserver(() => { + // for (const m of mutations) { + // if (m.type === 'childlist' && m.addedNodes.length) { + // apply() + // } + // } + // }) + // observer.observe(kbArea, {childList: true}) +} + +/* Search */ +const kbSearchCard = document.getElementById('kbSearchCardUI'); +let debounceTimer + +/* Pagination */ +prevBtn = document.getElementById('prevPage') +nextBtn = document.getElementById('nextPage') +pageInfo = document.getElementById('pageInfo') + +searchResultCount = document.getElementById('resultCount') +paginationCtrl = document.getElementById('paginationControls') + +let currentPage = 1 +let currentQuery = '' +let totalPage +const itemPerPage = 10 + +prevBtn.addEventListener('click', goPrevPage) +nextBtn.addEventListener('click', goNextPage) + +function updatePaginationCtrl() { + pageInfo.textContent = `${currentPage} of ${totalPage}` + nextBtn.disabled = currentPage >= totalPage + prevBtn.disabled = currentPage <= 1 +} + +function goPrevPage() { + if (currentPage > 1) { + currentPage-- + searchKeyboard(currentQuery, currentPage) + } +} + +function goNextPage() { + if (currentPage < totalPage) { + currentPage++ + searchKeyboard(currentQuery, currentPage) + } +} + +/* Click: Open Search and Display search instructions */ +elements.searchInput.addEventListener('click', function(e) { + const query = e.target.value.trim() + + defaultKeyboard() + if (query == "") { + resetSearch() + } else { + searchKeyboard(query) + } +}) + +/* Input: Search and Display keyboards */ +elements.searchInput.addEventListener('input', function(e) { + handleSearch(e.target.value) +}) + +clearSearchIcon.addEventListener('click', () => { + elements.searchInput.value = '' + handleSearch() + elements.searchInput.focus() +}) + +function handleSearch(value = "") { + currentQuery = value.trim() + currentPage = 1 + + updateSearchIcon(value) + + if (!currentQuery) { + resetSearch() + return + } + debounceSearch(currentQuery, currentPage) +} + +function resetSearch() { + paginationCtrl.style.display = 'none' + defaultSearch() +} + +function updateSearchIcon(value) { + const hasValue = value.length > 0 + magnifying.style.display = hasValue ? 'none' : 'inline' + clearSearchIcon.style.display = hasValue ? 'inline' : 'none' +} + +function debounceSearch(query, page) { + clearTimeout(debounceTimer) + if (query.length > 1) { + debounceTimer = setTimeout(() => { + searchKeyboard(query, page) + }, 300) + } +} + +/* == Section == + Search +*/ + +/* Display top downloads with search Instruction */ +async function defaultSearch() { + kbSearchCard.innerHTML = `

    Loading...

    ` + try { + let response = await fetch(`https://api.keyman.com/search/2.0?q=p:popular`) + if (!response.ok) { + throw new Error(`API request failed with status ${response.status}`) + } + + let data = await response.json() + + let mostDownloadkb = data.keyboards + + if (!mostDownloadkb || !Array.isArray(mostDownloadkb)) { + throw new Error(`Invalid API response structure`) + } + displaySearch(mostDownloadkb) + } + catch(error) { + console.error(`Error fetching ${error}`) + kbSearchCard.innerHTML = `
    No keyboards are found.
    ` + paginationCtrl.style.display = 'none' + } +} + +/* Get query and return search */ +async function searchKeyboard(query = null, page) { + kbSearchCard.innerHTML = `
    Searching ${query}...
    ` + kbSearchCard.style.display = 'block' + + let response = await fetch(`https://api.keyman.com/search/2.0?q=${encodeURIComponent(query)}&p=${page}`) + if (!response.ok) { + throw new Error(`API request failed with status ${response.status}`) + } + + searchHistory(query) + let data = await response.json() + // Found with Context: Setup pagination + if (data.context) { + totalPage = data.context.totalPages || 1; + currentPage = data.context.pageNumber || 1; + } else { + totalPage = Math.ceil(data.keyboards.length / itemPerPage); + } + + // Validate data.keyboards + let keyboardData = data.keyboards + if (!keyboardData || !Array.isArray(keyboardData)) { + throw new Error("Invalid API response structure") + } + + // Get total result + let totalFound = data.context.totalRows + + updatePaginationCtrl() + displaySearch(keyboardData, totalFound, query) +} + +/* Display items return from search */ +function displaySearch(data, total = 0, query = '') { + kbSearchCard.innerHTML = ''; + + if (!data || data.length == 0) { + kbSearchCard.innerHTML = 'No keyboards are found.' + paginationCtrl.style.display = 'none' + return + } + + if (total) { + searchResultCount.innerHTML = `${total} results` + searchResultCount.classList.remove('hidden') + } + + // Getting searched Word ready for highlight + const marked = getMarkedContext(query) + + const searchInstruction = document.querySelector('.search-instruction') + const kbHrTitle = document.querySelector('.keyboard-title') + if (!query) { + searchInstruction.classList.remove("hidden") + kbHrTitle.textContent = "Most Downloads" + } else { + searchInstruction.classList.add("hidden") + kbHrTitle.textContent = "" + } + data.forEach(kb => { + const card = searchKbCardUI(kb, marked, selectedKbList, data) + kbSearchCard.appendChild(card) + }) + paginationCtrl.style.display = 'flex'; +} + +// UI Search card +function searchKbCardUI(kb, marked = '', selectedKbList, data) { + const kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) + // Keyboard card container + let cardWrap = document.createElement('div') + cardWrap.classList.add('card-wrap') + cardWrap.setAttribute('id', 'keyboardCardWrap') + + // Keyboard header container + let cardHeader = document.createElement('div') + cardHeader.classList.add('card-header') + + const {matchFound, matchField, matchValue} = highlightSearchContext(kb, marked) + + const kbNameHeading = matchFound ? showMarkedContext(kb, matchField, matchValue) + : (() => { + const heading = document.createElement('h4') + heading.innerHTML = kb.name + return heading + }) + + // Keyboard Plus (+) icon + const kbIconPTag = document.createElement('p') + kbIconPTag.textContent = kbFoundInList ? "-" : "+" + kbIconPTag.style.fontSize = '20px' + kbIconPTag.style.cursor = 'pointer' + kbIconPTag.classList.add('kb-icon-plus') + + checkKbCardUI(kbIconPTag, cardWrap, kb) + // Keyboard ID + const kbIdPTag = document.createElement('p') + kbIdPTag.classList.add('keyboard-id') + kbIdPTag.textContent = kb.id + + // Keyboard Description + const kbDescHeading = truncateDesc(kb, matchField, marked) + + // Keyboard monthly downloads and platform support + const kbSpecs = document.createElement('div') + kbSpecs.classList.add('keyboard-specs') + + const kbDownloadHeading = document.createElement('h6') + kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` + kbDownloadHeading.classList.add('monthly-download') + + const kbPlatformSupport = document.createElement('div') + kbPlatformSupport.classList.add('platform') + kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) + + // Append children + cardHeader.appendChild(kbNameHeading) + cardHeader.appendChild(kbIconPTag) + + kbSpecs.appendChild(kbDownloadHeading) + kbSpecs.appendChild(kbPlatformSupport) + + cardWrap.appendChild(cardHeader) + cardWrap.appendChild(kbIdPTag) + cardWrap.appendChild(kbDescHeading) + cardWrap.appendChild(kbSpecs) + + // Choose keyboard to selection + kbIconPTag.onclick = (e) => { + e.stopPropagation() + addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) + textArea.focus() + selectKb() + } + // console.log("Recent:", historyKbSelection.getHistory()); + + return cardWrap +} + +// Disable or Enable search card +function checkKbCardUI(kbIconPTag, cardWrap, kb) { + // For checking if the keyboard exists in selected Kbs + let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) + if (kbFoundInList) { + cardWrap.classList.add('disabled') + } else { + cardWrap.classList.remove('disabled') + } +} + +// Highlight word searched +function getMarkedContext(query) { + let escapedTerm = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + return new RegExp(escapedTerm, 'i') +} + +// Find a match between Search Context and Language, Keyboard name, Description +function highlightSearchContext(kb, marked) { + let matchFound = false + let matchField = "" + let matchValue = "" + + // Get and find language that matches the search + for (lang in kb.languages) { + let langData = kb.languages[lang] + for (key in langData) { + const value = langData[key] + if (typeof value == "string" && marked.test(value)) { + matchFound = true + matchValue = value.replace(marked, (m) => m ? `${m}` : m) + matchField = "language" + break + } + } + if (matchFound) break + } + + // Find a match for keyboard name if language is not a match + if (!matchFound && marked.test(kb.name)) { + matchFound = true + matchValue = kb.name.replace(marked, '$&') + matchField = "keyboard" + } + + // Find a match for keyboard description if name is not a match + if (!matchFound && marked.test(kb.description)) { + matchFound = true + matchField = "description" + } + + return {matchField, matchValue, matchFound} +} + +// Display Highlighted Search Context +function showMarkedContext(kb, matchField, matchValue) { + const kbNameHeading = document.createElement('h4') + + const kbHelpLink = document.createElement('a') + kbHelpLink.href = `https://help.keyman.com/keyboard/${kb.id}` + kbHelpLink.target = '_blank' + kbHelpLink.rel = 'noopener noreferrer' + + // Display matched language + const langNameSpan = document.createElement('span') + langNameSpan.style.fontSize = "14px" + if (matchField == "language") { + langNameSpan.innerHTML = matchField == "language" ? ` (${matchValue} language)` : "" + } + + // Display matched keyboard + if (matchField == "keyboard") { + kbHelpLink.innerHTML = matchValue + } else { + kbHelpLink.textContent = kb.name + } + kbNameHeading.appendChild(kbHelpLink) + kbNameHeading.appendChild(langNameSpan) + kbNameHeading.addEventListener('click', () => { + const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) + const newURL = checkedURL + kb.id + window.open(newURL, '_blank') + }) + + return kbNameHeading +} + +// Truncated Keyboard Description +function truncateDesc(kb, matchField, marked) { + const kbDescHeading = document.createElement('h6') + kbDescHeading.classList.add("keyboard-description") + const word_limits = 90 + + let temp = document.createElement('div') + temp.innerHTML = kb.description + + let fullDesc = kb.description + let plainText = temp.textContent + let shortText = "" + + let isTruncated = false + + if (plainText.length >= word_limits) { + shortText = plainText.slice(0, word_limits) + "..." + kbDescHeading.innerHTML = shortText + isTruncated = true + } else { + kbDescHeading.innerHTML = fullDesc + isTruncated = false + } + + if (isTruncated) { + const toggleBtn = document.createElement('a') + toggleBtn.href = "#" + toggleBtn.style.marginLeft = "6px" + toggleBtn.textContent = "Show more" + + toggleBtn.addEventListener('click', e => { + e.preventDefault() + const isExpanded = toggleBtn.textContent == "Show more" + kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, (m) => m ? `${m}` : m) : fullDesc + if (matchField == 'description') { + kbDescHeading.innerHTML = isExpanded ? fullDesc.replace(marked, '$&') : shortText + } + kbDescHeading.style.color = isExpanded ? 'black' : 'gray' + toggleBtn.textContent = isExpanded ? "Show less" : "Show more" + kbDescHeading.appendChild(toggleBtn) + }) + kbDescHeading.appendChild(toggleBtn) + } + + return kbDescHeading +} + +/* + == End of Search Section == +*/ + +// Platform Support +function platformSupport(data) { + const platformMap = { + android: "Android", + desktopWeb: "Web", + ios: "iPhone and iPad", + linux: "Linux", + macos: "macOS", + mobileWeb: "Mobile web", + windows: "Windows" + } + let platformSpan = Object.entries(data) + .filter(([_, supportLevel]) => supportLevel == 'full') + .map(([platform]) => `${platformMap[platform]}`).join('') + + return platformSpan +} + +/* == Section == + Keyboard Selection Menu +*/ +function addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) { + const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') + let isSelected = selectedKbList.some(selected => selected.id == kb.id) + addDataKb(data) + // Remove keyboard + if (isSelected) { + removeKbSelected(kb.id) + kbIconPTag.textContent = '+' + generateKbUI(selectedKbList) + checkKbCardUI(kbIconPTag, cardWrap, kb) + + return + } + if(selectedKbList.length < 5) { + addKbToSelection(kb) + generateKbUI(selectedKbList) + kbIconPTag.textContent = 'โœ“' + kbIconPTag.classList.add('kb-icon-plus-animate') + + setTimeout(() => { + kbIconPTag.textContent = '-' + kbIconPTag.classList.remove('kb-icon-plus-animate') + keyboardSelectionButton.classList.remove('btn-secondary') + keyboardSelectionButton.classList.add('btn-keyman-orange') + }, 800) + + checkKbCardUI(kbIconPTag, cardWrap, kb) + return + } + confirmAndAddKb(() => { + addKbToSelection(kb) + generateKbUI(selectedKbList) + + kbIconPTag.textContent = 'โœ“' + kbIconPTag.classList.add('kb-icon-plus-animate') + + setTimeout(() => { + kbIconPTag.textContent = '-' + kbIconPTag.classList.remove('kb-icon-plus-animate') + keyboardSelectionButton.classList.remove('btn-secondary') + keyboardSelectionButton.classList.add('btn-keyman-orange') + }, 800) + checkKbCardUI(kbIconPTag, cardWrap, kb) + }) +} + +// Add keyboard for kb search and selection UI +function addKbToSelection(kb) { + const kbInfo = { + "id": kb.id, + "name": kb.name, + "version": kb.version, + "helpLink": kb.helpLink, + "platformSupport": kb.platformSupport, + "totalDownloads": kb.match.totalDownloads, + "sourcePath": kb.sourcePath, + "supportedLanguage": kb.languages, + "lastUpdated": kb.lastModifiedDate + } + // historyKbSelection.add(kbInfo) + selectedKbList.push(kbInfo) +} + +// UI for keyboard selection menu +function generateKbUI(selectedKbList) { + const keyboardSelection = document.getElementById("keyboardSelection") + keyboardSelection.innerHTML = '' + + if(selectedKbList.length < 1) { + triggerKbCount(selectedKbList) + resetKbSelectionMenu() + return + } + + const kbDivHeader = document.createElement('div') + kbDivHeader.textContent = "Keyboard Selection menu" + kbDivHeader.classList.add('kb-item-header') + + const kbDivFoot = document.createElement('div') + kbDivFoot.textContent = "US Basic Keyboard" + kbDivFoot.classList.add('kb-item-footer') + + keyboardSelection.appendChild(kbDivHeader) + + selectedKbList.forEach(data => { + const kbDiv = document.createElement('div') + kbDiv.classList.add("kb-item") + kbDiv.setAttribute('id', `${data.id}`) + + const kbName = document.createElement('span') + kbName.textContent = data.name + + const kbConfigList = document.createElement('ul') + kbConfigList.classList.add('keyboard-configs') + kbConfigList.innerHTML = ` +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • + ` + + const kbDetails = displayKbDetails(data) + + kbDiv.appendChild(kbName) + kbDiv.appendChild(kbConfigList) + kbDiv.appendChild(kbDetails) + keyboardSelection.appendChild(kbDiv) + keyboardSelection.append(kbDivFoot) + + let kbdName = data.id + let langCode = Object.keys(data.supportedLanguage)[0] || "en" + + selectKb(kbdName, langCode) + kbConfigList.addEventListener('click', (e) => { + const target = e.target + if (target.tagName == 'I' && target.dataset.action) { + const action = target.dataset.action + const id = target.dataset.id + const helpLink = target.dataset.helplink + kbConfigMenu(action, id, helpLink) + } + }) + + kbDiv.addEventListener('click', () => { + kbdName = data.id + langCode = Object.keys(data.supportedLanguage)[0] || "en" + textArea.focus() + selectKb(kbdName, langCode) + }) + + kbDivFoot.onclick = () => { + defaultKeyboard() + } + + const kbHelpLink = document.querySelector('#kbHelpdocLink') + kbHelpLink.addEventListener('click', (e) => { + kbConfigMenu('help', '', data.helpLink) + }) + }) + triggerKbCount(selectedKbList) +} + +// Keyboard count for Keyboard selection menu +function triggerKbCount(selectedKbList) { + const kbSelectedLength = selectedKbList.length + const keyboardSelectionButton = document.querySelector('#keyboardSelectionButton') + const keyboardCount = document.querySelector('#kbCount') + + if (kbSelectedLength >= 1) { + keyboardCount.classList.remove('fa-caret-right') + keyboardCount.textContent = `${kbSelectedLength}` + keyboardSelectionButton.classList.add('btn-keyman-orange') + keyboardSelectionButton.classList.remove('btn-secondary') + } else { + keyboardCount.classList.add('fa-caret-right') + keyboardCount.textContent = '' + keyboardSelectionButton.classList.remove('btn-keyman-orange') + keyboardSelectionButton.classList.add('btn-secondary') + } +} + +// Keyboard count default for Keyboard selection menu +function resetKbSelectionMenu() { + const keyboardSelection = document.querySelector("#keyboardSelection") + + const kbDivHeader = document.createElement('div') + kbDivHeader.textContent = "Keyboard Selection menu" + kbDivHeader.classList.add('kb-item-header') + + const kbItem = document.createElement('div') + kbItem.classList.add('.kb-item') + + const pTag = document.createElement('p') + pTag.textContent = "Open Search to get your keyboard" + + const kbDivFoot = document.createElement('div') + kbDivFoot.textContent = "US Basic Keyboard" + kbDivFoot.classList.add('kb-item-footer') + + kbItem.appendChild(pTag) + + keyboardSelection.appendChild(kbDivHeader) + keyboardSelection.appendChild(kbItem) + keyboardSelection.appendChild(kbDivFoot) +} + +// Compare and remove keyboard +function removeKbSelected(kbId) { + if(kbId) { + selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) + } +} + +// Check 6th keyboard +function confirmAndAddKb(onConfirmAdd) { + if (typeof onConfirmAdd != 'function') { + console.log("Expected the onConfirmAdd a function, instead got: " + typeof onConfirmAdd) + alert("Click on the keyboard again to enable.") + } + + const warningDialogUI = limitKbSelectionUI(() => { + onConfirmAdd() + selectedKbList.shift() + generateKbUI(selectedKbList) + }) + + document.body.appendChild(warningDialogUI) +} + +// UI for Keyboard Selected Limitation +function limitKbSelectionUI(onAccept) { + const dialogDiv = document.createElement('div') + dialogDiv.classList.add('warning-container') + + const dialogContentDiv = document.createElement('div') + dialogContentDiv.classList.add('warning-content') + + const dialogCancel = document.createElement('button') + dialogCancel.classList.add('warning-cancel-btn') + dialogCancel.setAttribute('id', 'cancelWarningBtn') + dialogCancel.textContent = 'โœ–' + dialogCancel.onclick = () => { + dialogDiv.remove() + generateKbUI(selectedKbList) + } + + const dialogImgTag = document.createElement('img') + dialogImgTag.classList.add('warning-keyman-image') + dialogImgTag.src = `/cdn/dev/img/keymanweb-mini-logo-88.png` + dialogImgTag.alt = "Keyman Logo" + + const firstKeyboard = selectedKbList[0].name + + const dialogPTag = document.createElement('p') + dialogPTag.classList.add('warning-text') + dialogPTag.innerHTML = `The keyboards selected exceeds the limitation of 5 keyboards. Click 'Allow' to remove the
    ${firstKeyboard} keyboard.` + + const dialogUlTag = document.createElement('ol') + dialogUlTag.textContent = "Your keyboards selection:" + selectedKbList.forEach((kb, index) => { + const dialogLiTag = document.createElement('li') + if (index == 0) { + const markKeyboard = document.createElement('mark') + markKeyboard.textContent = kb.name + dialogLiTag.appendChild(markKeyboard) + } else { + dialogLiTag.textContent = kb.name + } + dialogUlTag.appendChild(dialogLiTag) + + }) + + const dialogAccept = document.createElement('button') + dialogAccept.classList.add('warning-accept-btn') + dialogAccept.setAttribute('id', 'acceptWarningBtn') + dialogAccept.textContent = "Allow" + dialogAccept.onclick = () => { + dialogDiv.remove() + onAccept() + } + + dialogContentDiv.appendChild(dialogCancel) + dialogContentDiv.appendChild(dialogImgTag) + dialogContentDiv.appendChild(dialogPTag) + dialogContentDiv.appendChild(dialogUlTag) + dialogContentDiv.appendChild(dialogAccept) + + dialogDiv.appendChild(dialogContentDiv) + + return dialogDiv +} + +// Seperate list for History/Remember Search + +/* + ========================== To be continued ========================== +*/ +function addDataKb(data) { + let selectedKbData = [] + // console.log(data) + const kbInfo = { + "platformSupport": data.platformSupport, + // "monthlyDownloads": data.match.downloads, + "sourceFile": data.sourcePath, + } + selectedKbData.push(kbInfo) +} + +// End of History search + +// Keyboard selection menu's tools: help, download, and remove +function kbConfigMenu(action, id, helplink) { + if (action == "help") { + window.open(helplink, '_blank') + } + + if (action == "download") { + const downloadUrl = `https://keyman.com/keyboards/install/${id}` + window.open(downloadUrl, '_blank') + } + + if (action == "remove") { + removeKbSelected(id) + generateKbUI(selectedKbList) + triggerKbCount(selectedKbList) + } + + if (action == "info") { + const kbDetails = document.querySelector(`#keyboard-${id}-details`) + + kbDetails.addEventListener('mouseleave', () => { + kbDetails.classList.add('hidden') + }) + kbDetails.classList.remove('hidden') + } +} + +// Keyboard details for Keyboard selection menu +function displayKbDetails(data) { + const item = selectedKbList.find(kb => kb.id == data.id) + if (!item) return; + + const kbDetails = document.createElement('div') + kbDetails.classList.add('keyboard-details') + kbDetails.setAttribute('id', `keyboard-${data.id}-details`) + kbDetails.classList.add('animate__animated', 'animate__fadeIn') + kbDetails.classList.add('hidden') + + const kbDetailsHead = document.createElement('div') + kbDetailsHead.textContent = 'Keyboard Details' + kbDetailsHead.classList.add('kb-item-header') + + const kbDetailsContent = document.createElement('div') + kbDetailsContent.classList.add('keyboard-content-wrapper') + kbDetailsContent.innerHTML = ` +
      +
    • +
      +
      Name
      +
      ${item.name || "N/A"}
      +
      +
    • +
    • +
      +
      Keyboard ID
      +
      ${item.id || "N/A"}
      +
      +
    • +
    • +
      +
      Version
      +
      ${item.version || "N/A"}
      +
      +
    • +
    • +
      +
      Total downloads
      +
      ${item.totalDownloads || 0}
      +
      +
    • +
    • +
      +
      Source Path
      + +
      +
    • +
    • +
      +
      Supported Platforms
      +
      + ${platformSupport(item.platformSupport) || 'No platforms supported'} +
      +
      +
    • +
    • +
      +
      Last Updated
      +
      ${getOnlyDates(item.lastUpdated) || 0}
      +
      +
    • +
    + ` + kbDetails.appendChild(kbDetailsHead) + kbDetails.appendChild(kbDetailsContent) + + return kbDetails +} + +// Get only the YYYY-mm-dd format +function getOnlyDates(dateData) { + const finalDateData = dateData.match(/^\d{4}-\d{2}-\d{2}/) + return finalDateData +} + +// Validate URLs +function validateURL(string) { + try { + const newUrl = new URL(string) + if (newUrl.protocol === 'https:') { + return newUrl + } else { + return false + } + } catch (error) { + console.error(error) + } +} +/* + == End of Keyboard Selection menu Section == +*/ + +/* + == Store data in localStorage to use for reload == +*/ +let appState = { + fontSize: 16, + writtenText: "", + selectedKbList: [], + enabledKb: null, + keyboardSizes: null, + textAreaSizes: null +} +const keyboardContainer = document.querySelector('.keyboard-container') +const fontSizeRange = document.querySelector('#fontSizeRange') + +function getFontSize(element) { + let theFontSize + theFontSize = parseInt(window.getComputedStyle(element).fontSize) || "16" + + return theFontSize +} + +function getSelectedKb() { + return selectedKbList || [] +} + +function getEnabledKb() { + let hash = location.hash.match(/^#(.+),(Keyboard_.+)$/i)[0] + + let kbValues = hash.replace('#', '') + kbValues = hash.split(',') + + return [hash, kbValues] +} + +function getElementsSize(element) { + const rect = element.getBoundingClientRect() + return { + height: rect.height, + width: rect.width, + positionX: rect.x, + positionY: rect.y + } +} + +function getElementValue(element) { + return element.value +} + +function setFontSize(size) { + textArea.style.fontSize = size + "px" + fontSizeRange.value = size +} + +function setWrittenText(text) { + textArea.value = text +} + +function setElementsSize(element, sizes) { + element.style.height = sizes.height + "px" + element.style.left = sizes.positionX + "px" + element.style.top = sizes.positionY + "px" +} + +function setSelectedKb(savedKbList) { + selectedKbList = savedKbList +} + +function setEnabledKb(kb) { + if (kb) { + selectKb(kb) + } +} + +function buildAppState() { + appState = { + fontSize: getFontSize(textArea), + selectedKbList: getSelectedKb(), + enabledKb: getEnabledKb(), + textAreaSizes: getElementsSize(textArea), + keyboardSizes: getElementsSize(keyboardContainer), + writtenText: getElementValue(textArea) + } + saveSettings("keymanWebState", appState) +} + +function saveSettings(key, state) { + let recentTime = new Date() + const time = 5000 // equals to An hour + let item + + // console.log("recentTime: ", recentTime) + // console.log("recentTime.getTime(): ", recentTime.getTime()) + + if (state) { + item = { + value: state, + expiry: recentTime.getTime() + time + } + } + localStorage.setItem(key, JSON.stringify(item)) +} + +function loadSettings(key) { + const raw = localStorage.getItem(key) + if (raw) { + let appState = JSON.parse(raw) + const newTime = new Date() + + console.log("newTime: ", newTime, "appState.expiry: ", appState.expiry) + console.log(newTime.getTime() > appState.expiry) + if (newTime.getTime() > appState.expiry) { + localStorage.removeItem(key) + alert("Session expired!") + return null + } + + setFontSize(appState.value.fontSize) + setWrittenText(appState.value.writtenText) + setElementsSize(textArea, appState.value.textAreaSizes) + setElementsSize(keyboardContainer, appState.value.keyboardSizes) + setSelectedKb(appState.value.selectedKbList) + setEnabledKb(appState.value.enabledKb[0]) + + generateKbUI(appState.value.selectedKbList) + console.log(appState.value.enabledKb[1][1], appState.value.enabledKb[1][0]) + // selectKb(appState.value.enabledKb[1][1], appState.value.enabledKb[1][0]) + } +} + +window.addEventListener('load', () => { + loadSettings("keymanWebState") +}) + +window.addEventListener('beforeunload', () => { + buildAppState() +}) + +window.addEventListener('storage', (e) => { + if (e.key == "keymanWebState") { + appState = JSON.parse(e.newValue) + buildAppState() + } +}) + +function searchHistory(value) { + if (kbSearchData.length < 0) { + kbSearchData.push(value) + for (i=0; i<=kbSearchData.length; i++) { + if (value != kbSearchData[i] || kbSearchData.length >= 5) { + kbSearchData.shift() + } + } + } + // console.log(kbSearchData) +} \ No newline at end of file diff --git a/cdn/dev/js/kmwlive.js b/cdn/dev/js/kmwlive.js index 54051b4..46d806b 100644 --- a/cdn/dev/js/kmwlive.js +++ b/cdn/dev/js/kmwlive.js @@ -1,471 +1,471 @@ -$.urlParam = function(name){ - var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); - if (!results) { return 0; } - return decodeURIComponent(results[1]).replace(/\+/g, ' ') || 0; -} - -function getKeymanWeb() { - if(window.tavultesoft) { - return window.tavultesoft.keymanweb; - } - return window.keyman; -} - -// -// If we detect a rewrite of /go//, remap that to the new #-based model. -// This will force a reload so the /return/ statement isn't really necessary... -// - -function setCookie(c_name,value,exdays){ - var exdate=new Date(); - exdate.setDate(exdate.getDate() + exdays); - var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); - document.cookie=c_name + "=" + c_value; -} - -var locationmatch = location.pathname.match(/^\/go\/([^/]+)\/([^/]+)/); -if(locationmatch) { - - location.href = '/#'+locationmatch[1]+',Keyboard_'+locationmatch[2]; -} - -// Perform all page-load init that is NOT dependent on KeymanWeb. -// That script may not load in time for this method. -$(document).ready(function() { - // Font size function - $( "#slider" ).slider({ - value:16, - min: 10, - max: 132, - step: 2, - slide: function( event, ui ) { - $('#message').css('font-size',ui.value); - $('#message').focus(); - } - }); - - var font = document.getElementById('font'); - var fontIncrease = document.getElementById('mobile-increase'); - var fontDecrease = document.getElementById('mobile-decrease'); - - font.addEventListener('touchstart', function(event) { - $('#mobile-font').show(); - $('#search').css('visibility','hidden'); - var r = setTimeout(function(){ - $('#mobile-font').hide(); - setTimeout(function(){ - $('#search').css('visibility','visible'); - },1000); - },3000); - var size = Number($('#mobile-font-size1').val()); - - fontIncrease.addEventListener('touchstart', function(event) { - clearInterval(r); - size = size * 1.2; - $('#mobile-font-size1').val(size); - $('textarea').css('font-size',size); - $('.keymanweb-input').css('font-size',size).focus(); - r = setTimeout(function(){ - $('#mobile-font').hide(); - setTimeout(function(){ - $('#search').css('visibility','visible'); - },600); - },2000); - }); - - fontDecrease.addEventListener('touchstart', function(event) { - clearInterval(r); - size = size / 1.2; - $('#mobile-font-size1').val(size); - $('textarea').css('font-size',size); - $('.keymanweb-input').css('font-size',size).focus(); - r = setTimeout(function(){ - $('#mobile-font').hide(); - setTimeout(function(){ - $('#search').css('visibility','visible'); - },600); - },2000); - }); - - }); - - setTimeout(function(){ - $('.kmw_button_a').click(function(){ - if ($(this).parent().attr('id') == 'kmw_btn_off') { - //$('body').removeClass('osk-always-visible'); - $('#message').blur(); - } else { - //$('body').addClass('osk-always-visible'); - } - }); - },5000); - - - /* Setup the bookmarklet */ - $('#bookmarklet div a').click( function() { - alert("Don't click this: drag it to your Bookmarks toolbar. Then you can click the '" + $(this).text() + "' bookmark on any web page to access your web keyboard on that page!") - return false; - }); - - // Detect desktop browser height and modify css - function updateSize(){ - // Set OSK size/position - p = new Object(); - - var height = $(window).height(); - var width = $(window).width(); - var appPos = $('#app').position(); - var appLeft = appPos.left; - - // We can't proceed any further if KMW hasn't loaded yet. - // No point handling resizes until that's occurred. - if(!getKeymanWeb() || !getKeymanWeb().osk) { - return; - } - - // Adjust the message box height only if a desktop browser - if(!getKeymanWeb().util.isTouchDevice()) - { - if (height <= 768) { - // Hide footer - $('footer').hide(); - $('#message').css('height', '209px'); - p['height'] = 264; - } - if(height > 768) { - $('#message').css('height', '260px'); - if (height < 820) { - p['height'] = 246; - $('footer').hide(); - }else if(height < 860){ - p['height'] = 246; - $('footer').show(); - }else{ - p['height'] = 264; - $('footer').show(); - } - } - } - p['top'] = $('#app').offset().top + $('#app').outerHeight() + 8; - p['left'] = appLeft + 15; - p['width'] = 710; - - // Update keyboard position and size - getKeymanWeb().osk.setRect(p); - } - - window.onresize = updateSize; - - //$('#example').css('height','50px'); - - /* Check for result for other modules in the query string */ - var result = $.urlParam('result'); - if(result) - { - var module = $.urlParam('module'); - var error = $.urlParam('error'); - var data = $.urlParam('data'); - if(result == 'error') - { - showError(module, error, redirectHome); - } - return; - } - - $('#search').click(function(event){ - event.preventDefault(); - if($('#search').attr('disabled') == 'disabled') return; - var newURL='https://www.google.com/search?q='+encodeURIComponent($('#message').val()); - window.open(newURL,'_blank'); - //location.href = 'http://www.google.com/search?q='+encodeURIComponent($('#message').val()); - }); - - var copy = document.getElementById('copy'); - var clipboard = new ClipboardJS(copy); - var isSupported = ClipboardJS.isSupported('copy'); - if (isSupported === false) { - $('#copy').attr('class', 'linksOff'); - $('#copy').attr('disabled', 'disabled'); - $('#copy').hide(); - } - - - clipboard.on('success', function(e) { - //console.log(e); - $('#copy').children('p').html('Copied'); - e.clearSelection(); - setTimeout(function(){ - $('#copy').children('p').html('Copy'); - },2000); - }); - - clipboard.on('error', function(e) { - //console.log(e); - $('#copy').children('p').html('Copy Failed'); - e.clearSelection(); - setTimeout(function(){ - $('#copy').children('p').html('Copy'); - },2000); - }); - - // Email subscribe form - $('.subscribe').click(function(){ - $('#mc-embedded-subscribe-form').submit(); - }); - - //Cannot detect change of content from KMW, so use a timer instead to refresh button state - //$('#message').bind("keypress keyup keydown change click focus blur", refreshButtons); - window.setInterval(refreshButtons,200); -}); - -var afterInitRun = false; -function afterInit() { - if(afterInitRun) { - return; - } - afterInitRun = true; - - // Focus on message box - if (!!$('.messageBox').length) { - getKeymanWeb().moveToElement('message'); - } - // On touch devices, this is necessary (but not sufficient) for ClipboardJS compatibility. - // Must take affect AFTER KMW has initialized. - $('#message').removeAttr('disabled'); - - getKeymanWeb().util.attachDOMEvent(window,'orientationchange', function() { - window.scrollTo(0,1); - },false); - - //getKeymanWeb().addEventListener('keyboardloaded',function(p){changeKeyboard(p['keyboardName']);}); - getKeymanWeb().addEventListener('keyboardchange',function(p){if(!pageLoading) changeKeyboard(p['internalName'],p['languageCode'],p);}); -} - -function refreshButtons() { - var len=getKMWInputLength('message'); // returns -1 for desktop page element - - if(len < 0) { - // refreshButtons runs via setInterval. It is possible for one call to persist through page reload, - // in which case the #message element is unavailable. - var message = $('#message').val(); - if(!message) { - return; - } - - len = message.length; - } - - // if message length is 0, use white SM buttons - if(len == 0) { - $('#buttons').children('div').attr('class','linksOff'); - $('#buttons div').attr('disabled', 'disabled'); - } else { - $('#buttons').children('div').attr('class','links'); - $('#buttons div').removeAttr('disabled'); - } -} - -function getKMWInputElement(id){ - var i,len; - try - { - var eList=document.getElementsByClassName('KMW_input'); - if(eList && eList.length > 0) - { - for(i=0; i
    '); - box.append($('
    ').append(message)); - $('body').append(box); - return box; -} - -var boxVisible = false; - -function showBox(module, message, callback) -{ - boxVisible = true; - var box = $('
    '); - box.append($('
    ').append(message)); - box.append($(' - 1 - - - - - - - -
    -
    -
    Keyboard Selection menu
    -
    -

    Open Search to get your keyboard

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

    No example is available for this keyboard.

    -
    -
    -
    -
    -
    - -
    - - - - - - - - + + +
    +
    +
    + + KeymanWeb.com + + + + +
    +
    +
    Keyboard Selection menu
    +
    +

    Open Search to get your keyboard

    +
    + + +
    +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    + +
    + +
    +
    + +
    +
    +

    No example is available for this keyboard.

    +
    +
    +
    +
    + +
    + + + + + + diff --git a/prog/languageexample.php b/prog/languageexample.php index 8340ee9..4e687cc 100644 --- a/prog/languageexample.php +++ b/prog/languageexample.php @@ -1,57 +1,57 @@ -help_keyman_com; - $morehelp = - " "; - return $morehelp; - } - - if($data !== FALSE) { - echo $data; - } else { - echo "No example is available"; - } - - // echo renderHelpIcon($keyboard, $language); -?> +help_keyman_com; + $morehelp = + " "; + return $morehelp; + } + + if($data !== FALSE) { + echo $data; + } else { + echo "No example is available"; + } + + // echo renderHelpIcon($keyboard, $language); +?> diff --git a/prog/renderLanguageExample.php b/prog/renderLanguageExample.php index 1a0d9b3..a1ccd87 100644 --- a/prog/renderLanguageExample.php +++ b/prog/renderLanguageExample.php @@ -1,296 +1,296 @@ -SERVER_api_keyman_com . "/keyboard/" . rawurlencode($keyboard); - $json = @file_get_contents($string); - if($json === FALSE) { - return FALSE; - } - - $obj = @json_decode($json, true); - if($obj === NULL) { - return FALSE; - } - - if(!isset($obj['languages'][$language])) { - return false; - } - - $lang = $obj['languages'][$language]; - - if(isset($lang['examples'])) { - $result = DisplayExamples($lang['examples'], $language); - } else if(isset($lang['example'])) { - $result = DisplayExample($lang['example'], false, $language); - } else { - $result = FALSE; - } - - return $result ? ("Example: " . $result) : FALSE; - } - - function DisplayExample($x, $table = false, $language = '') - { - global $morehelp; - $result = ''; - - if(is_array($x)) - { - $keys = KeyRenderer::renderInternal($x['keys'], $table); - $out = $x['text']; - if(isset($x['note'])) $note = " ({$x['note']})"; else $note = ''; - - if($table) - $result .= "$out{$x['note']}$keys"; - else - $result .= - "To enter ". - "$out$note, ". - "type  ". - "$keys$morehelp"; - //" to get "; - //if(isset($x['note'])) echo " ({$x['note']})"; - //echo " $morehelp"; - } - else if(!$table) - $result .= "$x $morehelp"; - return $result; - } - - class KeyRenderer - { - public static function render($s) - { - return "".KeyRenderer::renderInternal($s, true).""; - } - - public static function renderInternal($s, $table = false) - { - $spkey = array("pgup","pgdn","left","right","up","down","ins","del","home","end","enter","tab","esc","caps","bksp","shift","ctrl","alt"); - $spkey2 = array("shift","ctrl","alt"); - - $i = 0; - $r = ''; - while($i < strlen($s)) - { - $endspan = false; - $ch = $s[$i]; - if($ch == '[' && $i < strlen($s)-1) - { - $i++; $ch = $s[$i]; - if($ch == '[') - { - $t = $ch; - } - else if($ch != '[') - { - /* Ctrl+Shift+Alt+key */ - $t = $ch; $i++; - while($i < strlen($s) && $s[$i] != ']') - { - $t .= $s[$i]; - $i++; - } - $ch = $t[strlen($t)-1]; $t1 = $t; - $t = substr($t, 0, strlen($t)-1); - $r .= ""; - - /* Special keys */ - $x = strpos($t1,'!'); $u = ""; - if($x !== FALSE) - { - $ks = strtolower(substr($t1,$x+1,strlen($t1)-$x-1)); - if(array_search($ks,$spkey) !== FALSE) - { - $u = $ks; - $kn = $ks; - if(array_search($ks,$spkey2) !== FALSE) $kn .= "2"; - $u = "" . $ks . ""; - $t = substr($t,0,$x); $ch = ''; - } - } - - if(strpos($t, 'C') !== FALSE) $r .= "Ctrl"; - if(strpos($t, 'S') !== FALSE) $r .= "Shift"; - if(strpos($t, 'A') !== FALSE) $r .= "Alt"; - $r .= $u; - $endspan = true; - } - } - if($ch <> '') - { - $chv = ord($ch); - $r .= "".htmlentities($ch, ENT_QUOTES).""; - } - if($endspan) $r .= ""; - $i++; - } - - if($table) - { - $r .= ""; - $i = 0; - while($i < strlen($s)) - { - $endspan = false; - $ch = $s[$i]; - if($ch == '[' && $i < strlen($s)-1) - { - $i++; $ch = $s[$i]; - $t = $ch; - if($ch != '[') - { - /* Ctrl+Shift+Alt+key */ - $i++; - while($i < strlen($s) && $s[$i] != ']') - { - $t .= $s[$i]; - $i++; - } - $ch = $t[strlen($t)-1]; $t1 = $t; - $t = substr($t, 0, strlen($t)-1); - $r .= ""; - - /* Special keys */ - $x = strpos($t1,'!'); $u = ""; - if($x !== FALSE) - { - $kn = substr($t1,$x+1,strlen($t1)-$x-1); - $ks = strtolower($kn); - if(array_search($ks,$spkey) !== FALSE) - { - $u = $kn; - $t = substr($t,0,$x); $ch = ''; - } - } - if(strpos($t, 'C') !== FALSE) $r .= "Ctrl+"; - if(strpos($t, 'S') !== FALSE) $r .= "Shift+"; - if(strpos($t, 'A') !== FALSE) $r .= "Alt+"; - $r .= $u; - $endspan = true; - } - } - - if($ch == ' ') $r .= "Space"; else if($ch <> '') $r .= htmlentities($ch, ENT_QUOTES); - if($endspan) $r .= " "; - $i++; - } - $r .= ""; - } - - return $r; - } - } - - $keyRenderer = new KeyRenderer(); // Can also be used statically - - //------------------------------------------------------------------------------------------ - - /** - * Render language example from kps 17.0 format examples - * - * Key format (from kmp-json-file.ts): - * - * A space-separated list of keys. - * - modifiers indicated with "+" - * - spacebar is "space" - * - plus key is "shift+=" or "plus" on US English (all other punctuation as per key cap). - * - Hardware modifiers are: "shift", "ctrl", "alt", "left-ctrl", - * "right-ctrl", "left-alt", "right-alt" - * - Key caps should generally be their character for desktop (Latin script - * case insensitive), or the actual key cap for touch - * - Caps Lock should be indicated with "caps-on", "caps-off" - * - * e.g. "shift+a b right-alt+c space plus z z z" represents something like: "Ab{AltGr+C} +zzz" - */ - function RenderExamplesKeys($keys) { - $modifiers = [ - 'left-alt' => 'Left Alt', - 'right-alt' => 'Right Alt', - 'left-ctrl' => 'Left Ctrl', - 'left-control' => 'Left Ctrl', - 'right-ctrl' => 'Right Ctrl', - 'right-control' => 'Right Ctrl', - 'shift' => 'Shift', - 'ctrl' => 'Ctrl', - 'control' => 'Ctrl', - 'alt' => 'Alt', - 'caps-on' => 'Caps (on)', - 'caps-off' => 'Caps (off)', - ]; - - // space separated - $keys = explode(' ', $keys); - foreach($keys as $chord) { - if(empty($chord)) { - continue; - } - $chord = explode('+', $chord); - $chord_keys = []; - foreach($chord as $key) { - $class=''; - $bkey = strtolower($key); - if($bkey == 'space') { - $key = ' '; $class=' class="space"'; - } else if($bkey == 'plus') { - $key = '+'; - } else if(array_key_exists($bkey, $modifiers)) { - $key = $modifiers[$bkey]; - $class=' class="modifier"'; - } else { - $key = htmlspecialchars($key); - } - array_push($chord_keys, "$key"); - } - $result .= implode('+', $chord_keys) . " "; - } - return trim($result); - } - - function DisplayExamples($examples, $language = '') - { - global $morehelp; - $result = ''; - - if(!is_array($examples) || count($examples) == 0) { - return FALSE; - } - - $example = $examples[0]; - if(empty($example['keys'])) { - return FALSE; - } - - $keys = RenderExamplesKeys($example['keys']); - $out = htmlspecialchars($example['text']); - $note = isset($example['note']) ? " (" . htmlspecialchars($example['note']) . ")" : ""; - - $result .= - "To enter ". - "$out$note, ". - "type  ". - "$keys$morehelp"; - - return $result; - } +SERVER_api_keyman_com . "/keyboard/" . rawurlencode($keyboard); + $json = @file_get_contents($string); + if($json === FALSE) { + return FALSE; + } + + $obj = @json_decode($json, true); + if($obj === NULL) { + return FALSE; + } + + if(!isset($obj['languages'][$language])) { + return false; + } + + $lang = $obj['languages'][$language]; + + if(isset($lang['examples'])) { + $result = DisplayExamples($lang['examples'], $language); + } else if(isset($lang['example'])) { + $result = DisplayExample($lang['example'], false, $language); + } else { + $result = FALSE; + } + + return $result ? ("Example: " . $result) : FALSE; + } + + function DisplayExample($x, $table = false, $language = '') + { + global $morehelp; + $result = ''; + + if(is_array($x)) + { + $keys = KeyRenderer::renderInternal($x['keys'], $table); + $out = $x['text']; + if(isset($x['note'])) $note = " ({$x['note']})"; else $note = ''; + + if($table) + $result .= "$out{$x['note']}$keys"; + else + $result .= + "To enter ". + "$out$note, ". + "type  ". + "$keys$morehelp"; + //" to get "; + //if(isset($x['note'])) echo " ({$x['note']})"; + //echo " $morehelp"; + } + else if(!$table) + $result .= "$x $morehelp"; + return $result; + } + + class KeyRenderer + { + public static function render($s) + { + return "".KeyRenderer::renderInternal($s, true).""; + } + + public static function renderInternal($s, $table = false) + { + $spkey = array("pgup","pgdn","left","right","up","down","ins","del","home","end","enter","tab","esc","caps","bksp","shift","ctrl","alt"); + $spkey2 = array("shift","ctrl","alt"); + + $i = 0; + $r = ''; + while($i < strlen($s)) + { + $endspan = false; + $ch = $s[$i]; + if($ch == '[' && $i < strlen($s)-1) + { + $i++; $ch = $s[$i]; + if($ch == '[') + { + $t = $ch; + } + else if($ch != '[') + { + /* Ctrl+Shift+Alt+key */ + $t = $ch; $i++; + while($i < strlen($s) && $s[$i] != ']') + { + $t .= $s[$i]; + $i++; + } + $ch = $t[strlen($t)-1]; $t1 = $t; + $t = substr($t, 0, strlen($t)-1); + $r .= ""; + + /* Special keys */ + $x = strpos($t1,'!'); $u = ""; + if($x !== FALSE) + { + $ks = strtolower(substr($t1,$x+1,strlen($t1)-$x-1)); + if(array_search($ks,$spkey) !== FALSE) + { + $u = $ks; + $kn = $ks; + if(array_search($ks,$spkey2) !== FALSE) $kn .= "2"; + $u = "" . $ks . ""; + $t = substr($t,0,$x); $ch = ''; + } + } + + if(strpos($t, 'C') !== FALSE) $r .= "Ctrl"; + if(strpos($t, 'S') !== FALSE) $r .= "Shift"; + if(strpos($t, 'A') !== FALSE) $r .= "Alt"; + $r .= $u; + $endspan = true; + } + } + if($ch <> '') + { + $chv = ord($ch); + $r .= "".htmlentities($ch, ENT_QUOTES).""; + } + if($endspan) $r .= ""; + $i++; + } + + if($table) + { + $r .= ""; + $i = 0; + while($i < strlen($s)) + { + $endspan = false; + $ch = $s[$i]; + if($ch == '[' && $i < strlen($s)-1) + { + $i++; $ch = $s[$i]; + $t = $ch; + if($ch != '[') + { + /* Ctrl+Shift+Alt+key */ + $i++; + while($i < strlen($s) && $s[$i] != ']') + { + $t .= $s[$i]; + $i++; + } + $ch = $t[strlen($t)-1]; $t1 = $t; + $t = substr($t, 0, strlen($t)-1); + $r .= ""; + + /* Special keys */ + $x = strpos($t1,'!'); $u = ""; + if($x !== FALSE) + { + $kn = substr($t1,$x+1,strlen($t1)-$x-1); + $ks = strtolower($kn); + if(array_search($ks,$spkey) !== FALSE) + { + $u = $kn; + $t = substr($t,0,$x); $ch = ''; + } + } + if(strpos($t, 'C') !== FALSE) $r .= "Ctrl+"; + if(strpos($t, 'S') !== FALSE) $r .= "Shift+"; + if(strpos($t, 'A') !== FALSE) $r .= "Alt+"; + $r .= $u; + $endspan = true; + } + } + + if($ch == ' ') $r .= "Space"; else if($ch <> '') $r .= htmlentities($ch, ENT_QUOTES); + if($endspan) $r .= " "; + $i++; + } + $r .= ""; + } + + return $r; + } + } + + $keyRenderer = new KeyRenderer(); // Can also be used statically + + //------------------------------------------------------------------------------------------ + + /** + * Render language example from kps 17.0 format examples + * + * Key format (from kmp-json-file.ts): + * + * A space-separated list of keys. + * - modifiers indicated with "+" + * - spacebar is "space" + * - plus key is "shift+=" or "plus" on US English (all other punctuation as per key cap). + * - Hardware modifiers are: "shift", "ctrl", "alt", "left-ctrl", + * "right-ctrl", "left-alt", "right-alt" + * - Key caps should generally be their character for desktop (Latin script + * case insensitive), or the actual key cap for touch + * - Caps Lock should be indicated with "caps-on", "caps-off" + * + * e.g. "shift+a b right-alt+c space plus z z z" represents something like: "Ab{AltGr+C} +zzz" + */ + function RenderExamplesKeys($keys) { + $modifiers = [ + 'left-alt' => 'Left Alt', + 'right-alt' => 'Right Alt', + 'left-ctrl' => 'Left Ctrl', + 'left-control' => 'Left Ctrl', + 'right-ctrl' => 'Right Ctrl', + 'right-control' => 'Right Ctrl', + 'shift' => 'Shift', + 'ctrl' => 'Ctrl', + 'control' => 'Ctrl', + 'alt' => 'Alt', + 'caps-on' => 'Caps (on)', + 'caps-off' => 'Caps (off)', + ]; + + // space separated + $keys = explode(' ', $keys); + foreach($keys as $chord) { + if(empty($chord)) { + continue; + } + $chord = explode('+', $chord); + $chord_keys = []; + foreach($chord as $key) { + $class=''; + $bkey = strtolower($key); + if($bkey == 'space') { + $key = ' '; $class=' class="space"'; + } else if($bkey == 'plus') { + $key = '+'; + } else if(array_key_exists($bkey, $modifiers)) { + $key = $modifiers[$bkey]; + $class=' class="modifier"'; + } else { + $key = htmlspecialchars($key); + } + array_push($chord_keys, "$key"); + } + $result .= implode('+', $chord_keys) . " "; + } + return trim($result); + } + + function DisplayExamples($examples, $language = '') + { + global $morehelp; + $result = ''; + + if(!is_array($examples) || count($examples) == 0) { + return FALSE; + } + + $example = $examples[0]; + if(empty($example['keys'])) { + return FALSE; + } + + $keys = RenderExamplesKeys($example['keys']); + $out = htmlspecialchars($example['text']); + $note = isset($example['note']) ? " (" . htmlspecialchars($example['note']) . ")" : ""; + + $result .= + "To enter ". + "$out$note, ". + "type  ". + "$keys$morehelp"; + + return $result; + } From 28d4ba080b7abf58fcd58e8a9c1188d847a7f9d4 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 11:04:57 +0700 Subject: [PATCH 22/38] chore" remove `resources/.bootstrap-registry` --- resources/.bootstrap-registry | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 resources/.bootstrap-registry diff --git a/resources/.bootstrap-registry b/resources/.bootstrap-registry deleted file mode 100644 index 53924c3..0000000 --- a/resources/.bootstrap-registry +++ /dev/null @@ -1,22 +0,0 @@ -assets/img/gfm-limits-1.png assets/img/gfm-limits-1.324a4970ffdfdfb8e66e63df5d9d79d1725793c3.png -assets/img/gfm-limits-2.png assets/img/gfm-limits-2.3974f1a1df6cecf9a2b792fafa21f190214639f2.png -assets/img/gfm-limits-3.png assets/img/gfm-limits-3.4b6a74bee45225808fafb33733b171b917bef90b.png -assets/img/gfm-limits-4.png assets/img/gfm-limits-4.f871c142a8f9e023bb34cc656c0f67ef4e15e555.png -assets/img/gfmalerts.png assets/img/gfmalerts.1da0d82845f3f5d43dcbe509f1bdee3926b176e5.png -assets/js/sentry.js assets/js/sentry.98285d6b1fd4b5238be42da594ef71901b5d9217.js -assets/sil-logos-2024/sil-logo-abbysinica.png assets/sil-logos-2024/sil-logo-abbysinica.f1b63893af9963b15b643b033ae522b52f28134b.png -assets/sil-logos-2024/sil-logo-andika-v1.png assets/sil-logos-2024/sil-logo-andika-v1.e53568611d3460322856840078f18d507c7832a6.png -assets/sil-logos-2024/sil-logo-andika-v2.png assets/sil-logos-2024/sil-logo-andika-v2.d93c755ddb2056b304d6f8be5adff568ea86c00d.png -assets/sil-logos-2024/sil-logo-annapurna.png assets/sil-logos-2024/sil-logo-annapurna.c85665d2aa7ed9dd919a5f6044336a13d17e0c2a.png -assets/sil-logos-2024/sil-logo-tai-heritage-pro.png assets/sil-logos-2024/sil-logo-tai-heritage-pro.0cd269e5adefc991b75d32cb359c23b2fe10cc03.png -Assets.php -builder.inc.sh -docker.inc.sh -GFMAlerts.php -ImageRandomizer.php -JsonApiFailure.php -keyman-local-ports.inc.sh -KeymanHosts.php -KeymanSentry.php -KeymanVersion.php -MarkdownHost.php From 6ef0acafb99984899f9df8cde361ccd979bece7e Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 12:27:53 +0700 Subject: [PATCH 23/38] Revert "feat: introduce and start devices styling, apply drag between kb and textarea, and more (note-to-self: these features are not finished but require this commit because of switching to macos)" This reverts commit ed07a5a5d4b0ef0448ab3be626aed913ca8e34fb. --- .github/multi-labeler.yml | 86 ++++----- .github/workflows/add-to-keyman-project.yml | 38 ++-- .github/workflows/ci.yml | 146 +++++++-------- .github/workflows/labeler.yml | 30 ++-- .gitignore | 28 +-- .htaccess | 94 +++++----- _includes/2020/WebKeymanComSentry.php | 40 ++--- _includes/autoload.php | 48 ++--- inc/servervars.php | 188 ++++++++++---------- 9 files changed, 349 insertions(+), 349 deletions(-) diff --git a/.github/multi-labeler.yml b/.github/multi-labeler.yml index 95ad40b..a8d5e25 100644 --- a/.github/multi-labeler.yml +++ b/.github/multi-labeler.yml @@ -1,43 +1,43 @@ -version: v1 - -# This file adds labels based on the scopes in -# keymanapp/keyman:resources/scopes/commit-types.json -# Currently it must be manually kept up to date. Not all labels are added, only -# common ones. The others are commented out. - - -labels: - # - # conventional commit / semantic PR styles - # - - - label: 'auto' - matcher: - title: '^auto(\(|:)' - - label: 'change' - matcher: - title: '^change(\(|:)' - - label: 'chore' - matcher: - title: '^chore(\(|:)' - - label: 'docs' - matcher: - title: '^docs(\(|:)' - - label: 'feat' - matcher: - title: '^feat(\(|:)' - - label: 'fix' - matcher: - title: '^fix(\(|:)' - - label: 'maint' - matcher: - title: '^maint(\(|:)' - - label: 'refactor' - matcher: - title: '^refactor(\(|:)' - - label: 'style' - matcher: - title: '^style(\(|:)' - - label: 'test' - matcher: - title: '^test(\(|:)' +version: v1 + +# This file adds labels based on the scopes in +# keymanapp/keyman:resources/scopes/commit-types.json +# Currently it must be manually kept up to date. Not all labels are added, only +# common ones. The others are commented out. + + +labels: + # + # conventional commit / semantic PR styles + # + + - label: 'auto' + matcher: + title: '^auto(\(|:)' + - label: 'change' + matcher: + title: '^change(\(|:)' + - label: 'chore' + matcher: + title: '^chore(\(|:)' + - label: 'docs' + matcher: + title: '^docs(\(|:)' + - label: 'feat' + matcher: + title: '^feat(\(|:)' + - label: 'fix' + matcher: + title: '^fix(\(|:)' + - label: 'maint' + matcher: + title: '^maint(\(|:)' + - label: 'refactor' + matcher: + title: '^refactor(\(|:)' + - label: 'style' + matcher: + title: '^style(\(|:)' + - label: 'test' + matcher: + title: '^test(\(|:)' diff --git a/.github/workflows/add-to-keyman-project.yml b/.github/workflows/add-to-keyman-project.yml index b8c5b74..c55d0b2 100644 --- a/.github/workflows/add-to-keyman-project.yml +++ b/.github/workflows/add-to-keyman-project.yml @@ -1,19 +1,19 @@ -name: Add new issues and pull requests to projects - -on: - pull_request: - types: - - opened - issues: - types: - - opened - -jobs: - add-to-project: - name: Add new issues and pull requests to project - runs-on: ubuntu-latest - steps: - - uses: actions/add-to-project@v1.0.2 - with: - project-url: https://github.com/orgs/keymanapp/projects/1 - github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} +name: Add new issues and pull requests to projects + +on: + pull_request: + types: + - opened + issues: + types: + - opened + +jobs: + add-to-project: + name: Add new issues and pull requests to project + runs-on: ubuntu-latest + steps: + - uses: actions/add-to-project@v1.0.2 + with: + project-url: https://github.com/orgs/keymanapp/projects/1 + github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f4abad..3f53696 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,73 +1,73 @@ -name: CI - -on: [pull_request] - -jobs: - - build-test: - runs-on: ubuntu-latest - env: - KEYMANHOSTS_TIER: TIER_TEST - # Composer started complaining about running as root, but we don't care in a GHA - COMPOSER_ALLOW_SUPERUSER: 1 - - steps: - - name: Checkout - uses: actions/checkout@v3.5.2 - - # Build the docker image and create link to vendor/ dependencies - - name: Build the Docker image - shell: bash - run: | - echo "TIER_TEST" > tier.txt - ./build.sh configure build start - env: - fail-fast: true - - # - # Finally, run the tests; note that this is almost all replicated in build.sh; here logging is reduced (TODO sync) - # - - name: PHP unit tests - shell: bash - run: | - docker exec web-keyman-com-app sh -c "vendor/bin/phpunit --testdox" - - - name: Lint - shell: bash - run: | - ( set +e; set +o pipefail; find . -name '*.php' | grep -v '/vendor/' | xargs -n 1 -d '\n' php -l | grep -v "No syntax errors detected"; exit ${PIPESTATUS[2]} ) - - - name: Check broken links - shell: bash - run: | - set +e; - set +o pipefail; - npx broken-link-checker http://localhost:8057 --ordered --recursive --requests 50 --host-requests 50 -e --filter-level 3 | \ - grep -E "BROKEN|Getting links from" | \ - grep -B 1 "BROKEN" - exit ${PIPESTATUS[0]} - - - name: Check PHP errors - shell: bash - run: | - CONTAINER=`docker container ls -l -q` - if docker container logs $CONTAINER 2>&1 | grep -q 'php7'; then - echo 'PHP reported errors or warnings:' - docker container logs $CONTAINER 2>&1 | grep 'php7' - exit 1 - else - echo 'No PHP errors found' - exit 0 - fi - # - # If any of the tests fail, let's grab a bit more detail on the environment - # - - name: Report errors - if: ${{ failure() }} - shell: bash - run: | - CONTAINER=`docker container ls -l -q` - echo "--- tier.txt ---" - cat tier.txt - echo "--- PHP errors in Docker log ---" - docker container logs $CONTAINER 2>&1 | grep 'php7' +name: CI + +on: [pull_request] + +jobs: + + build-test: + runs-on: ubuntu-latest + env: + KEYMANHOSTS_TIER: TIER_TEST + # Composer started complaining about running as root, but we don't care in a GHA + COMPOSER_ALLOW_SUPERUSER: 1 + + steps: + - name: Checkout + uses: actions/checkout@v3.5.2 + + # Build the docker image and create link to vendor/ dependencies + - name: Build the Docker image + shell: bash + run: | + echo "TIER_TEST" > tier.txt + ./build.sh configure build start + env: + fail-fast: true + + # + # Finally, run the tests; note that this is almost all replicated in build.sh; here logging is reduced (TODO sync) + # + - name: PHP unit tests + shell: bash + run: | + docker exec web-keyman-com-app sh -c "vendor/bin/phpunit --testdox" + + - name: Lint + shell: bash + run: | + ( set +e; set +o pipefail; find . -name '*.php' | grep -v '/vendor/' | xargs -n 1 -d '\n' php -l | grep -v "No syntax errors detected"; exit ${PIPESTATUS[2]} ) + + - name: Check broken links + shell: bash + run: | + set +e; + set +o pipefail; + npx broken-link-checker http://localhost:8057 --ordered --recursive --requests 50 --host-requests 50 -e --filter-level 3 | \ + grep -E "BROKEN|Getting links from" | \ + grep -B 1 "BROKEN" + exit ${PIPESTATUS[0]} + + - name: Check PHP errors + shell: bash + run: | + CONTAINER=`docker container ls -l -q` + if docker container logs $CONTAINER 2>&1 | grep -q 'php7'; then + echo 'PHP reported errors or warnings:' + docker container logs $CONTAINER 2>&1 | grep 'php7' + exit 1 + else + echo 'No PHP errors found' + exit 0 + fi + # + # If any of the tests fail, let's grab a bit more detail on the environment + # + - name: Report errors + if: ${{ failure() }} + shell: bash + run: | + CONTAINER=`docker container ls -l -q` + echo "--- tier.txt ---" + cat tier.txt + echo "--- PHP errors in Docker log ---" + docker container logs $CONTAINER 2>&1 | grep 'php7' diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 99a60dd..f0d4218 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -1,15 +1,15 @@ -name: "Pull Request Labeler" -on: -- pull_request - -jobs: - triage: - if: github.repository == 'keymanapp/keymanweb.com' - runs-on: ubuntu-latest - steps: - - name: Update labels based on PR title - id: labeler - uses: fuxingloh/multi-labeler@f5bd7323b53b0833c1e4ed8d7b797ae995ef75b4 # v2.0.1 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - config-path: .github/multi-labeler.yml +name: "Pull Request Labeler" +on: +- pull_request + +jobs: + triage: + if: github.repository == 'keymanapp/keymanweb.com' + runs-on: ubuntu-latest + steps: + - name: Update labels based on PR title + id: labeler + uses: fuxingloh/multi-labeler@f5bd7323b53b0833c1e4ed8d7b797ae995ef75b4 # v2.0.1 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + config-path: .github/multi-labeler.yml diff --git a/.gitignore b/.gitignore index bb83a5b..bbdab99 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,14 @@ -.idea/** -cdn/deploy - -/vendor -.data/ - -# Shared files are bootstrapped: -resources/bootstrap.inc.sh -resources/.bootstrap-version -resources/.bootstrap-registry -_common/ - -# State files -_control/debug +.idea/** +cdn/deploy + +/vendor +.data/ + +# Shared files are bootstrapped: +resources/bootstrap.inc.sh +resources/.bootstrap-version +resources/.bootstrap-registry +_common/ + +# State files +_control/debug diff --git a/.htaccess b/.htaccess index ad75644..3605a73 100644 --- a/.htaccess +++ b/.htaccess @@ -1,47 +1,47 @@ - -php_value display_errors off -php_value display_startup_errors off - - - php_value display_startup_errors on - php_value display_errors stderr - - - - - Header set Access-Control-Allow-Origin "*" - - - AddType font/ttf .ttf - AddType application/javascript .js - - AddCharset UTF-8 .js - - - RewriteEngine on - RewriteBase / - - - -# Keymanweb.com 2.0 rewrite rules for Keymanweb.com 1.0 /go/lang/kbd urls - -# Rewrite /go/lang/kbd/app[?...] to /?kmwlang=lang,kmwkbd=kbd -RewriteRule "^go/([^/]+)/([^/]+)/([^?]+)(\?)?(.+)?$" "/index.php?kmwlang=$1&kmwkbd=Keyboard_$2&$5" - -# Rewrite /go/lang/kbd[?...] to /?kmwlang=lang,kmwkbd=kbd -RewriteRule "^go/([^/]+)/([^?]+)(\?)?(.+)?$" "/index.php?kmwlang=$1&kmwkbd=Keyboard_$2&$4" - -# Keymanweb.com 2.0 rewrite rules for Keymanweb.com 1.0 /lang/app.php urls - -# Redirect /lang/app?kmwlang=lang,kmwkbd=kbd to /?kmwlang=lang,kmwkbd=kbd -RedirectMatch "^../[^?]+?kmwlang=(.+)&kmwkbd=(.+)(&(.+))?$" "/go/$1/$2" - -# Redirect /lang/app to / -RedirectMatch "^../[^?]+$" "/" - -# Redirect /mini/* to / -RedirectMatch "^mini/" "/" - -# Control rules -RewriteRule "^_control/info$" "_control/info.php" [END] -RewriteRule "^_control/ready$" "_control/ready.php" [END] + +php_value display_errors off +php_value display_startup_errors off + + + php_value display_startup_errors on + php_value display_errors stderr + + + + + Header set Access-Control-Allow-Origin "*" + + + AddType font/ttf .ttf + AddType application/javascript .js + + AddCharset UTF-8 .js + + + RewriteEngine on + RewriteBase / + + + +# Keymanweb.com 2.0 rewrite rules for Keymanweb.com 1.0 /go/lang/kbd urls + +# Rewrite /go/lang/kbd/app[?...] to /?kmwlang=lang,kmwkbd=kbd +RewriteRule "^go/([^/]+)/([^/]+)/([^?]+)(\?)?(.+)?$" "/index.php?kmwlang=$1&kmwkbd=Keyboard_$2&$5" + +# Rewrite /go/lang/kbd[?...] to /?kmwlang=lang,kmwkbd=kbd +RewriteRule "^go/([^/]+)/([^?]+)(\?)?(.+)?$" "/index.php?kmwlang=$1&kmwkbd=Keyboard_$2&$4" + +# Keymanweb.com 2.0 rewrite rules for Keymanweb.com 1.0 /lang/app.php urls + +# Redirect /lang/app?kmwlang=lang,kmwkbd=kbd to /?kmwlang=lang,kmwkbd=kbd +RedirectMatch "^../[^?]+?kmwlang=(.+)&kmwkbd=(.+)(&(.+))?$" "/go/$1/$2" + +# Redirect /lang/app to / +RedirectMatch "^../[^?]+$" "/" + +# Redirect /mini/* to / +RedirectMatch "^mini/" "/" + +# Control rules +RewriteRule "^_control/info$" "_control/info.php" [END] +RewriteRule "^_control/ready$" "_control/ready.php" [END] diff --git a/_includes/2020/WebKeymanComSentry.php b/_includes/2020/WebKeymanComSentry.php index 8b62d8a..a898ee3 100644 --- a/_includes/2020/WebKeymanComSentry.php +++ b/_includes/2020/WebKeymanComSentry.php @@ -1,21 +1,21 @@ -TierName(); - return KeymanSentry::GetBrowserHTML(SENTRY_DSN, $tier == 'stable' ? $kmwbuild : "$kmwbuild-$tier"); - } +TierName(); + return KeymanSentry::GetBrowserHTML(SENTRY_DSN, $tier == 'stable' ? $kmwbuild : "$kmwbuild-$tier"); + } } \ No newline at end of file diff --git a/_includes/autoload.php b/_includes/autoload.php index 83cf2ef..5cfebed 100644 --- a/_includes/autoload.php +++ b/_includes/autoload.php @@ -1,24 +1,24 @@ -r_keymanweb_com; - $staticDomainRoot= KeymanHosts::Instance()->s_keyman_com; - - - function cdn($file) { - global $cdn; - $use_cdn = - KeymanHosts::Instance()->Tier() == KeymanHosts::TIER_PRODUCTION || - KeymanHosts::Instance()->Tier() == KeymanHosts::TIER_STAGING || - (isset($_REQUEST['cdn']) && $_REQUEST['cdn'] == 'force'); - if($use_cdn && $cdn && array_key_exists('/'.$file, $cdn)) { - return "/cdn/deploy{$cdn['/'.$file]}"; - } - return "/cdn/dev/{$file}"; - } - - - function get_major_version($version) { - return preg_replace('/^(\\d+)\\.(\\d+).*$/', '$1.$2', $version); - } - - // Uses official API for version checking, but is not optimized for - // version-checking against multiple release tiers. - function get_keymanweb_version($tier) { - $json = @file_get_contents(KeymanHosts::Instance()->SERVER_api_keyman_com . "/version/web/$tier"); - if($json) { - $json = json_decode($json); - } - - if($json && property_exists($json, 'version')) { - $version = $json->version; - } else { - // If the get-version API fails, we'll use the latest known version - $version = FALLBACK_KMW_VERSION; - } - return $version; - } - - function get_keymanweb_versions() { - $json = @file_get_contents(KeymanHosts::Instance()->SERVER_api_keyman_com . "/version/web/all"); - if($json) { - $json = json_decode($json); - } - - $fallback_version = FALLBACK_KMW_VERSION; - - foreach(array('alpha', 'beta', 'stable') as $tier) { - if(!$json || !property_exists($json, $tier)) { - $version_map[$tier] = $fallback_version; - } else if(version_compare($json->{$tier}, "0.0.1") < 0) { - // The version string didn't properly validate. - $version_map[$tier] = $fallback_version; - } else { - $version_map[$tier] = $json->{$tier}; - } - } - - return $version_map; - } - -?> +r_keymanweb_com; + $staticDomainRoot= KeymanHosts::Instance()->s_keyman_com; + + + function cdn($file) { + global $cdn; + $use_cdn = + KeymanHosts::Instance()->Tier() == KeymanHosts::TIER_PRODUCTION || + KeymanHosts::Instance()->Tier() == KeymanHosts::TIER_STAGING || + (isset($_REQUEST['cdn']) && $_REQUEST['cdn'] == 'force'); + if($use_cdn && $cdn && array_key_exists('/'.$file, $cdn)) { + return "/cdn/deploy{$cdn['/'.$file]}"; + } + return "/cdn/dev/{$file}"; + } + + + function get_major_version($version) { + return preg_replace('/^(\\d+)\\.(\\d+).*$/', '$1.$2', $version); + } + + // Uses official API for version checking, but is not optimized for + // version-checking against multiple release tiers. + function get_keymanweb_version($tier) { + $json = @file_get_contents(KeymanHosts::Instance()->SERVER_api_keyman_com . "/version/web/$tier"); + if($json) { + $json = json_decode($json); + } + + if($json && property_exists($json, 'version')) { + $version = $json->version; + } else { + // If the get-version API fails, we'll use the latest known version + $version = FALLBACK_KMW_VERSION; + } + return $version; + } + + function get_keymanweb_versions() { + $json = @file_get_contents(KeymanHosts::Instance()->SERVER_api_keyman_com . "/version/web/all"); + if($json) { + $json = json_decode($json); + } + + $fallback_version = FALLBACK_KMW_VERSION; + + foreach(array('alpha', 'beta', 'stable') as $tier) { + if(!$json || !property_exists($json, $tier)) { + $version_map[$tier] = $fallback_version; + } else if(version_compare($json->{$tier}, "0.0.1") < 0) { + // The version string didn't properly validate. + $version_map[$tier] = $fallback_version; + } else { + $version_map[$tier] = $json->{$tier}; + } + } + + return $version_map; + } + +?> From d12447992fd6f04ec3ff4e4f6f47dce0386305fb Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:05:40 +0700 Subject: [PATCH 24/38] chore: add files --- SPZITg5E.txt | 1 + cdn/dev/css/kmw.css | 156 ++++++++++++++++++++++---------------------- 2 files changed, 79 insertions(+), 78 deletions(-) create mode 100644 SPZITg5E.txt diff --git a/SPZITg5E.txt b/SPZITg5E.txt new file mode 100644 index 0000000..b18c597 --- /dev/null +++ b/SPZITg5E.txt @@ -0,0 +1 @@ +1c30e207-a415-417b-9ee3-a73057e3add6 \ No newline at end of file diff --git a/cdn/dev/css/kmw.css b/cdn/dev/css/kmw.css index 8e80256..02c9c07 100644 --- a/cdn/dev/css/kmw.css +++ b/cdn/dev/css/kmw.css @@ -1,78 +1,78 @@ -/* -============= -==Reset CSS== -============= -*/ -html, body, div, span, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -abbr, address, cite, code, -del, dfn, em, img, ins, kbd, q, samp, -small, strong, sub, sup, var, -b, i, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, figcaption, figure, -footer, header, hgroup, menu, nav, section, summary, -time, mark, audio, video { - margin:0; - padding:0; - border:0; - outline:0; - vertical-align:baseline; - background:transparent; - } - -a { - margin:0; - padding:0; - vertical-align:baseline; - background:transparent; - } - -article,aside,details,figcaption,figure, -section,header,footer,hgroup,menu,nav { - display:block; - } - -ins { - background-color:#ff9; - text-decoration:none; - } - -mark { - background-color:#ff9; - font-weight:bold; - } - -del { - text-decoration: line-through; - } - -abbr[title], dfn[title] { - border-bottom:1px dotted; - cursor:help; - } - -table { - border-collapse:collapse; - border-spacing:0; - } - -hr { - display:block; - height:1px; - border:0; - border-top:1px solid #cccccc; - padding:0; -} - -button, input, select { - vertical-align:middle; -} - -/* === End of CSS reset rules === */ - -ins.adsbygoogle { - display: none !important; -} +/* +============= +==Reset CSS== +============= +*/ +html, body, div, span, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +abbr, address, cite, code, +del, dfn, em, img, ins, kbd, q, samp, +small, strong, sub, sup, var, +b, i, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, figcaption, figure, +footer, header, hgroup, menu, nav, section, summary, +time, mark, audio, video { + margin:0; + padding:0; + border:0; + outline:0; + vertical-align:baseline; + background:transparent; + } + +a { + margin:0; + padding:0; + vertical-align:baseline; + background:transparent; + } + +article,aside,details,figcaption,figure, +section,header,footer,hgroup,menu,nav { + display:block; + } + +ins { + background-color:#ff9; + text-decoration:none; + } + +mark { + background-color:#ff9; + font-weight:bold; + } + +del { + text-decoration: line-through; + } + +abbr[title], dfn[title] { + border-bottom:1px dotted; + cursor:help; + } + +table { + border-collapse:collapse; + border-spacing:0; + } + +hr { + display:block; + height:1px; + border:0; + border-top:1px solid #cccccc; + padding:0; +} + +button, input, select { + vertical-align:middle; +} + +/* === End of CSS reset rules === */ + +ins.adsbygoogle { + display: none !important; +} From 8d3c477aa3003aecc70ede3fcabbd7387d719ea5 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:25:28 +0700 Subject: [PATCH 25/38] chore: add languageexample.php --- prog/languageexample.php | 114 +++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/prog/languageexample.php b/prog/languageexample.php index 4e687cc..8340ee9 100644 --- a/prog/languageexample.php +++ b/prog/languageexample.php @@ -1,57 +1,57 @@ -help_keyman_com; - $morehelp = - " "; - return $morehelp; - } - - if($data !== FALSE) { - echo $data; - } else { - echo "No example is available"; - } - - // echo renderHelpIcon($keyboard, $language); -?> +help_keyman_com; + $morehelp = + " "; + return $morehelp; + } + + if($data !== FALSE) { + echo $data; + } else { + echo "No example is available"; + } + + // echo renderHelpIcon($keyboard, $language); +?> From e732fd0df6dcc51e38f50bd6f70dd1b6e41c31d9 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:30:19 +0700 Subject: [PATCH 26/38] chore: add renderLanguageExample.php --- prog/renderLanguageExample.php | 592 ++++++++++++++++----------------- 1 file changed, 296 insertions(+), 296 deletions(-) diff --git a/prog/renderLanguageExample.php b/prog/renderLanguageExample.php index a1ccd87..1a0d9b3 100644 --- a/prog/renderLanguageExample.php +++ b/prog/renderLanguageExample.php @@ -1,296 +1,296 @@ -SERVER_api_keyman_com . "/keyboard/" . rawurlencode($keyboard); - $json = @file_get_contents($string); - if($json === FALSE) { - return FALSE; - } - - $obj = @json_decode($json, true); - if($obj === NULL) { - return FALSE; - } - - if(!isset($obj['languages'][$language])) { - return false; - } - - $lang = $obj['languages'][$language]; - - if(isset($lang['examples'])) { - $result = DisplayExamples($lang['examples'], $language); - } else if(isset($lang['example'])) { - $result = DisplayExample($lang['example'], false, $language); - } else { - $result = FALSE; - } - - return $result ? ("Example: " . $result) : FALSE; - } - - function DisplayExample($x, $table = false, $language = '') - { - global $morehelp; - $result = ''; - - if(is_array($x)) - { - $keys = KeyRenderer::renderInternal($x['keys'], $table); - $out = $x['text']; - if(isset($x['note'])) $note = " ({$x['note']})"; else $note = ''; - - if($table) - $result .= "$out{$x['note']}$keys"; - else - $result .= - "To enter ". - "$out$note, ". - "type  ". - "$keys$morehelp"; - //" to get "; - //if(isset($x['note'])) echo " ({$x['note']})"; - //echo " $morehelp"; - } - else if(!$table) - $result .= "$x $morehelp"; - return $result; - } - - class KeyRenderer - { - public static function render($s) - { - return "".KeyRenderer::renderInternal($s, true).""; - } - - public static function renderInternal($s, $table = false) - { - $spkey = array("pgup","pgdn","left","right","up","down","ins","del","home","end","enter","tab","esc","caps","bksp","shift","ctrl","alt"); - $spkey2 = array("shift","ctrl","alt"); - - $i = 0; - $r = ''; - while($i < strlen($s)) - { - $endspan = false; - $ch = $s[$i]; - if($ch == '[' && $i < strlen($s)-1) - { - $i++; $ch = $s[$i]; - if($ch == '[') - { - $t = $ch; - } - else if($ch != '[') - { - /* Ctrl+Shift+Alt+key */ - $t = $ch; $i++; - while($i < strlen($s) && $s[$i] != ']') - { - $t .= $s[$i]; - $i++; - } - $ch = $t[strlen($t)-1]; $t1 = $t; - $t = substr($t, 0, strlen($t)-1); - $r .= ""; - - /* Special keys */ - $x = strpos($t1,'!'); $u = ""; - if($x !== FALSE) - { - $ks = strtolower(substr($t1,$x+1,strlen($t1)-$x-1)); - if(array_search($ks,$spkey) !== FALSE) - { - $u = $ks; - $kn = $ks; - if(array_search($ks,$spkey2) !== FALSE) $kn .= "2"; - $u = "" . $ks . ""; - $t = substr($t,0,$x); $ch = ''; - } - } - - if(strpos($t, 'C') !== FALSE) $r .= "Ctrl"; - if(strpos($t, 'S') !== FALSE) $r .= "Shift"; - if(strpos($t, 'A') !== FALSE) $r .= "Alt"; - $r .= $u; - $endspan = true; - } - } - if($ch <> '') - { - $chv = ord($ch); - $r .= "".htmlentities($ch, ENT_QUOTES).""; - } - if($endspan) $r .= ""; - $i++; - } - - if($table) - { - $r .= ""; - $i = 0; - while($i < strlen($s)) - { - $endspan = false; - $ch = $s[$i]; - if($ch == '[' && $i < strlen($s)-1) - { - $i++; $ch = $s[$i]; - $t = $ch; - if($ch != '[') - { - /* Ctrl+Shift+Alt+key */ - $i++; - while($i < strlen($s) && $s[$i] != ']') - { - $t .= $s[$i]; - $i++; - } - $ch = $t[strlen($t)-1]; $t1 = $t; - $t = substr($t, 0, strlen($t)-1); - $r .= ""; - - /* Special keys */ - $x = strpos($t1,'!'); $u = ""; - if($x !== FALSE) - { - $kn = substr($t1,$x+1,strlen($t1)-$x-1); - $ks = strtolower($kn); - if(array_search($ks,$spkey) !== FALSE) - { - $u = $kn; - $t = substr($t,0,$x); $ch = ''; - } - } - if(strpos($t, 'C') !== FALSE) $r .= "Ctrl+"; - if(strpos($t, 'S') !== FALSE) $r .= "Shift+"; - if(strpos($t, 'A') !== FALSE) $r .= "Alt+"; - $r .= $u; - $endspan = true; - } - } - - if($ch == ' ') $r .= "Space"; else if($ch <> '') $r .= htmlentities($ch, ENT_QUOTES); - if($endspan) $r .= " "; - $i++; - } - $r .= ""; - } - - return $r; - } - } - - $keyRenderer = new KeyRenderer(); // Can also be used statically - - //------------------------------------------------------------------------------------------ - - /** - * Render language example from kps 17.0 format examples - * - * Key format (from kmp-json-file.ts): - * - * A space-separated list of keys. - * - modifiers indicated with "+" - * - spacebar is "space" - * - plus key is "shift+=" or "plus" on US English (all other punctuation as per key cap). - * - Hardware modifiers are: "shift", "ctrl", "alt", "left-ctrl", - * "right-ctrl", "left-alt", "right-alt" - * - Key caps should generally be their character for desktop (Latin script - * case insensitive), or the actual key cap for touch - * - Caps Lock should be indicated with "caps-on", "caps-off" - * - * e.g. "shift+a b right-alt+c space plus z z z" represents something like: "Ab{AltGr+C} +zzz" - */ - function RenderExamplesKeys($keys) { - $modifiers = [ - 'left-alt' => 'Left Alt', - 'right-alt' => 'Right Alt', - 'left-ctrl' => 'Left Ctrl', - 'left-control' => 'Left Ctrl', - 'right-ctrl' => 'Right Ctrl', - 'right-control' => 'Right Ctrl', - 'shift' => 'Shift', - 'ctrl' => 'Ctrl', - 'control' => 'Ctrl', - 'alt' => 'Alt', - 'caps-on' => 'Caps (on)', - 'caps-off' => 'Caps (off)', - ]; - - // space separated - $keys = explode(' ', $keys); - foreach($keys as $chord) { - if(empty($chord)) { - continue; - } - $chord = explode('+', $chord); - $chord_keys = []; - foreach($chord as $key) { - $class=''; - $bkey = strtolower($key); - if($bkey == 'space') { - $key = ' '; $class=' class="space"'; - } else if($bkey == 'plus') { - $key = '+'; - } else if(array_key_exists($bkey, $modifiers)) { - $key = $modifiers[$bkey]; - $class=' class="modifier"'; - } else { - $key = htmlspecialchars($key); - } - array_push($chord_keys, "$key"); - } - $result .= implode('+', $chord_keys) . " "; - } - return trim($result); - } - - function DisplayExamples($examples, $language = '') - { - global $morehelp; - $result = ''; - - if(!is_array($examples) || count($examples) == 0) { - return FALSE; - } - - $example = $examples[0]; - if(empty($example['keys'])) { - return FALSE; - } - - $keys = RenderExamplesKeys($example['keys']); - $out = htmlspecialchars($example['text']); - $note = isset($example['note']) ? " (" . htmlspecialchars($example['note']) . ")" : ""; - - $result .= - "To enter ". - "$out$note, ". - "type  ". - "$keys$morehelp"; - - return $result; - } +SERVER_api_keyman_com . "/keyboard/" . rawurlencode($keyboard); + $json = @file_get_contents($string); + if($json === FALSE) { + return FALSE; + } + + $obj = @json_decode($json, true); + if($obj === NULL) { + return FALSE; + } + + if(!isset($obj['languages'][$language])) { + return false; + } + + $lang = $obj['languages'][$language]; + + if(isset($lang['examples'])) { + $result = DisplayExamples($lang['examples'], $language); + } else if(isset($lang['example'])) { + $result = DisplayExample($lang['example'], false, $language); + } else { + $result = FALSE; + } + + return $result ? ("Example: " . $result) : FALSE; + } + + function DisplayExample($x, $table = false, $language = '') + { + global $morehelp; + $result = ''; + + if(is_array($x)) + { + $keys = KeyRenderer::renderInternal($x['keys'], $table); + $out = $x['text']; + if(isset($x['note'])) $note = " ({$x['note']})"; else $note = ''; + + if($table) + $result .= "$out{$x['note']}$keys"; + else + $result .= + "To enter ". + "$out$note, ". + "type  ". + "$keys$morehelp"; + //" to get "; + //if(isset($x['note'])) echo " ({$x['note']})"; + //echo " $morehelp"; + } + else if(!$table) + $result .= "$x $morehelp"; + return $result; + } + + class KeyRenderer + { + public static function render($s) + { + return "".KeyRenderer::renderInternal($s, true).""; + } + + public static function renderInternal($s, $table = false) + { + $spkey = array("pgup","pgdn","left","right","up","down","ins","del","home","end","enter","tab","esc","caps","bksp","shift","ctrl","alt"); + $spkey2 = array("shift","ctrl","alt"); + + $i = 0; + $r = ''; + while($i < strlen($s)) + { + $endspan = false; + $ch = $s[$i]; + if($ch == '[' && $i < strlen($s)-1) + { + $i++; $ch = $s[$i]; + if($ch == '[') + { + $t = $ch; + } + else if($ch != '[') + { + /* Ctrl+Shift+Alt+key */ + $t = $ch; $i++; + while($i < strlen($s) && $s[$i] != ']') + { + $t .= $s[$i]; + $i++; + } + $ch = $t[strlen($t)-1]; $t1 = $t; + $t = substr($t, 0, strlen($t)-1); + $r .= ""; + + /* Special keys */ + $x = strpos($t1,'!'); $u = ""; + if($x !== FALSE) + { + $ks = strtolower(substr($t1,$x+1,strlen($t1)-$x-1)); + if(array_search($ks,$spkey) !== FALSE) + { + $u = $ks; + $kn = $ks; + if(array_search($ks,$spkey2) !== FALSE) $kn .= "2"; + $u = "" . $ks . ""; + $t = substr($t,0,$x); $ch = ''; + } + } + + if(strpos($t, 'C') !== FALSE) $r .= "Ctrl"; + if(strpos($t, 'S') !== FALSE) $r .= "Shift"; + if(strpos($t, 'A') !== FALSE) $r .= "Alt"; + $r .= $u; + $endspan = true; + } + } + if($ch <> '') + { + $chv = ord($ch); + $r .= "".htmlentities($ch, ENT_QUOTES).""; + } + if($endspan) $r .= ""; + $i++; + } + + if($table) + { + $r .= ""; + $i = 0; + while($i < strlen($s)) + { + $endspan = false; + $ch = $s[$i]; + if($ch == '[' && $i < strlen($s)-1) + { + $i++; $ch = $s[$i]; + $t = $ch; + if($ch != '[') + { + /* Ctrl+Shift+Alt+key */ + $i++; + while($i < strlen($s) && $s[$i] != ']') + { + $t .= $s[$i]; + $i++; + } + $ch = $t[strlen($t)-1]; $t1 = $t; + $t = substr($t, 0, strlen($t)-1); + $r .= ""; + + /* Special keys */ + $x = strpos($t1,'!'); $u = ""; + if($x !== FALSE) + { + $kn = substr($t1,$x+1,strlen($t1)-$x-1); + $ks = strtolower($kn); + if(array_search($ks,$spkey) !== FALSE) + { + $u = $kn; + $t = substr($t,0,$x); $ch = ''; + } + } + if(strpos($t, 'C') !== FALSE) $r .= "Ctrl+"; + if(strpos($t, 'S') !== FALSE) $r .= "Shift+"; + if(strpos($t, 'A') !== FALSE) $r .= "Alt+"; + $r .= $u; + $endspan = true; + } + } + + if($ch == ' ') $r .= "Space"; else if($ch <> '') $r .= htmlentities($ch, ENT_QUOTES); + if($endspan) $r .= " "; + $i++; + } + $r .= ""; + } + + return $r; + } + } + + $keyRenderer = new KeyRenderer(); // Can also be used statically + + //------------------------------------------------------------------------------------------ + + /** + * Render language example from kps 17.0 format examples + * + * Key format (from kmp-json-file.ts): + * + * A space-separated list of keys. + * - modifiers indicated with "+" + * - spacebar is "space" + * - plus key is "shift+=" or "plus" on US English (all other punctuation as per key cap). + * - Hardware modifiers are: "shift", "ctrl", "alt", "left-ctrl", + * "right-ctrl", "left-alt", "right-alt" + * - Key caps should generally be their character for desktop (Latin script + * case insensitive), or the actual key cap for touch + * - Caps Lock should be indicated with "caps-on", "caps-off" + * + * e.g. "shift+a b right-alt+c space plus z z z" represents something like: "Ab{AltGr+C} +zzz" + */ + function RenderExamplesKeys($keys) { + $modifiers = [ + 'left-alt' => 'Left Alt', + 'right-alt' => 'Right Alt', + 'left-ctrl' => 'Left Ctrl', + 'left-control' => 'Left Ctrl', + 'right-ctrl' => 'Right Ctrl', + 'right-control' => 'Right Ctrl', + 'shift' => 'Shift', + 'ctrl' => 'Ctrl', + 'control' => 'Ctrl', + 'alt' => 'Alt', + 'caps-on' => 'Caps (on)', + 'caps-off' => 'Caps (off)', + ]; + + // space separated + $keys = explode(' ', $keys); + foreach($keys as $chord) { + if(empty($chord)) { + continue; + } + $chord = explode('+', $chord); + $chord_keys = []; + foreach($chord as $key) { + $class=''; + $bkey = strtolower($key); + if($bkey == 'space') { + $key = ' '; $class=' class="space"'; + } else if($bkey == 'plus') { + $key = '+'; + } else if(array_key_exists($bkey, $modifiers)) { + $key = $modifiers[$bkey]; + $class=' class="modifier"'; + } else { + $key = htmlspecialchars($key); + } + array_push($chord_keys, "$key"); + } + $result .= implode('+', $chord_keys) . " "; + } + return trim($result); + } + + function DisplayExamples($examples, $language = '') + { + global $morehelp; + $result = ''; + + if(!is_array($examples) || count($examples) == 0) { + return FALSE; + } + + $example = $examples[0]; + if(empty($example['keys'])) { + return FALSE; + } + + $keys = RenderExamplesKeys($example['keys']); + $out = htmlspecialchars($example['text']); + $note = isset($example['note']) ? " (" . htmlspecialchars($example['note']) . ")" : ""; + + $result .= + "To enter ". + "$out$note, ". + "type  ". + "$keys$morehelp"; + + return $result; + } From 06e5644328a73d1b01478dda1a3800e48c8af0aa Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:31:11 +0700 Subject: [PATCH 27/38] chore: add bootstrap files --- cdn/dev/src/bootstrap.bundle.min.js | 14 +++++++------- cdn/dev/src/bootstrap.min.css | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/cdn/dev/src/bootstrap.bundle.min.js b/cdn/dev/src/bootstrap.bundle.min.js index ec2dde2..6c0869b 100644 --- a/cdn/dev/src/bootstrap.bundle.min.js +++ b/cdn/dev/src/bootstrap.bundle.min.js @@ -1,7 +1,7 @@ -/*! - * Bootstrap v5.1.3 (https://getbootstrap.com/) - * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.3"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;ij.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;ie+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}})); -//# sourceMappingURL=bootstrap.bundle.min.js.map +/*! + * Bootstrap v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.3"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;ij.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;ie+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map diff --git a/cdn/dev/src/bootstrap.min.css b/cdn/dev/src/bootstrap.min.css index 016a33a..aac8bee 100644 --- a/cdn/dev/src/bootstrap.min.css +++ b/cdn/dev/src/bootstrap.min.css @@ -1,6 +1,6 @@ -@charset "UTF-8";/*! - * Bootstrap v5.3.3 (https://getbootstrap.com/) - * Copyright 2011-2024 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#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-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px 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='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%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='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--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;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-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-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-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{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;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;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:calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto}.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}} -/*# sourceMappingURL=bootstrap.min.css.map */ +@charset "UTF-8";/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#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-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px 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='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%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='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--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;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-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-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-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{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;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;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:calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto}.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}} +/*# sourceMappingURL=bootstrap.min.css.map */ From 18b29163fa4014f532fb8cb8a48c19aad6e93ea0 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:32:13 +0700 Subject: [PATCH 28/38] chore: add index.php --- index.php | 364 +++++++++++++++++++++++++++--------------------------- 1 file changed, 182 insertions(+), 182 deletions(-) diff --git a/index.php b/index.php index 8db5725..a348040 100644 --- a/index.php +++ b/index.php @@ -1,182 +1,182 @@ - - -
    -
    -
    - - KeymanWeb.com - - - - -
    -
    -
    Keyboard Selection menu
    -
    -

    Open Search to get your keyboard

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

    No example is available for this keyboard.

    -
    -
    -
    -
    - -
    - - - - - - + + +
    +
    +
    + + KeymanWeb.com + + + + +
    +
    +
    Keyboard Selection menu
    +
    +

    Open Search to get your keyboard

    +
    + + +
    +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    + +
    + +
    +
    + +
    +
    +

    No example is available for this keyboard.

    +
    +
    +
    +
    + +
    + + + + + + From 4f3170919bc673752a8366992f25f204a69c10eb Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:33:14 +0700 Subject: [PATCH 29/38] chore: add head.php --- inc/head.php | 466 +++++++++++++++++++++++++-------------------------- 1 file changed, 233 insertions(+), 233 deletions(-) diff --git a/inc/head.php b/inc/head.php index 266769f..1229730 100644 --- a/inc/head.php +++ b/inc/head.php @@ -1,233 +1,233 @@ - get_major_version($kmw_builds['alpha']), - 'beta' => get_major_version($kmw_builds['beta']), - 'stable' => get_major_version($kmw_builds['stable']), - ); - $hasBeta = version_compare($kmw_builds['stable'], $kmw_builds['beta']) < 0; - - if(isset($_REQUEST['version']) && preg_match('/^(\d+)\.(\d+)\.(\d+)$/', $_REQUEST['version'])) { - $kmwbuild = $_REQUEST['version']; - - $version = get_major_version($kmwbuild); - - // ignore tier as passed in, compare to the major version of each tier - if($version == $kmw_builds_major_versions['alpha']) $tier = 'alpha'; - else if($version == $kmw_builds_major_versions['stable']) $tier = 'stable'; - else if($version == $kmw_builds_major_versions['beta']) $tier = 'beta'; - else $tier = 'stable'; - } else { - // Used to enable the release-tier selection code below. - // For general usage, we recommend `get_keymanweb_version($tier)` instead. - if(isset($_REQUEST['tier']) && in_array($_REQUEST['tier'], $kmw_tiers, TRUE)) { - $tier = $_REQUEST['tier']; - } else { - // Selects the 'stable' version unless we're in a beta cycle. - // - // Note: if API calls fail to retrieve proper version data, - // the return will be 0 due to equal fallback versions. - // Net result: selection of the 'stable' tier. - $tier = $hasBeta ? 'beta' :'stable'; - } - - $kmwbuild = $kmw_builds[$tier]; - $version = get_major_version($kmwbuild); - } - - $VersionWithTag = $kmwbuild . ($tier == 'stable' ? '' : "-$tier"); -?> - - - - - - - - - - - -KeymanWeb.com <?php if($tier != 'stable') echo "($tier)"; ?> - - - - -" /> -" /> - - - - - - - - - - - - - - - - - - - - - - - - + get_major_version($kmw_builds['alpha']), + 'beta' => get_major_version($kmw_builds['beta']), + 'stable' => get_major_version($kmw_builds['stable']), + ); + $hasBeta = version_compare($kmw_builds['stable'], $kmw_builds['beta']) < 0; + + if(isset($_REQUEST['version']) && preg_match('/^(\d+)\.(\d+)\.(\d+)$/', $_REQUEST['version'])) { + $kmwbuild = $_REQUEST['version']; + + $version = get_major_version($kmwbuild); + + // ignore tier as passed in, compare to the major version of each tier + if($version == $kmw_builds_major_versions['alpha']) $tier = 'alpha'; + else if($version == $kmw_builds_major_versions['stable']) $tier = 'stable'; + else if($version == $kmw_builds_major_versions['beta']) $tier = 'beta'; + else $tier = 'stable'; + } else { + // Used to enable the release-tier selection code below. + // For general usage, we recommend `get_keymanweb_version($tier)` instead. + if(isset($_REQUEST['tier']) && in_array($_REQUEST['tier'], $kmw_tiers, TRUE)) { + $tier = $_REQUEST['tier']; + } else { + // Selects the 'stable' version unless we're in a beta cycle. + // + // Note: if API calls fail to retrieve proper version data, + // the return will be 0 due to equal fallback versions. + // Net result: selection of the 'stable' tier. + $tier = $hasBeta ? 'beta' :'stable'; + } + + $kmwbuild = $kmw_builds[$tier]; + $version = get_major_version($kmwbuild); + } + + $VersionWithTag = $kmwbuild . ($tier == 'stable' ? '' : "-$tier"); +?> + + + + + + + + + + + +KeymanWeb.com <?php if($tier != 'stable') echo "($tier)"; ?> + + + + +" /> +" /> + + + + + + + + + + + + + + + + + + + + + + + + From fddc10aa6e92d7875c3a92bf3f637d7b509be39e Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:36:36 +0700 Subject: [PATCH 30/38] chore: add styles files --- cdn/dev/css/kmw-desktop.css | 434 ++++----- cdn/dev/css/kmw-header.css | 1732 +++++++++++++++++------------------ cdn/dev/css/kmw-mobile.css | 332 +++---- cdn/dev/css/kmw-tablet.css | 1100 +++++++++++----------- 4 files changed, 1799 insertions(+), 1799 deletions(-) diff --git a/cdn/dev/css/kmw-desktop.css b/cdn/dev/css/kmw-desktop.css index 518796e..f139398 100644 --- a/cdn/dev/css/kmw-desktop.css +++ b/cdn/dev/css/kmw-desktop.css @@ -1,217 +1,217 @@ -/* Desktop browser CSS rules */ - -/* -====================== -==Universal Elements== -====================== -*/ - - #kmw_controls{ - border-top-left-radius: 8px; - border-top-right-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - } - - #kmw_btn_osk{ - border-top-right-radius: 10px; - } - - #kmw_controls_start{ - border-top-left-radius: 10px; - } - -textarea { - height:260px; - width:554px; - float:left; - margin: 0px 10px 10px; - color:black; - font-size:16px; - font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; - } - -form { - padding-right:10px; - float:left; - } -#messageContainer { - float:left; - width:80%; -} -/* -====================== -==Keyboard Examples== -====================== -*/ - -#example,#help { - margin: 5px 0px; - text-align: center; -} - -#example { - visibility: hidden; - width: 100%; - min-height: 10px; - max-height: 45px; - display: flex; - justify-content: center; - align-items: center; - padding-top: 5px; -} - -#example a { - padding-left: 10px; -} - -.highlightKeys kbd { - border: solid 1px #808080; - border-radius: 4px; - background: #cccccf; - color: black; - font-family: Verdana; - font-weight: normal; - min-width: 16px; - display: inline-block; - box-shadow: 2px 2px 1px rgba(128, 128, 128, 0.3); - margin-right: 4px; -} - -.highlightKeys kbd.space { - min-width: 64px; -} - -/* -====================== -==Keyboard Styling== -====================== -*/ -.desktop, .kmw-osk-frame { - display: block !important; - position: static !important; - width: 100% !important; - height: 100% !important; - max-width: 100% !important; - max-height: 100% !important; - border-radius: 0; -} - -.kmw-help-osk-frame { - height: 100% !important; - scroll-behavior: smooth !important; - scrollbar-width: thin; - overflow-x: hidden !important; - overflow-y: scroll !important; - text-align: center !important; -} - -.kmw-osk-static { - height: fit-content !important; - text-align: center !important; - border: solid 1px var(--keyman-blue) !important; -} - -.kmw-osk-static table { - display: flex !important; - flex-direction: row !important; - align-items: center !important; - justify-content: center !important; - width: 100% !important; -} - -#kmw-osk-help-page > table > tbody > tr > td > .row { - --bs-gutter-x: 0 !important; -} - -.kmw-title-bar { - background-color: #2EADD3 !important; - border-radius: 0 !important; - height: fit-content !important; -} - -#keyboard_europeanlatin_help p, .kmw-osk-static p { - display: flex !important; - justify-content: end !important; - position: relative !important; - right: 0 !important; - top: 0 !important; -} - -.kmw-key-square { - z-index: 0 !important; -} - -.kmw-spacebar-caption { - color: gray !important; -} - -.desktop .kmw-osk-frame, .desktop .kmw-osk-inner-frame, .desktop .kmw-key-layer-group { - background-color: #95C6D6 !important; -} - -.desktop .kmw-key-default { - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #EEEFF0), color-stop(100%, #D3D3D9)); - background-image: -moz-linear-gradient(#EEEFF0,#D3D3D9); - background-color: #E0E0E4; -} - -.desktop .kmw-key-touched { - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #B5B5B5), color-stop(100%, #93969B)); - background-image: -moz-linear-gradient(#B5B5B5, #93969B) !important; - background-color: #B5B5B5; - } - -.desktop .kmw-key-shift{ - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #DBDBDB), color-stop(100%, #C0C0C4)); - background-image: -moz-linear-gradient(#DBDBDB, #C0C0C4) !important; - background-color: #DBDBDB; -} - - .desktop .kmw-key-shift-on { - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #B5B5B5), color-stop(100%, #93969B)); - background-image: -moz-linear-gradient(#B5B5B5, #93969B) !important; - background-color: #93969B; - } - - .desktop .kmw-key-shift .kmw-key-text, .desktop .kmw-key-shift-on .kmw-key-text { color: gray; font-size: 0.9em !important; text-shadow: 0 1px 1px #fff;} - .desktop .kmw-key-shift .kmw-key-text, .desktop .kmw-key-shift-on .kmw-key-text { top: 10%; } - .desktop .kmw-key-label { top: 5%; } - .desktop .kmw-key-label { left: 10%; } - .desktop .kmw-key-default .kmw-key-text { top: 25%; } - .desktop .kmw-footer, .desktop .kmw-title-bar { background-color: #2EADD3 !important; display: none;} - .desktop .kmw-title-bar div{min-height: 100%;} - .desktop .kmw-footer-caption a { color: white !important; } - .kmw-osk-frame, .kmw-osk-inner-frame { border-color: #2EADD3 !important; } - .kmw-key-shift, .kmw-key-shift-on { border-width: 2px !important; } - .kmw-key-shift, .kmw-key-shift-on { border-radius: 6px !important; } - .kmw-key-shift, .kmw-key-shift-on { border-color: #95C6D6 !important; } - .kmw-key-default { border-width: 2px !important; } - .kmw-key-default { border-radius: 6px !important; } - .kmw-key-default { border-color: #95C6D6 !important; } - .kmw-key-label { color: #2EADD3 !important; } - .kmw-key-label { top: 10% !important; } - .kmw-key-label { left: 15% !important; } - .kmw-key-default { - color: #313149; - } - -#keymandesktop p { - font-size: 11pt; - font-weight: bold; - text-align: center; -} - -@media all and (min-width: 1320px) { - ins.adsbygoogle { - display: inline-block !important; - height: 600px; - position: absolute; - right: 16px; - top: 120px; - width: 160px; - } -} - -.desktop .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { - top: -33%; -} +/* Desktop browser CSS rules */ + +/* +====================== +==Universal Elements== +====================== +*/ + + #kmw_controls{ + border-top-left-radius: 8px; + border-top-right-radius: 8px; + -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); + } + + #kmw_btn_osk{ + border-top-right-radius: 10px; + } + + #kmw_controls_start{ + border-top-left-radius: 10px; + } + +textarea { + height:260px; + width:554px; + float:left; + margin: 0px 10px 10px; + color:black; + font-size:16px; + font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; + } + +form { + padding-right:10px; + float:left; + } +#messageContainer { + float:left; + width:80%; +} +/* +====================== +==Keyboard Examples== +====================== +*/ + +#example,#help { + margin: 5px 0px; + text-align: center; +} + +#example { + visibility: hidden; + width: 100%; + min-height: 10px; + max-height: 45px; + display: flex; + justify-content: center; + align-items: center; + padding-top: 5px; +} + +#example a { + padding-left: 10px; +} + +.highlightKeys kbd { + border: solid 1px #808080; + border-radius: 4px; + background: #cccccf; + color: black; + font-family: Verdana; + font-weight: normal; + min-width: 16px; + display: inline-block; + box-shadow: 2px 2px 1px rgba(128, 128, 128, 0.3); + margin-right: 4px; +} + +.highlightKeys kbd.space { + min-width: 64px; +} + +/* +====================== +==Keyboard Styling== +====================== +*/ +.desktop, .kmw-osk-frame { + display: block !important; + position: static !important; + width: 100% !important; + height: 100% !important; + max-width: 100% !important; + max-height: 100% !important; + border-radius: 0; +} + +.kmw-help-osk-frame { + height: 100% !important; + scroll-behavior: smooth !important; + scrollbar-width: thin; + overflow-x: hidden !important; + overflow-y: scroll !important; + text-align: center !important; +} + +.kmw-osk-static { + height: fit-content !important; + text-align: center !important; + border: solid 1px var(--keyman-blue) !important; +} + +.kmw-osk-static table { + display: flex !important; + flex-direction: row !important; + align-items: center !important; + justify-content: center !important; + width: 100% !important; +} + +#kmw-osk-help-page > table > tbody > tr > td > .row { + --bs-gutter-x: 0 !important; +} + +.kmw-title-bar { + background-color: #2EADD3 !important; + border-radius: 0 !important; + height: fit-content !important; +} + +#keyboard_europeanlatin_help p, .kmw-osk-static p { + display: flex !important; + justify-content: end !important; + position: relative !important; + right: 0 !important; + top: 0 !important; +} + +.kmw-key-square { + z-index: 0 !important; +} + +.kmw-spacebar-caption { + color: gray !important; +} + +.desktop .kmw-osk-frame, .desktop .kmw-osk-inner-frame, .desktop .kmw-key-layer-group { + background-color: #95C6D6 !important; +} + +.desktop .kmw-key-default { + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #EEEFF0), color-stop(100%, #D3D3D9)); + background-image: -moz-linear-gradient(#EEEFF0,#D3D3D9); + background-color: #E0E0E4; +} + +.desktop .kmw-key-touched { + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #B5B5B5), color-stop(100%, #93969B)); + background-image: -moz-linear-gradient(#B5B5B5, #93969B) !important; + background-color: #B5B5B5; + } + +.desktop .kmw-key-shift{ + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #DBDBDB), color-stop(100%, #C0C0C4)); + background-image: -moz-linear-gradient(#DBDBDB, #C0C0C4) !important; + background-color: #DBDBDB; +} + + .desktop .kmw-key-shift-on { + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #B5B5B5), color-stop(100%, #93969B)); + background-image: -moz-linear-gradient(#B5B5B5, #93969B) !important; + background-color: #93969B; + } + + .desktop .kmw-key-shift .kmw-key-text, .desktop .kmw-key-shift-on .kmw-key-text { color: gray; font-size: 0.9em !important; text-shadow: 0 1px 1px #fff;} + .desktop .kmw-key-shift .kmw-key-text, .desktop .kmw-key-shift-on .kmw-key-text { top: 10%; } + .desktop .kmw-key-label { top: 5%; } + .desktop .kmw-key-label { left: 10%; } + .desktop .kmw-key-default .kmw-key-text { top: 25%; } + .desktop .kmw-footer, .desktop .kmw-title-bar { background-color: #2EADD3 !important; display: none;} + .desktop .kmw-title-bar div{min-height: 100%;} + .desktop .kmw-footer-caption a { color: white !important; } + .kmw-osk-frame, .kmw-osk-inner-frame { border-color: #2EADD3 !important; } + .kmw-key-shift, .kmw-key-shift-on { border-width: 2px !important; } + .kmw-key-shift, .kmw-key-shift-on { border-radius: 6px !important; } + .kmw-key-shift, .kmw-key-shift-on { border-color: #95C6D6 !important; } + .kmw-key-default { border-width: 2px !important; } + .kmw-key-default { border-radius: 6px !important; } + .kmw-key-default { border-color: #95C6D6 !important; } + .kmw-key-label { color: #2EADD3 !important; } + .kmw-key-label { top: 10% !important; } + .kmw-key-label { left: 15% !important; } + .kmw-key-default { + color: #313149; + } + +#keymandesktop p { + font-size: 11pt; + font-weight: bold; + text-align: center; +} + +@media all and (min-width: 1320px) { + ins.adsbygoogle { + display: inline-block !important; + height: 600px; + position: absolute; + right: 16px; + top: 120px; + width: 160px; + } +} + +.desktop .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { + top: -33%; +} diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index 09bbb23..da9c3f9 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -1,867 +1,867 @@ -:root { - --box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; - --keyman-orange: #FC7200; - --keyman-red: #B92034; - --keyman-blue: #2EADD3; -} - -* { - letter-spacing: .05rem; - font-weight: 400; -} - -hr { - margin: 0; -} - -header > div > img { - width: 100%; - display: block; - height: 5px; -} - -#searchDropdownMenu { - padding: 10px; - margin: 0; -} - -.main-header { - display: grid; - grid-template-columns: 1fr 1fr; - height: 75px; - padding: 0 10px; - box-shadow: var(--box-shadow); -} - -/* Left side of Header: - Search - Keyboard dropdown -*/ - -.left-header { - display: flex; - align-items: center; -} - -.left-header img { - margin-right: 10px; -} - -/* -Language Search box -*/ -#searchBar { - position: relative; - width: 550px; - margin-right: 10px; -} - -#searchIcons { - position: absolute; - right: 5px; - top: 12px; - border-left: 1px solid gray; - background-color: white; -} - -#searchIcons > * { - margin-right: 10px; - padding-left: 15px; - opacity: 50%; -} - -#searchIcons > *:hover { - padding-left: 15px; - opacity: 100%; -} - -#magnifyingGlassIcon { - display: inline; -} - -#clearSearchIcon { - display: none; -} - -#searchBar #searchInput { - height: 50px; - width: 100%; - text-indent: 10px; - border-radius: 15px; - text-align: left; - font-family: inherit !important; - box-shadow: none; -} - -#searchInput:hover, #searchInput:focus { - border: 1px solid var(--keyman-orange); -} - -#searchDropdownMenu { - width: 100%; - max-height: 600px; - overflow: auto; - scrollbar-width: thin; -} - -#searchDropdownMenu hr { - margin: 15px 0; -} - -/* Enable keyboard Animation */ -.kb-icon-plus-animate { - animation: plustoTickToMinus 2s forwards; -} - -@keyframes plustoTickToMinus { - 0% { - content: "+"; - transform: scale(1); - } - 30% { - color: lime; - content: "โœ“"; - transform: scale(1.5); - } - 60% { - color: lime; - content: "โœ“"; - transform: scale(1.3); - } - 100% { - content: "-"; - transform: scale(1); - } -} - -/* Instruction on dropdown */ -.instruction-title, .keyboard-title { - width: 100%; -} - -.instruction-title p, .keyboard-title { - font-weight: 500; - font-size: 16px; - text-align: center; -} - -/* Map and Most download */ -.left-header .dropdown-menu .top-row #worldMap { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin: 10px 10px !important; -} - -#worldMap span { - opacity: 50%; -} - -#worldMap span:hover { - opacity: 100%; - cursor: pointer; -} - -#KeymanWebControl #kmw_controls -{ - display: flex !important; - flex-direction: row; - justify-content: space-evenly; - border-radius: 20px; - box-shadow: var(--box-shadow); - height: 35px; - padding: 5px; -} - -#KeymanWebControl .kmw_button, -#keymanWebControl .kmw_button_disabled, -#KeymanWebControl .kmw_button_selected -{ - width: fit-content !important; - background: none !important; - height: 0 !important; -} - -#KeymanWebControl #kmw_controls_start, -#KeymanWebControl #kmw_btn_osk, -.kmw_bar, #kmw_controls_end { - display: none; -} - -#KeymanWebControl .kmw_language { - padding: 3px; -} - -#kmw_control_keyboards { - width: fit-content; -} - -#kmw_selector_regions { - height: 100%; - overflow: hidden; - position: relative; -} - -.kmw_selector_region { - overflow-y: scroll; - overflow-x: hidden; - scrollbar-width: thin; - height: 600px; -} - -/* Search Dropdown cards */ -#languageSearchList > * { - margin-bottom: 5px; -} - -#languageSearchList > div:hover { - border: 1px solid var(--keyman-orange); - margin: 3px; -} - -.card-wrap { - box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;; - padding: 10px; - border-radius: 10px; - letter-spacing: .05rem; - overflow: hidden; - margin-bottom: 5px; -} - -.card-wrap.disabled { - opacity: 0.5; - pointer-events: none; - position: relative; -} - -.card-wrap.disabled .kb-icon-plus { - pointer-events: auto; - opacity: 1; - position: absolute; - right: 15px; - z-index: 1; -} - -.kb-icon-plus { - transition: 0.5s ease; -} - -.kb-icon-plus.animate { - color: green; -} - -.keyboard-id { - font-size: 12px; - margin-bottom: 10px; - color: #006622; -} - -.card-wrap h6 { - opacity: 75%; - font-size: 12px; - margin: 0 0 0.35rem; -} - -.keyboard-description { - color: gray; -} - -.keyboard-specs { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; -} - -.keyboard-specs .platform { - display: flex; - flex-direction: row; -} - -.keyboard-specs .platform span, -.keyboard-content .keyboard-platforms .platform span { - font-size: 0px; - width: 15px; - height: 20px; - margin: 0; -} - -.card-wrap .monthly-download { - opacity: 75%; -} - -.card-header { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin-bottom: 8px; -} - -.card-header h4 { - color: #0000EE; - font-weight: 400; - font-size: large; - margin: 0; -} - -.card-header h4 span { - color: black; -} - -.card-header p { - margin: 0; - position: relative; - float: right; - font-weight: 200; - font-size: medium; - color: var(--keyman-red); -} - -/* Pagination */ -#searchDropdownMenu .bottom-row-search { - background-color: white; - align-items: center; - justify-content: center; - width: fit-content; - border-radius: 10px; - width: 100%; - bottom: 0; - text-align: center; - box-shadow: rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px; -} - -.bottom-row-search > * { - margin: 10px; - cursor: pointer; -} - -/* Selected Keyboard Menu */ -#keyboardSelectionButton { - z-index: 3; -} - -.scroll-wrapper-keyboard-tab { - width: 350px; - height: 35px; - position: relative; -} - -#keyboardSelection { - display: flex; - flex-direction: column; - text-align: center; - width: 0; - height: 100%; - background-color: white; - color: black; - box-shadow: var(--box-shadow); - overflow-y: scroll; - scrollbar-width: none; - transition: all 1s ease-in-out; - margin-left: -10px; - border-radius: 10px; - z-index: 0; - white-space: nowrap; - text-indent: 15px; -} - -#keyboardSelection.open { - position: relative; - width: 400px; - height: fit-content; - padding: 0 0 10px; - z-index: 2; -} - -#keyboardSelection p { - margin: 0; - height: 25px; - width: 100%; -} - -.kb-item-header, .kb-item-footer { - display: flex; - align-items: center; - justify-content: center; - height: 30px; - font-weight: 500; - margin: 5px 0; -} - -.kb-item-header { - border-bottom: 1px solid gray; -} - -.kb-item-footer { - border-top: 1px solid gray; - cursor: pointer; -} - -.kb-item { - width: 100%; - max-height: fit-content; - height: 38px; - display: flex; - flex-direction: row; - justify-content: space-between; - padding: 5px; -} - -.kb-item:hover { - cursor: pointer; - background-color: var(--keyman-orange); - color: white; -} - -.kb-item span { - width: 50%; - text-wrap: wrap; - align-self: center; -} - -.keyboard-configs { - width: 50%; - height: fit-content; - display: grid; - grid-template-columns: repeat(4, 1fr); - list-style-type: none; - padding: 2px 0 0; -} - -::-webkit-scrollbar:horizontal { - height: 5px; -} - -::-webkit-scrollbar-thumb:horizontal { - background: #2c7be5; - border-radius: 6px; -} - -::-webkit-scrollbar-track:horizontal { - background: #f1f1f1; -} - -.btn-keyman-orange { - background-color: var(--keyman-orange) !important; - color: white !important; -} - -.keyboard-details { - position: absolute; - width: 400px; - height: fit-content; - background-color: white; - color: black; - box-shadow: var(--box-shadow); - border-radius: 20px; - padding: 10px; - z-index: 2; -} - -.keyboard-content-wrapper { - margin-top: 10px; -} - -.keyboard-content { - width: max-content; - list-style-type: none; - padding: 0; - text-align: left; - display: flex; - flex-direction: column; -} - -.keyboard-content > * { - margin: 5px 0px; -} - -.keyboard-content .keyboard-platforms .platform { - display: flex; - flex-direction: row; -} - -.keyboard-content li .row .col:nth-child(2), -.keyboard-content li .row .col:nth-child(2) * { - text-align: center; - white-space: normal; - word-break: break-word; - width: 200px; - overflow: hidden; -} - -.keyboard-content li .row .col:nth-child(1) { - width: 200px; -} - -#removeLanguage { - cursor: pointer; -} - -.platform span { - background-repeat: no-repeat; - padding-left: 24px; - background-size: 18px; - display: block; - margin: 4px 0; -} - -.platform span:hover, .keyboard-configs li:hover{ - cursor: help; -} - -.platform .platform-windows { - background-image: url('/cdn/dev/img/platforms/icon-windows.png'); -} - -.platform .platform-macos { - background-image: url('/cdn/dev/img/platforms/icon-macos.png'); -} - -.platform .platform-linux { - background-image: url('/cdn/dev/img/platforms/icon-linux.png'); -} - -.platform .platform-android { - background-image: url('/cdn/dev/img/platforms/icon-android.png'); -} - -.platform .platform-ios { - background-image: url('/cdn/dev/img/platforms/icon-ios.png'); -} - -.platform .platform-desktopweb { - background-image: url('/cdn/dev/img/platforms/icon-desktopWeb.png'); -} - -.platform .platform-mobileweb { - background-image: url('/cdn/dev/img/platforms/icon-mobileWeb.png'); -} - -/* Limits of Keyboard Selection */ -.warning-container { - position: fixed; - height: 100vh; - width: 100%; - z-index: 1000; - top: 0; - left: 0; - display: flex; - justify-content: center; - align-items: center; -} - -.warning-content { - width: 500px; - display: flex; - flex-direction: column; - align-items: center; - background-color: white; - color: black; - text-align: center; - padding: 30px 30px 70px; - border-radius: 20px; - box-shadow: var(--box-shadow); -} - -.warning-cancel-btn { - width: 30px; - font-size: 20px; - opacity: 50%; - align-self: flex-end; - background-color: transparent; - border: none; - margin-bottom: 10px; -} - -.warning-keyman-image { - width: 82px; - margin-bottom: 15px; -} - -.warning-text { - margin-bottom: 40px; - font-size: 18px; -} - -.warning-accept-btn { - background-color: var(--keyman-orange); - border: none; - border-radius: 5px; - width: 200px; - padding: 14px; - color: white; - box-shadow: var(--box-shadow); -} - -/* Middle of the header */ -.middle-header { - display: flex; - justify-content: center; - align-items: center; -} - -.middle-header i, .right-header i { - font-size: 24px; - opacity: 50%; -} - -.middle-header i:hover { - opacity: 100%; - cursor: pointer; - color: var(--keyman-red); -} - -/* Right side of the header: - Tools - Hamburger menu -*/ - -.right-header { - display: grid; - grid-template-columns: 80% 20%; - width: 100%; - justify-items: right; - align-items: center; - margin-right: 0; -} - -.right-header i:hover { - opacity: 100%; - cursor: pointer; - color: var(--keyman-blue); -} - -/* Font size slider + Hide/show keyboard */ -.tool-container { - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; -} - -.tool-container > * { - margin: 10px; -} - -.font-size-container { - display: flex; - flex-direction: row; - align-items: center; -} - -.font-size-slider { - display: flex; - flex-direction: column; - justify-content: end; - align-items: center; - height: 60px; -} - -#fontSizeRange[type=range] { - -webkit-appearance: none; - margin: 10px 0; - width: 100%; -} - - -.font-large { - font-size: 20px; -} - -input[type="range"] { - width: 100px; - background-color: transparent; -} - -input[type="range"]::-webkit-slider-runnable-track { - height: 3px; - background: rgb(107, 107, 107); - border-radius: 10px; -} - -input[type="range"]::-webkit-slider-thumb { - border-radius: 50%; - height: 20px; - width: 20px; - position: relative; - bottom: 6px; - background-size: 50%; - box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.4); - cursor: grab; -} - -#fontSizeRange[type=range]::-webkit-slider-runnable-track { - width: 100%; - cursor: pointer; - transform: 0.2s; - box-shadow: var(--box-shadow); - background: gray; - border-radius: 25px; -} - -#fontSizeRange[type=range]::-webkit-slider-thumb { - height: 10px; - width: 20px; - border-radius: 7px; - background: var(--keyman-blue); - cursor: pointer; - -webkit-appearance: none; - box-shadow: 0px 0px 5px rgb(143, 143, 143); - margin-top: 3px; -} - -#burgerMenu ul { - box-shadow: var(--box-shadow); -} - -#burgerMenu ul:hover { - cursor: pointer; -} - -.dropdown-grid-container { - display: grid; - grid-template-columns: 1fr 1fr; - grid-template-rows: 1fr; -} - -.dropdown-item:active { - background-color: transparent !important; -} - -#burgerMenu ul li { - align-items: center; - width: 300px; - border-bottom: 1px solid rgb(196, 196, 196); - margin-top: 10px; -} - -#burgerMenu ul li::after { - background-color: orange; -} - -#burgerMenu ul li p:hover { - opacity: 100%; -} - -#burgerMenu ul li p { - width: 90%; - white-space: normal; - position: relative; - left: 40px; - font-size: 14px; - opacity: 50%; - margin-top: 10px; -} - -#burgerMenu ul li a { - text-decoration: none; - color: black; - font-style: bold; - font-size: 16px; -} - -#burgerMenu ul li i, #burgerMenu ul li img { - margin: 0 10px; - font-size: 16px; - width: 18px; - opacity: 100%; - color: var(--keyman-orange) -} - -#burgerMenu button i:hover { - cursor: pointer; -} - -.kmw-socials, .kmw-version, .sil-logo { - font-size: 14px; -} - -.kmw-socials { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: 10px; -} - -.kmw-socials-icons { - display: grid; - grid-template-columns: 1fr 1fr 1fr; - justify-content: center; - align-items: center; - gap: 10px; -} - -.kmw-socials-icons > a { - text-decoration: none; - color: black; - opacity: 50%; - position: relative; -} - -.kmw-socials-icons > a:hover { - opacity: 100%; -} - -@font-face { - font-family: "social-logos"; - src: url("../../fonts/social-logos.ttf"), - url("social-logos.woff2") format("woff2"), - url("social-logos.woff") format("woff"); - font-weight: normal; - font-style: normal; -} - -[data-icon]:before { - font-family: "social-logos" !important; - content: attr(data-icon); - padding-right: 4px; - font-size: 16px; -} - -.kmw-version { - display: flex; - flex-direction: row; - justify-content: center; -} - -.sil-logo { - display: flex; - flex-direction: column; - align-items: center; -} - -/* Animation */ - -.keyboardTab-animation { - animation: keyboardTab 1s; -} -.keyboardSelection-animation { - animation: keyboardSelection 1s ease-in; -} - -@keyframes keyboardSelection { - 0% { - transform: translateY(-5px); - } - 50% { - transform: translateY(-3px); - } - 75% { - transform: translateY(-1px); - } - 100% { - transform: translateY(0); - } -} - -@keyframes keyboardTab { - from { - opacity: 50%; - } - to { - opacity: 100%; - } +:root { + --box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + --keyman-orange: #FC7200; + --keyman-red: #B92034; + --keyman-blue: #2EADD3; +} + +* { + letter-spacing: .05rem; + font-weight: 400; +} + +hr { + margin: 0; +} + +header > div > img { + width: 100%; + display: block; + height: 5px; +} + +#searchDropdownMenu { + padding: 10px; + margin: 0; +} + +.main-header { + display: grid; + grid-template-columns: 1fr 1fr; + height: 75px; + padding: 0 10px; + box-shadow: var(--box-shadow); +} + +/* Left side of Header: + Search + Keyboard dropdown +*/ + +.left-header { + display: flex; + align-items: center; +} + +.left-header img { + margin-right: 10px; +} + +/* +Language Search box +*/ +#searchBar { + position: relative; + width: 550px; + margin-right: 10px; +} + +#searchIcons { + position: absolute; + right: 5px; + top: 12px; + border-left: 1px solid gray; + background-color: white; +} + +#searchIcons > * { + margin-right: 10px; + padding-left: 15px; + opacity: 50%; +} + +#searchIcons > *:hover { + padding-left: 15px; + opacity: 100%; +} + +#magnifyingGlassIcon { + display: inline; +} + +#clearSearchIcon { + display: none; +} + +#searchBar #searchInput { + height: 50px; + width: 100%; + text-indent: 10px; + border-radius: 15px; + text-align: left; + font-family: inherit !important; + box-shadow: none; +} + +#searchInput:hover, #searchInput:focus { + border: 1px solid var(--keyman-orange); +} + +#searchDropdownMenu { + width: 100%; + max-height: 600px; + overflow: auto; + scrollbar-width: thin; +} + +#searchDropdownMenu hr { + margin: 15px 0; +} + +/* Enable keyboard Animation */ +.kb-icon-plus-animate { + animation: plustoTickToMinus 2s forwards; +} + +@keyframes plustoTickToMinus { + 0% { + content: "+"; + transform: scale(1); + } + 30% { + color: lime; + content: "โœ“"; + transform: scale(1.5); + } + 60% { + color: lime; + content: "โœ“"; + transform: scale(1.3); + } + 100% { + content: "-"; + transform: scale(1); + } +} + +/* Instruction on dropdown */ +.instruction-title, .keyboard-title { + width: 100%; +} + +.instruction-title p, .keyboard-title { + font-weight: 500; + font-size: 16px; + text-align: center; +} + +/* Map and Most download */ +.left-header .dropdown-menu .top-row #worldMap { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 10px 10px !important; +} + +#worldMap span { + opacity: 50%; +} + +#worldMap span:hover { + opacity: 100%; + cursor: pointer; +} + +#KeymanWebControl #kmw_controls +{ + display: flex !important; + flex-direction: row; + justify-content: space-evenly; + border-radius: 20px; + box-shadow: var(--box-shadow); + height: 35px; + padding: 5px; +} + +#KeymanWebControl .kmw_button, +#keymanWebControl .kmw_button_disabled, +#KeymanWebControl .kmw_button_selected +{ + width: fit-content !important; + background: none !important; + height: 0 !important; +} + +#KeymanWebControl #kmw_controls_start, +#KeymanWebControl #kmw_btn_osk, +.kmw_bar, #kmw_controls_end { + display: none; +} + +#KeymanWebControl .kmw_language { + padding: 3px; +} + +#kmw_control_keyboards { + width: fit-content; +} + +#kmw_selector_regions { + height: 100%; + overflow: hidden; + position: relative; +} + +.kmw_selector_region { + overflow-y: scroll; + overflow-x: hidden; + scrollbar-width: thin; + height: 600px; +} + +/* Search Dropdown cards */ +#languageSearchList > * { + margin-bottom: 5px; +} + +#languageSearchList > div:hover { + border: 1px solid var(--keyman-orange); + margin: 3px; +} + +.card-wrap { + box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;; + padding: 10px; + border-radius: 10px; + letter-spacing: .05rem; + overflow: hidden; + margin-bottom: 5px; +} + +.card-wrap.disabled { + opacity: 0.5; + pointer-events: none; + position: relative; +} + +.card-wrap.disabled .kb-icon-plus { + pointer-events: auto; + opacity: 1; + position: absolute; + right: 15px; + z-index: 1; +} + +.kb-icon-plus { + transition: 0.5s ease; +} + +.kb-icon-plus.animate { + color: green; +} + +.keyboard-id { + font-size: 12px; + margin-bottom: 10px; + color: #006622; +} + +.card-wrap h6 { + opacity: 75%; + font-size: 12px; + margin: 0 0 0.35rem; +} + +.keyboard-description { + color: gray; +} + +.keyboard-specs { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.keyboard-specs .platform { + display: flex; + flex-direction: row; +} + +.keyboard-specs .platform span, +.keyboard-content .keyboard-platforms .platform span { + font-size: 0px; + width: 15px; + height: 20px; + margin: 0; +} + +.card-wrap .monthly-download { + opacity: 75%; +} + +.card-header { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; +} + +.card-header h4 { + color: #0000EE; + font-weight: 400; + font-size: large; + margin: 0; +} + +.card-header h4 span { + color: black; +} + +.card-header p { + margin: 0; + position: relative; + float: right; + font-weight: 200; + font-size: medium; + color: var(--keyman-red); +} + +/* Pagination */ +#searchDropdownMenu .bottom-row-search { + background-color: white; + align-items: center; + justify-content: center; + width: fit-content; + border-radius: 10px; + width: 100%; + bottom: 0; + text-align: center; + box-shadow: rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px; +} + +.bottom-row-search > * { + margin: 10px; + cursor: pointer; +} + +/* Selected Keyboard Menu */ +#keyboardSelectionButton { + z-index: 3; +} + +.scroll-wrapper-keyboard-tab { + width: 350px; + height: 35px; + position: relative; +} + +#keyboardSelection { + display: flex; + flex-direction: column; + text-align: center; + width: 0; + height: 100%; + background-color: white; + color: black; + box-shadow: var(--box-shadow); + overflow-y: scroll; + scrollbar-width: none; + transition: all 1s ease-in-out; + margin-left: -10px; + border-radius: 10px; + z-index: 0; + white-space: nowrap; + text-indent: 15px; +} + +#keyboardSelection.open { + position: relative; + width: 400px; + height: fit-content; + padding: 0 0 10px; + z-index: 2; +} + +#keyboardSelection p { + margin: 0; + height: 25px; + width: 100%; +} + +.kb-item-header, .kb-item-footer { + display: flex; + align-items: center; + justify-content: center; + height: 30px; + font-weight: 500; + margin: 5px 0; +} + +.kb-item-header { + border-bottom: 1px solid gray; +} + +.kb-item-footer { + border-top: 1px solid gray; + cursor: pointer; +} + +.kb-item { + width: 100%; + max-height: fit-content; + height: 38px; + display: flex; + flex-direction: row; + justify-content: space-between; + padding: 5px; +} + +.kb-item:hover { + cursor: pointer; + background-color: var(--keyman-orange); + color: white; +} + +.kb-item span { + width: 50%; + text-wrap: wrap; + align-self: center; +} + +.keyboard-configs { + width: 50%; + height: fit-content; + display: grid; + grid-template-columns: repeat(4, 1fr); + list-style-type: none; + padding: 2px 0 0; +} + +::-webkit-scrollbar:horizontal { + height: 5px; +} + +::-webkit-scrollbar-thumb:horizontal { + background: #2c7be5; + border-radius: 6px; +} + +::-webkit-scrollbar-track:horizontal { + background: #f1f1f1; +} + +.btn-keyman-orange { + background-color: var(--keyman-orange) !important; + color: white !important; +} + +.keyboard-details { + position: absolute; + width: 400px; + height: fit-content; + background-color: white; + color: black; + box-shadow: var(--box-shadow); + border-radius: 20px; + padding: 10px; + z-index: 2; +} + +.keyboard-content-wrapper { + margin-top: 10px; +} + +.keyboard-content { + width: max-content; + list-style-type: none; + padding: 0; + text-align: left; + display: flex; + flex-direction: column; +} + +.keyboard-content > * { + margin: 5px 0px; +} + +.keyboard-content .keyboard-platforms .platform { + display: flex; + flex-direction: row; +} + +.keyboard-content li .row .col:nth-child(2), +.keyboard-content li .row .col:nth-child(2) * { + text-align: center; + white-space: normal; + word-break: break-word; + width: 200px; + overflow: hidden; +} + +.keyboard-content li .row .col:nth-child(1) { + width: 200px; +} + +#removeLanguage { + cursor: pointer; +} + +.platform span { + background-repeat: no-repeat; + padding-left: 24px; + background-size: 18px; + display: block; + margin: 4px 0; +} + +.platform span:hover, .keyboard-configs li:hover{ + cursor: help; +} + +.platform .platform-windows { + background-image: url('/cdn/dev/img/platforms/icon-windows.png'); +} + +.platform .platform-macos { + background-image: url('/cdn/dev/img/platforms/icon-macos.png'); +} + +.platform .platform-linux { + background-image: url('/cdn/dev/img/platforms/icon-linux.png'); +} + +.platform .platform-android { + background-image: url('/cdn/dev/img/platforms/icon-android.png'); +} + +.platform .platform-ios { + background-image: url('/cdn/dev/img/platforms/icon-ios.png'); +} + +.platform .platform-desktopweb { + background-image: url('/cdn/dev/img/platforms/icon-desktopWeb.png'); +} + +.platform .platform-mobileweb { + background-image: url('/cdn/dev/img/platforms/icon-mobileWeb.png'); +} + +/* Limits of Keyboard Selection */ +.warning-container { + position: fixed; + height: 100vh; + width: 100%; + z-index: 1000; + top: 0; + left: 0; + display: flex; + justify-content: center; + align-items: center; +} + +.warning-content { + width: 500px; + display: flex; + flex-direction: column; + align-items: center; + background-color: white; + color: black; + text-align: center; + padding: 30px 30px 70px; + border-radius: 20px; + box-shadow: var(--box-shadow); +} + +.warning-cancel-btn { + width: 30px; + font-size: 20px; + opacity: 50%; + align-self: flex-end; + background-color: transparent; + border: none; + margin-bottom: 10px; +} + +.warning-keyman-image { + width: 82px; + margin-bottom: 15px; +} + +.warning-text { + margin-bottom: 40px; + font-size: 18px; +} + +.warning-accept-btn { + background-color: var(--keyman-orange); + border: none; + border-radius: 5px; + width: 200px; + padding: 14px; + color: white; + box-shadow: var(--box-shadow); +} + +/* Middle of the header */ +.middle-header { + display: flex; + justify-content: center; + align-items: center; +} + +.middle-header i, .right-header i { + font-size: 24px; + opacity: 50%; +} + +.middle-header i:hover { + opacity: 100%; + cursor: pointer; + color: var(--keyman-red); +} + +/* Right side of the header: + Tools + Hamburger menu +*/ + +.right-header { + display: grid; + grid-template-columns: 80% 20%; + width: 100%; + justify-items: right; + align-items: center; + margin-right: 0; +} + +.right-header i:hover { + opacity: 100%; + cursor: pointer; + color: var(--keyman-blue); +} + +/* Font size slider + Hide/show keyboard */ +.tool-container { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.tool-container > * { + margin: 10px; +} + +.font-size-container { + display: flex; + flex-direction: row; + align-items: center; +} + +.font-size-slider { + display: flex; + flex-direction: column; + justify-content: end; + align-items: center; + height: 60px; +} + +#fontSizeRange[type=range] { + -webkit-appearance: none; + margin: 10px 0; + width: 100%; +} + + +.font-large { + font-size: 20px; +} + +input[type="range"] { + width: 100px; + background-color: transparent; +} + +input[type="range"]::-webkit-slider-runnable-track { + height: 3px; + background: rgb(107, 107, 107); + border-radius: 10px; +} + +input[type="range"]::-webkit-slider-thumb { + border-radius: 50%; + height: 20px; + width: 20px; + position: relative; + bottom: 6px; + background-size: 50%; + box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.4); + cursor: grab; +} + +#fontSizeRange[type=range]::-webkit-slider-runnable-track { + width: 100%; + cursor: pointer; + transform: 0.2s; + box-shadow: var(--box-shadow); + background: gray; + border-radius: 25px; +} + +#fontSizeRange[type=range]::-webkit-slider-thumb { + height: 10px; + width: 20px; + border-radius: 7px; + background: var(--keyman-blue); + cursor: pointer; + -webkit-appearance: none; + box-shadow: 0px 0px 5px rgb(143, 143, 143); + margin-top: 3px; +} + +#burgerMenu ul { + box-shadow: var(--box-shadow); +} + +#burgerMenu ul:hover { + cursor: pointer; +} + +.dropdown-grid-container { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; +} + +.dropdown-item:active { + background-color: transparent !important; +} + +#burgerMenu ul li { + align-items: center; + width: 300px; + border-bottom: 1px solid rgb(196, 196, 196); + margin-top: 10px; +} + +#burgerMenu ul li::after { + background-color: orange; +} + +#burgerMenu ul li p:hover { + opacity: 100%; +} + +#burgerMenu ul li p { + width: 90%; + white-space: normal; + position: relative; + left: 40px; + font-size: 14px; + opacity: 50%; + margin-top: 10px; +} + +#burgerMenu ul li a { + text-decoration: none; + color: black; + font-style: bold; + font-size: 16px; +} + +#burgerMenu ul li i, #burgerMenu ul li img { + margin: 0 10px; + font-size: 16px; + width: 18px; + opacity: 100%; + color: var(--keyman-orange) +} + +#burgerMenu button i:hover { + cursor: pointer; +} + +.kmw-socials, .kmw-version, .sil-logo { + font-size: 14px; +} + +.kmw-socials { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 10px; +} + +.kmw-socials-icons { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + justify-content: center; + align-items: center; + gap: 10px; +} + +.kmw-socials-icons > a { + text-decoration: none; + color: black; + opacity: 50%; + position: relative; +} + +.kmw-socials-icons > a:hover { + opacity: 100%; +} + +@font-face { + font-family: "social-logos"; + src: url("../../fonts/social-logos.ttf"), + url("social-logos.woff2") format("woff2"), + url("social-logos.woff") format("woff"); + font-weight: normal; + font-style: normal; +} + +[data-icon]:before { + font-family: "social-logos" !important; + content: attr(data-icon); + padding-right: 4px; + font-size: 16px; +} + +.kmw-version { + display: flex; + flex-direction: row; + justify-content: center; +} + +.sil-logo { + display: flex; + flex-direction: column; + align-items: center; +} + +/* Animation */ + +.keyboardTab-animation { + animation: keyboardTab 1s; +} +.keyboardSelection-animation { + animation: keyboardSelection 1s ease-in; +} + +@keyframes keyboardSelection { + 0% { + transform: translateY(-5px); + } + 50% { + transform: translateY(-3px); + } + 75% { + transform: translateY(-1px); + } + 100% { + transform: translateY(0); + } +} + +@keyframes keyboardTab { + from { + opacity: 50%; + } + to { + opacity: 100%; + } } \ No newline at end of file diff --git a/cdn/dev/css/kmw-mobile.css b/cdn/dev/css/kmw-mobile.css index 6c72d31..8d8eb6d 100644 --- a/cdn/dev/css/kmw-mobile.css +++ b/cdn/dev/css/kmw-mobile.css @@ -1,166 +1,166 @@ -/* KMW LIVE CSS for iPhone and other mobiles */ - -/* -====================== -==Universal Elements== -====================== -*/ - -:root { - --mobile-font-size: 12px; - --mobile-search-max-width: 250px; - --mobile-search-min-width: 50px; -} - -html { - overflow-y: scroll; - overflow-x: hidden; -} - -body { - width:100%;height:100%; - font-family: Verdana, Arial, Helvetica, sans-serif; - color:#2D2C2C; - background-color: #eeeeee; - margin:0px; - } - -a { - text-decoration:none; - color: #AD4A28; - } - -a:hover { - text-decoration:underline; - } - -h3 { - font-size:18px; - } - -p { - font-size:13px; - line-height:1.5em; - } - -/* -==================== -==Content Elements== -==================== -*/ - -/* KMW Main App */ -#app { - width: 100%; - margin: 0px; -} - -#KeymanWebControl { - display: none; -} - -#exampleBox, #example { - display: none; -} - -.main-header { - width: 100%; - grid-template-columns: 2fr 1fr; -} - -.left-header { - width: 70vw; -} - -.left-header img { - display: none; -} - -.right-header { - grid-template-columns: 50% 50%; -} - -.right-header { - width: 30vw; -} - -/* -Language Search box -*/ - -#searchBar { - width: 50%; -} - -#searchInput:focus, #searchDropdownMenu, #keyboardSelection:active { - width: var(--mobile-search-max-width) !important; -} - -#textArea { - height: 45vh !important; -} - -.mobile-font-size-container { - display: flex; - flex-direction: row; - position: absolute; - right: 50px; - top: 80px; - width: 150px; - background: white; - border: 1px solid black; - padding: 10px; - border-radius: 10px; -} - -/* Additional rules for portrait orientation */ -@media only screen and (orientation: portrait) { - - #message { - height: 170px; - } - - #messageContainer { - float: left; - width: 80%; - height: 40%; - } -} - -/* Additional rules for landscape orientation */ -@media only screen and (orientation: landscape) { - - #messageContainer { - float: left; - width: 85%; - height: 50%; - } - #message { - height: 50%; - } - #buttons { - margin: 4px 15px 4px 0; - } - #font { - display: none; - } -} - -/* -====================== -==Keyboard Styling== -====================== -*/ - -#kmw-language-menu p { - color: #000 !important; -} - -#kmw-language-menu .selected { - background-color: gray !important; -} - -.phone .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { - top: -33%; - font-size: 0.8em !important; -} +/* KMW LIVE CSS for iPhone and other mobiles */ + +/* +====================== +==Universal Elements== +====================== +*/ + +:root { + --mobile-font-size: 12px; + --mobile-search-max-width: 250px; + --mobile-search-min-width: 50px; +} + +html { + overflow-y: scroll; + overflow-x: hidden; +} + +body { + width:100%;height:100%; + font-family: Verdana, Arial, Helvetica, sans-serif; + color:#2D2C2C; + background-color: #eeeeee; + margin:0px; + } + +a { + text-decoration:none; + color: #AD4A28; + } + +a:hover { + text-decoration:underline; + } + +h3 { + font-size:18px; + } + +p { + font-size:13px; + line-height:1.5em; + } + +/* +==================== +==Content Elements== +==================== +*/ + +/* KMW Main App */ +#app { + width: 100%; + margin: 0px; + } + +#KeymanWebControl { + display: none; + } + +#exampleBox, #example { + display: none; +} + +.main-header { + width: 100%; + grid-template-columns: 2fr 1fr; +} + +.left-header { + width: 70vw; + } + +.left-header img { + display: none; +} + +.right-header { + grid-template-columns: 50% 50%; +} + +.right-header { + width: 30vw; +} + +/* +Language Search box +*/ + +#searchBar { + width: 50%; +} + +#searchInput:focus, #searchDropdownMenu, #keyboardSelection:active { + width: var(--mobile-search-max-width) !important; +} + +#textArea { + height: 45vh !important; +} + +.mobile-font-size-container { + display: flex; + flex-direction: row; + position: absolute; + right: 50px; + top: 80px; + width: 150px; + background: white; + border: 1px solid black; + padding: 10px; + border-radius: 10px; +} + + /* Additional rules for portrait orientation */ +@media only screen and (orientation: portrait) { + + #message { + height: 170px; + } + + #messageContainer { + float: left; + width: 80%; + height: 40%; + } +} + + /* Additional rules for landscape orientation */ +@media only screen and (orientation: landscape) { + + #messageContainer { + float: left; + width: 85%; + height: 50%; + } + #message { + height: 50%; + } + #buttons { + margin: 4px 15px 4px 0; + } + #font { + display: none; + } +} + +/* +====================== +==Keyboard Styling== +====================== +*/ + +#kmw-language-menu p { + color: #000 !important; +} + +#kmw-language-menu .selected { + background-color: gray !important; +} + +.phone .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { + top: -33%; + font-size: 0.8em !important; +} diff --git a/cdn/dev/css/kmw-tablet.css b/cdn/dev/css/kmw-tablet.css index 4b1c4da..bd11ca5 100644 --- a/cdn/dev/css/kmw-tablet.css +++ b/cdn/dev/css/kmw-tablet.css @@ -1,550 +1,550 @@ -/* KMW LIVE CSS for iPad and other tablet devices */ - -/* -====================== -==Universal Elements== -====================== -*/ - -html { - overflow-y: scroll; - overflow-x: hidden; -} - -body { - width:100%; - font-family: Verdana, Arial, Helvetica, sans-serif; - color:#2D2C2C; - background-color: #eeeeee; - margin:0px; - } -section { - background-color: darkred; -} - -a { - text-decoration:none; - color: #AD4A28; - } - -a:hover { - text-decoration:underline; - } - -h3 { - font-size:18px; - } - -p { - font-size:13px; - line-height:1.5em; - } - -header, footer { - width:100%; - margin:0px auto; - /*clear: both;*/ - } - -hr { - display: none; - } - -.box { - -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - } - -/* -=================== -==Header Elements== -=================== -*/ -header { - margin-top:0px; - } - -#headerLeft img { - display: block; /* default (inline) display inserts an unwanted bottom border */ - margin-top:0px; - height:60px; - /*-webkit-border-radius: 0px 0px 8px 8px; -moz-border-radius: 0px 0px 8px 8px; border-radius: 0px 0px 8px 8px;*/ - } - -header > div > img { - display: block; - width: 100%; - height: 8px; -} - - -/* Expanding the search box */ -/* @media screen and (940px <= width <= 1045px) { - .main-header { - grid-template-columns: 2fr 1fr 1fr; - } -} */ - -.main-header { - width: 100%; - grid-template-columns: 3fr 1fr; -} - -.left-header { - width: 70vw; -} - -.right-header { - width: 300px; -} - -/* -==================== -==Content Elements== -==================== -*/ -#content { - width: 100%; /* specific for tablet and mobile */ - margin: 0px auto; - background-color: #eeeeee; - /*min-height:375px;*/ - } - - -/* KMW Main App */ -#app { - /*float:left;*/ - /*height:330px;*/ - width:100%; /*710px; */ - margin: 0px;/*30px 15px 15px;*/ - } - -#KeymanWebControl { - display: none; - } - -#exampleBox, #example { - display: none; - } - -#messageContainer { - width: 80%; - float:left; - } - -#message { - height:195px; - width: 100%;/*554px;*/ - float:left; - margin: 10px; - color:black; - font-size:17px; - font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; - } - -/* KMW App Buttons */ - -#buttons { - float: right; - width:15%; - margin: 0px 20px; - margin-top: -6px; - } - -#buttons div { - width:140px; - -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - background: #fff; - border: 1px solid #888888; - margin: 0px 10px; - padding: 3px; - padding-top: 9px; - height: 41px; - line-height: 36px; - background-repeat: no-repeat; - background-position: center left; - } - -#buttons div:disabled { - cursor: default !important; - color: gray !important; - border-color: gray !important; - } - -#buttons p{ - margin-left: 41px; -} - -#search.links, #search{ - background-image:url('../img/btn_google_small.png'); - -} - -#search.linksOff{ - background-image:url('../img/btn_google_small_white.png'); -} - -#copy.links, #copy{ - background-image:url('../img/btn_copy_small.png'); - -} - -#copy.linksOff{ - background-image:url('../img/btn_copy_small_white.png'); -} - -#buttons div * { - display:inline; - } - -div.links { - cursor:pointer; - } - -div.linksOff { - cursor:default !important; - border: 1px solid #cccccc !important; - } - -div.linksOff * { - color: gray; - -webkit-user-select:none; - } - -/* Aside Elements */ - -aside { - display:none; - } - -#font-size{ - display: none; -} - -/* - -#font, -=================== -==Footer Elements== -=================== -*/ -.footer, footer { - display: none; - background-color: #6A2915; - height:50px; - left:0px; - bottom:0px; - position: fixed; - /* -webkit-border-radius: 8px 8px 0px 0px; -moz-border-radius: 8px 8px 0px 0px; border-radius: 8px 8px 0px 0px; */ - } - -nav ul { - list-style: none outside none; - width:90%; - margin:0px auto; - padding:15px 0px; - } - -nav li { - display:inline; - padding:20px 39px; - } - -nav a { - color:#eee; - font-family:Tahoma; - font-weight:bold; - font-size:10.7px; - } - -.messageBox { - box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - position: fixed; - left: 50%; - top: 20%; - z-index: 999 !important; - margin-left: -250px; - margin-top: -100px; - width: 500px; - height: 200px; -} - -.messageBox div { - width: 464px; - height: 134px; - left: 10px; - top: 10px; - padding: 8px; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; - background: white; -} - -.messageBox button { - width:83px; - position: absolute; - right: 10px; - bottom: 4px; - background: #414141; - border-top: 1px solid #383838; - border-right: 1px solid #1F1F1F; - border-bottom: 1px solid #151515; - border-left: 1px solid #1F1F1F; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - color: white; - font: bold 12px Helvetica, Verdana, Arial, sans-serif; - text-shadow: 0px -1px 1px #1E2D4D; - text-align:center; - margin: 0 auto 6px; - padding: 3px; - } - -.messageBox button:disabled { - cursor: default !important; - color: gray !important; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; -} - -.messageBox button:hover { - -webkit-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - cursor: pointer; -} - -.messageBox button:active { - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; -} - -.progressBox { - box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - position: fixed; - left: 50%; - top: 20%; - z-index: 999; - margin-left: -200px; - margin-top: -54px; - width: 400px; - height: 54px; -} - -.progressBox div { - width: 364px; - height: 18px; - left: 10px; - top: 10px; - padding: 8px; - background: url('../img/wait.gif') no-repeat 354px 8px white; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; -} - -/* Elements modified for tablet */ -#headerBackground { - width: 100%; - background-color:white; -} - -#headerLeft { - float: left; - margin-left: 28px; -} - -#headerRight { - text-align: right; - height: 40px; - float: right; - padding-bottom: 33px; - padding-right: 10px; -} - -#headerRight-beta { - display: block; - font-weight: bold; - color: red; - font-size: 16pt; - padding: 16px 12px 0; -} - -#headerRight-link { - padding: 0 12px 0; -} - - -#instructions { - margin:10px; - font:12pt Helvetica,Verdana,Arial,sans-serif; - color: white; -} - -/* Additional rules for portrait orientation */ -@media only screen and (orientation: landscape) { - #buttons{ - padding-top: 11px; - } - #buttons div { - margin: 4px 20px 10px 0px; - padding: 0px; - } - #font span:first-child{ - margin-left: 3px; - } - #font p{ - margin-left: 8px; - position: relative; - top: -5px; - } - #mobile-font{ - display: none; - width: 136px; - border-radius: 4px; - position: absolute; - left: 100%; - top: 136px; - margin-left: -170px; - text-align: center; - font-size: 24pt; - background: #fff; - } - - #mobile-increase{ - height: 40px; - line-height: 40px; - border-bottom: solid 1px #000; - } - - #mobile-decrease{ - height: 40px; - line-height: 40px; - } -} - -/* Additional rules for portrait orientation */ -@media only screen and (orientation: portrait) { - - #app { - width: 97%; - } - - #message { - height: 350px; - } - - #messageContainer { - width: 100%; - } - - #buttons { - clear:both; - width: 90%; - } - - #buttons div { - display: inline-block; - margin: 10px 10px 0; - width: 130px; - height: 40px; - } - - #font{ - position: relative; - top: 4px; - } - - #font span:first-child{ - margin-left: 3px; - } - - #font p{ - margin-left: 8px; - position: relative; - top: -4px; - } - - #mobile-font{ - display: none; - width: 301px; - position: absolute; - left: 50%; - top: 452px; - margin-left: -155px; - text-align: center; - font-size: 24pt; - } - - #mobile-increase{ - float: right; - width: 136px; - height: 53px; - line-height: 53px; - background: #fff; - border: 1px solid #888888; - border-radius: 4px; - } - - #mobile-decrease{ - float: right; - width: 136px; - height: 53px; - line-height: 53px; - background: #fff; - border: 1px solid #888888; - margin-right: 25px; - border-radius: 4px; - } -} - -/* -====================== -==Keyboard Styling== -====================== -*/ - -#kmw-language-menu p { - color: #000 !important; -} - -#kmw-language-menu .selected { - background-color: gray !important; -} - -.tablet .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { - top: -33%; -} +/* KMW LIVE CSS for iPad and other tablet devices */ + +/* +====================== +==Universal Elements== +====================== +*/ + +html { + overflow-y: scroll; + overflow-x: hidden; +} + +body { + width:100%; + font-family: Verdana, Arial, Helvetica, sans-serif; + color:#2D2C2C; + background-color: #eeeeee; + margin:0px; + } +section { + background-color: darkred; +} + +a { + text-decoration:none; + color: #AD4A28; + } + +a:hover { + text-decoration:underline; + } + +h3 { + font-size:18px; + } + +p { + font-size:13px; + line-height:1.5em; + } + +header, footer { + width:100%; + margin:0px auto; + /*clear: both;*/ + } + +hr { + display: none; + } + +.box { + -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; + -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); + } + +/* +=================== +==Header Elements== +=================== +*/ +header { + margin-top:0px; + } + +#headerLeft img { + display: block; /* default (inline) display inserts an unwanted bottom border */ + margin-top:0px; + height:60px; + /*-webkit-border-radius: 0px 0px 8px 8px; -moz-border-radius: 0px 0px 8px 8px; border-radius: 0px 0px 8px 8px;*/ + } + +header > div > img { + display: block; + width: 100%; + height: 8px; +} + + +/* Expanding the search box */ +/* @media screen and (940px <= width <= 1045px) { + .main-header { + grid-template-columns: 2fr 1fr 1fr; + } +} */ + +.main-header { + width: 100%; + grid-template-columns: 3fr 1fr; +} + +.left-header { + width: 70vw; +} + +.right-header { + width: 300px; +} + +/* +==================== +==Content Elements== +==================== +*/ +#content { + width: 100%; /* specific for tablet and mobile */ + margin: 0px auto; + background-color: #eeeeee; + /*min-height:375px;*/ + } + + +/* KMW Main App */ +#app { + /*float:left;*/ + /*height:330px;*/ + width:100%; /*710px; */ + margin: 0px;/*30px 15px 15px;*/ + } + +#KeymanWebControl { + display: none; + } + +#exampleBox, #example { + display: none; + } + +#messageContainer { + width: 80%; + float:left; + } + +#message { + height:195px; + width: 100%;/*554px;*/ + float:left; + margin: 10px; + color:black; + font-size:17px; + font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; + } + +/* KMW App Buttons */ + +#buttons { + float: right; + width:15%; + margin: 0px 20px; + margin-top: -6px; + } + +#buttons div { + width:140px; + -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; + background: #fff; + border: 1px solid #888888; + margin: 0px 10px; + padding: 3px; + padding-top: 9px; + height: 41px; + line-height: 36px; + background-repeat: no-repeat; + background-position: center left; + } + +#buttons div:disabled { + cursor: default !important; + color: gray !important; + border-color: gray !important; + } + +#buttons p{ + margin-left: 41px; +} + +#search.links, #search{ + background-image:url('../img/btn_google_small.png'); + +} + +#search.linksOff{ + background-image:url('../img/btn_google_small_white.png'); +} + +#copy.links, #copy{ + background-image:url('../img/btn_copy_small.png'); + +} + +#copy.linksOff{ + background-image:url('../img/btn_copy_small_white.png'); +} + +#buttons div * { + display:inline; + } + +div.links { + cursor:pointer; + } + +div.linksOff { + cursor:default !important; + border: 1px solid #cccccc !important; + } + +div.linksOff * { + color: gray; + -webkit-user-select:none; + } + +/* Aside Elements */ + +aside { + display:none; + } + +#font-size{ + display: none; +} + +/* + +#font, +=================== +==Footer Elements== +=================== +*/ +.footer, footer { + display: none; + background-color: #6A2915; + height:50px; + left:0px; + bottom:0px; + position: fixed; + /* -webkit-border-radius: 8px 8px 0px 0px; -moz-border-radius: 8px 8px 0px 0px; border-radius: 8px 8px 0px 0px; */ + } + +nav ul { + list-style: none outside none; + width:90%; + margin:0px auto; + padding:15px 0px; + } + +nav li { + display:inline; + padding:20px 39px; + } + +nav a { + color:#eee; + font-family:Tahoma; + font-weight:bold; + font-size:10.7px; + } + +.messageBox { + box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + background: #c4c4c4; + position: fixed; + left: 50%; + top: 20%; + z-index: 999 !important; + margin-left: -250px; + margin-top: -100px; + width: 500px; + height: 200px; +} + +.messageBox div { + width: 464px; + height: 134px; + left: 10px; + top: 10px; + padding: 8px; + font-size: 13px; + position: absolute; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 3px; + background: white; +} + +.messageBox button { + width:83px; + position: absolute; + right: 10px; + bottom: 4px; + background: #414141; + border-top: 1px solid #383838; + border-right: 1px solid #1F1F1F; + border-bottom: 1px solid #151515; + border-left: 1px solid #1F1F1F; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + color: white; + font: bold 12px Helvetica, Verdana, Arial, sans-serif; + text-shadow: 0px -1px 1px #1E2D4D; + text-align:center; + margin: 0 auto 6px; + padding: 3px; + } + +.messageBox button:disabled { + cursor: default !important; + color: gray !important; + -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; + -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; + -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; + -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; + box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; +} + +.messageBox button:hover { + -webkit-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -moz-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -ms-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + -o-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; + cursor: pointer; +} + +.messageBox button:active { + -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; + -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; + -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; + -o-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; + box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; +} + +.progressBox { + box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); + background: #c4c4c4; + position: fixed; + left: 50%; + top: 20%; + z-index: 999; + margin-left: -200px; + margin-top: -54px; + width: 400px; + height: 54px; +} + +.progressBox div { + width: 364px; + height: 18px; + left: 10px; + top: 10px; + padding: 8px; + background: url('../img/wait.gif') no-repeat 354px 8px white; + font-size: 13px; + position: absolute; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 3px; +} + +/* Elements modified for tablet */ +#headerBackground { + width: 100%; + background-color:white; +} + +#headerLeft { + float: left; + margin-left: 28px; +} + +#headerRight { + text-align: right; + height: 40px; + float: right; + padding-bottom: 33px; + padding-right: 10px; +} + +#headerRight-beta { + display: block; + font-weight: bold; + color: red; + font-size: 16pt; + padding: 16px 12px 0; +} + +#headerRight-link { + padding: 0 12px 0; +} + + +#instructions { + margin:10px; + font:12pt Helvetica,Verdana,Arial,sans-serif; + color: white; +} + +/* Additional rules for portrait orientation */ +@media only screen and (orientation: landscape) { + #buttons{ + padding-top: 11px; + } + #buttons div { + margin: 4px 20px 10px 0px; + padding: 0px; + } + #font span:first-child{ + margin-left: 3px; + } + #font p{ + margin-left: 8px; + position: relative; + top: -5px; + } + #mobile-font{ + display: none; + width: 136px; + border-radius: 4px; + position: absolute; + left: 100%; + top: 136px; + margin-left: -170px; + text-align: center; + font-size: 24pt; + background: #fff; + } + + #mobile-increase{ + height: 40px; + line-height: 40px; + border-bottom: solid 1px #000; + } + + #mobile-decrease{ + height: 40px; + line-height: 40px; + } +} + +/* Additional rules for portrait orientation */ +@media only screen and (orientation: portrait) { + + #app { + width: 97%; + } + + #message { + height: 350px; + } + + #messageContainer { + width: 100%; + } + + #buttons { + clear:both; + width: 90%; + } + + #buttons div { + display: inline-block; + margin: 10px 10px 0; + width: 130px; + height: 40px; + } + + #font{ + position: relative; + top: 4px; + } + + #font span:first-child{ + margin-left: 3px; + } + + #font p{ + margin-left: 8px; + position: relative; + top: -4px; + } + + #mobile-font{ + display: none; + width: 301px; + position: absolute; + left: 50%; + top: 452px; + margin-left: -155px; + text-align: center; + font-size: 24pt; + } + + #mobile-increase{ + float: right; + width: 136px; + height: 53px; + line-height: 53px; + background: #fff; + border: 1px solid #888888; + border-radius: 4px; + } + + #mobile-decrease{ + float: right; + width: 136px; + height: 53px; + line-height: 53px; + background: #fff; + border: 1px solid #888888; + margin-right: 25px; + border-radius: 4px; + } +} + +/* +====================== +==Keyboard Styling== +====================== +*/ + +#kmw-language-menu p { + color: #000 !important; +} + +#kmw-language-menu .selected { + background-color: gray !important; +} + +.tablet .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { + top: -33%; +} From aec44d28c9f51a9ca5f6b5395f26d8265b7e153a Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:39:26 +0700 Subject: [PATCH 31/38] chore: add js files --- cdn/dev/js/kmwBody.js | 234 ++-- cdn/dev/js/kmwHeader.js | 2710 +++++++++++++++++++-------------------- 2 files changed, 1472 insertions(+), 1472 deletions(-) diff --git a/cdn/dev/js/kmwBody.js b/cdn/dev/js/kmwBody.js index d0f800a..bd9701c 100644 --- a/cdn/dev/js/kmwBody.js +++ b/cdn/dev/js/kmwBody.js @@ -1,118 +1,118 @@ -document.addEventListener('DOMContentLoaded', function() { - // Define the divider, text area and keyboard - const container = document.querySelector('.container-flex') - const divider = document.getElementById('Divider') - - const resizer = divider.querySelector('#resizeGrip') - const prevElementOfResizer = divider.previousElementSibling.querySelector('.text-area') - const nextElementOfResizer = divider.nextElementSibling - - let isResizing = false; - - let startY, startHeightTop, startHeightBottom = 0 - - const mouseDownHandler = (e) => { - e.preventDefault(); - resizer.style.cursor = 'grabbing' - isResizing = true - - startY = e.clientY - startHeightTop = prevElementOfResizer.offsetHeight - startHeightBottom = nextElementOfResizer.offsetHeight - - document.addEventListener('mousemove', mouseMoveHandler) - document.addEventListener('mouseup', mouseUpHandler) - } - - const mouseUpHandler = () => { - resizer.style.removeProperty('cursor') - isResizing = false - document.removeEventListener('mousemove', mouseMoveHandler) - } - - const mouseMoveHandler = function (e) { - if (!isResizing) return; - - let deltaY = e.clientY - startY // Get up or down direction - - let newTopHeight = startHeightTop + deltaY - let newBottomHeight = startHeightBottom - deltaY - - newTopHeight = Math.max(100, Math.min(newTopHeight, window.innerHeight * 0.8)) - newBottomHeight = Math.max(100, Math.min(newBottomHeight, window.innerHeight * 0.7)) - - prevElementOfResizer.style.height = `${newTopHeight}px` - nextElementOfResizer.style.height = `${newBottomHeight}px` - - if (newBottomHeight <= 200) { - fullScreenSize() - } - } - - /* Hide-Show Keyboard */ - const hideKeyboardBtn = document.querySelector('#hideKeyboard') - - let isTextAreaFullHeight = false - const fullHeightTextArea = window.innerHeight * 0.9 - const defaultHeightTextArea = window.innerHeight * 0.3 - - function defaultSize() { - prevElementOfResizer.style.height = `${defaultHeightTextArea}px` - nextElementOfResizer.style.height = `500px` - // nextElementOfResizer.style.width = `900px` - isTextAreaFullHeight = false - } - - function fullScreenSize() { - prevElementOfResizer.style.height = `${fullHeightTextArea}px` - isTextAreaFullHeight = true - } - - hideKeyboardBtn.addEventListener('click', () => { - if (isTextAreaFullHeight) { - defaultSize() - } else { - fullScreenSize() - } - }) - - // Copy tool - const copyBtn = document.querySelector('#copyTool') - const textArea = document.querySelector('#textArea') - copyBtn.addEventListener('click', async function() { - try { - let textToCopy = textArea.value.trim() - - if(!textToCopy) { - copyBtn.classList.replace('fa-copy', 'fa-xmark') - // copyBtn.textContent = ' No characters to copy' - setTimeout(() => { - copyBtn.classList.replace('fa-xmark', 'fa-copy') - copyBtn.textContent = '' - }, 3000) - return; - } - - await navigator.clipboard.writeText(textToCopy) - - copyBtn.classList.replace('fa-copy', 'fa-check'); - - setTimeout(() => { - copyBtn.classList.replace('fa-check', 'fa-copy'); - }, 1000); - - } catch (error) { - console.error('Failed to copy: ', error) - } - }) - - // Font slider - const fontSliderBtn = document.querySelector('#fontSizeRange') - fontSliderBtn.addEventListener('input', function() { - textArea.style.fontSize = `${this.value}px` - }) - - defaultSize() - - resizer.addEventListener('mousedown', mouseDownHandler) +document.addEventListener('DOMContentLoaded', function() { + // Define the divider, text area and keyboard + const container = document.querySelector('.container-flex') + const divider = document.getElementById('Divider') + + const resizer = divider.querySelector('#resizeGrip') + const prevElementOfResizer = divider.previousElementSibling.querySelector('.text-area') + const nextElementOfResizer = divider.nextElementSibling + + let isResizing = false; + + let startY, startHeightTop, startHeightBottom = 0 + + const mouseDownHandler = (e) => { + e.preventDefault(); + resizer.style.cursor = 'grabbing' + isResizing = true + + startY = e.clientY + startHeightTop = prevElementOfResizer.offsetHeight + startHeightBottom = nextElementOfResizer.offsetHeight + + document.addEventListener('mousemove', mouseMoveHandler) + document.addEventListener('mouseup', mouseUpHandler) + } + + const mouseUpHandler = () => { + resizer.style.removeProperty('cursor') + isResizing = false + document.removeEventListener('mousemove', mouseMoveHandler) + } + + const mouseMoveHandler = function (e) { + if (!isResizing) return; + + let deltaY = e.clientY - startY // Get up or down direction + + let newTopHeight = startHeightTop + deltaY + let newBottomHeight = startHeightBottom - deltaY + + newTopHeight = Math.max(100, Math.min(newTopHeight, window.innerHeight * 0.8)) + newBottomHeight = Math.max(100, Math.min(newBottomHeight, window.innerHeight * 0.7)) + + prevElementOfResizer.style.height = `${newTopHeight}px` + nextElementOfResizer.style.height = `${newBottomHeight}px` + + if (newBottomHeight <= 200) { + fullScreenSize() + } + } + + /* Hide-Show Keyboard */ + const hideKeyboardBtn = document.querySelector('#hideKeyboard') + + let isTextAreaFullHeight = false + const fullHeightTextArea = window.innerHeight * 0.9 + const defaultHeightTextArea = window.innerHeight * 0.3 + + function defaultSize() { + prevElementOfResizer.style.height = `${defaultHeightTextArea}px` + nextElementOfResizer.style.height = `500px` + // nextElementOfResizer.style.width = `900px` + isTextAreaFullHeight = false + } + + function fullScreenSize() { + prevElementOfResizer.style.height = `${fullHeightTextArea}px` + isTextAreaFullHeight = true + } + + hideKeyboardBtn.addEventListener('click', () => { + if (isTextAreaFullHeight) { + defaultSize() + } else { + fullScreenSize() + } + }) + + // Copy tool + const copyBtn = document.querySelector('#copyTool') + const textArea = document.querySelector('#textArea') + copyBtn.addEventListener('click', async function() { + try { + let textToCopy = textArea.value.trim() + + if(!textToCopy) { + copyBtn.classList.replace('fa-copy', 'fa-xmark') + // copyBtn.textContent = ' No characters to copy' + setTimeout(() => { + copyBtn.classList.replace('fa-xmark', 'fa-copy') + copyBtn.textContent = '' + }, 3000) + return; + } + + await navigator.clipboard.writeText(textToCopy) + + copyBtn.classList.replace('fa-copy', 'fa-check'); + + setTimeout(() => { + copyBtn.classList.replace('fa-check', 'fa-copy'); + }, 1000); + + } catch (error) { + console.error('Failed to copy: ', error) + } + }) + + // Font slider + const fontSliderBtn = document.querySelector('#fontSizeRange') + fontSliderBtn.addEventListener('input', function() { + textArea.style.fontSize = `${this.value}px` + }) + + defaultSize() + + resizer.addEventListener('mousedown', mouseDownHandler) }) \ No newline at end of file diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js index c9a76d4..f5c7941 100644 --- a/cdn/dev/js/kmwHeader.js +++ b/cdn/dev/js/kmwHeader.js @@ -1,1356 +1,1356 @@ -keyman = getKeymanWeb() - -function getKeymanWeb() { - if(window.tavultesoft) { - return window.tavultesoft.keymanweb; - } - return window.keyman; -} -/* Global Variables */ -let selectedKbList = [] // Main array for the search, kb selection...etc. -let kbSearchData = [] // For History search -let kmwLang = keyman.getActiveLanguage() -let kmwKb = keyman.getActiveKeyboard() - -const clearSearchIcon = document.querySelector('#clearSearchIcon') -const magnifying = document.querySelector('#magnifyingGlassIcon') - -const elements = { - worldMapBtn: document.querySelector('#worldMap'), - kmwControls: document.querySelector('#KeymanWebControl'), - - kbSelection: document.querySelector('#keyboardSelection'), - keyboardSelectionButton: document.querySelector('#keyboardSelectionButton'), - caretRightIcon: keyboardSelectionButton.querySelector('.fa-caret-right'), - - searchBar: document.querySelector('#searchBar'), - searchInput: document.querySelector('#searchInput'), - searchDropdownMenu: document.querySelector('#searchDropdownMenu'), - searchIcons: document.querySelector('#searchIcons'), -} - -const state = { - mapIsOpen: false -} - -/* - ===================================== Default keyboard ========================================= -*/ - -function defaultKeyboard(kbdname = "basic_kbdus", languageCode = "en") { - if(!exists(kbdname, languageCode)) { - if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' - return - } - setKeyboardWithDirection(kbdname, languageCode) -} - -/* - ============================= Toggle between World Map and Search ============================== -*/ -elements.worldMapBtn?.addEventListener('click', (e) => { - e.preventDefault() - state.mapIsOpen = true - if (state.mapIsOpen == true) { - openMap() - keyman.addEventListener('keyboardchange', () => { - location.replace(`#${keyman.getActiveLanguage()},${keyman.getActiveKeyboard()}`) - updateExample(keyman.getActiveKeyboard()) - setTimeout(() => { - applyClassToKb(), 0 - }) - }) - } else { - openSearch() - } -}) - -function openSearch() { - state.mapIsOpen = false - hideEls( - elements.kmwControls, - ) - showEls( - elements.searchDropdownMenu, - elements.searchIcons - ) - - if (selectedKbList.length > 0) { - elements.caretRightIcon.textContent = selectedKbList.length - removeClass(elements.caretRightIcon, 'fa-magnifying-glass') - } else { - elements.caretRightIcon.textContent = '' - elements.caretRightIcon.classList.add('fa-caret-right') - } - - elements.searchBar.replaceChildren( - elements.searchInput, - elements.searchIcons, - elements.searchDropdownMenu - ) -} - -function openMap() { - state.mapIsOpen = true - removeClass( - elements.kmwControls, 'hidden', - elements.caretRightIcon, 'fa-caret-right' - ) - hideEls( - elements.searchDropdownMenu - ) - removeTextContent( - elements.caretRightIcon - ) - elements.keyboardSelectionButton.removeAttribute('id', 'keyboardSelectionButton') - elements.keyboardSelectionButton.setAttribute('id', 'returnToSearchButton') - elements.caretRightIcon.classList.add('fa-magnifying-glass') - elements.keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" - elements.keyboardSelectionButton.style.border = '0px' - elements.keyboardSelectionButton.classList.add('return-to-search') - elements.kbSelection.style.display = "none" - elements.searchBar.replaceChildren( - elements.kmwControls - ) -} - -function returnToSearch() { - elements.keyboardSelectionButton.removeAttribute('id', 'returnToSearchButton') - elements.keyboardSelectionButton.setAttribute('id', 'keyboardSelectionButton') - - if ((selectedKbList?.length || 0) < 1) { - elements.caretRightIcon.classList.add('fa-caret-right') - removeClass(elements.caretRightIcon, 'fa-magnifying-glass') - elements.caretRightIcon.textContent = '' - } - - elements.keyboardSelectionButton.style.backgroundColor = "" - elements.kbSelection.style.display = "block" - openSearch() -} - -function waitForElement(selector) { - return new Promise((resolve) => { - const interval = setInterval(() => { - const element = document.querySelector(selector) - if (element) { - clearInterval(interval) - resolve(element) - } - }, 100) - }) -} - -waitForElement('#returnToSearchButton').then((element) => { - element.addEventListener('click', (e) => { - e.preventDefault() - returnToSearch() - }) -}) - -waitForElement(".kmw-osk-frame").then((oskDiv) => { - document.querySelector('.keyboard-area').appendChild(oskDiv) -}) - -/* - ==================== Search Interaction =================== -*/ - -/* Search Input */ -const dropdown = new bootstrap.Dropdown(elements.searchInput, { - autoClose: 'outside' -}) - -document.addEventListener('click', (e) => { - if (!elements.searchInput.contains(e.target) && !elements.searchDropdownMenu.contains(e.target)) { - dropdown.hide() - } -}) - -elements.searchInput.addEventListener('click', (e) => { - e.stopPropagation() - // defaultKeyboard() - dropdown.show() -}) - -// Hide Dropdown Search on Mouse leave -elements.searchDropdownMenu.addEventListener('mouseleave', (e) => { - e.preventDefault() - dropdown.hide() -}) - -/* - =========================== Utility functions ============================ -*/ -function hideEls(...elements) { - return elements.every(el => el.classList.add('hidden')) -} - -function showEls(...elements) { - return elements.every(el => el.classList.remove('hidden')) -} - -function removeClass(element, className) { - return element.classList.remove(className) -} - -function removeTextContent(...elements) { - return elements.every(el => el.textContent = '') -} - -/* Elements validation */ -function exists(...elements) { - return elements.every(el => el != null) -} - -document.addEventListener('DOMContentLoaded', () => { - /* UI Behavior of the Selected Keyboard menu */ - if (exists(elements)) { - elements.keyboardSelectionButton.addEventListener('mouseenter', () => { - elements.kbSelection.classList.add('open') - }) - elements.keyboardSelectionButton.addEventListener('click', () => { - elements.kbSelection.classList.remove('open') - }) - elements.kbSelection.addEventListener('mouseleave', () => { - elements.kbSelection.classList.remove('open') - }) - } -}) - -/* - === Keyboard Execution === -*/ -const downloadBtn = document.getElementById('kbDownloadPage') -const textArea = document.getElementById('textArea') -let langExamples = []; - -function selectKb(kbdname, languageCode) { - if(!exists(kbdname, languageCode)) { - if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' - return - } - setKeyboardWithDirection(kbdname, languageCode) -} - -function setTextDirection(targetEls, dir) { - const copyBtn = document.querySelector('#copyTool') - - targetEls.dir = dir - if (dir == 'rtl') { - copyBtn.style.right = '0' - copyBtn.style.left = '10px' - } else { - copyBtn.style.right = '' - copyBtn.style.left = '' - } -} - -// Change and type keyboard -async function setKeyboardWithDirection(kbdname, languageCode) { - const kbSpan = document.querySelector('#kbSpan') - const langTag = `#${languageCode}` - let kbTag = '' - - if (kbdname.match(/Keyboard_*/)) { - kbTag = `${kbdname}` - } else { - kbTag = `Keyboard_${kbdname}` - } - - location.replace(`${langTag},${kbTag}`) - await keyman.addKeyboards(kbdname) - const kbd = keyman.getKeyboard(kbdname, languageCode) - await keyman.setActiveKeyboard(kbdname, languageCode) - - // setTimeout(() => { - // applyClassToKb(), 0 - // }) - - if(kbd) { - textArea.placeholder = `The ${kbdname} keyboard is selected. Start typing...` - kbSpan.innerHTML = `${kbdname}` - - setTextDirection(textArea, textArea.dir) - } - updateExample(kbdname) - if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname) -} - -/* Language Examples AJAX */ -async function updateExample(kbdname) { - const keymanExample = document.getElementById("example") - const exampleBox = document.getElementById("exampleBox") - - if (!keymanExample || !exampleBox) return false; - - if(kbdname == '') - { - keymanExample.textContent = `No example is available due to empty Keyboard name.` - return true; - } - - let activeLanguage = keyman.getActiveLanguage(); - - if(langExamples[activeLanguage + '_' + kbdname]) - { - keymanExample.innerHTML = langExamples[activeLanguage + '_' + kbdname]; - return true; - } - - langExamples[activeLanguage + '_' + kbdname] = 'Loading...'; - keymanExample.innerHTML = 'Loading...'; - - const link = `/prog/languageexample.php?keyboard=${kbdname}&language=${activeLanguage}`; - try { - const response = await fetch(link); - if(response.status == 200) { - const content = await response.text(); - - langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = content; - } else { - throw new Error(`Unable to retrieve content, status was ${response.status}: ${response.statusText}`); - } - } catch(e) { - langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = 'Error retrieving example: '+e.message; - throw e; - } -} - -function applyClassToKb() { - - const kbArea = document.querySelector('.keyboard-area') - if (!kbArea) return - - const apply = () => { - const child = kbArea.children - for (const c of child) { - if (!c.classList.contains('kmw-osk-frame')) { - c.classList.add('kmw-osk-frame') - c.classList.add('kmw-help-osk-frame') - } - } - } - - apply() - - // const observer = new MutationObserver(() => { - // for (const m of mutations) { - // if (m.type === 'childlist' && m.addedNodes.length) { - // apply() - // } - // } - // }) - // observer.observe(kbArea, {childList: true}) -} - -/* Search */ -const kbSearchCard = document.getElementById('kbSearchCardUI'); -let debounceTimer - -/* Pagination */ -prevBtn = document.getElementById('prevPage') -nextBtn = document.getElementById('nextPage') -pageInfo = document.getElementById('pageInfo') - -searchResultCount = document.getElementById('resultCount') -paginationCtrl = document.getElementById('paginationControls') - -let currentPage = 1 -let currentQuery = '' -let totalPage -const itemPerPage = 10 - -prevBtn.addEventListener('click', goPrevPage) -nextBtn.addEventListener('click', goNextPage) - -function updatePaginationCtrl() { - pageInfo.textContent = `${currentPage} of ${totalPage}` - nextBtn.disabled = currentPage >= totalPage - prevBtn.disabled = currentPage <= 1 -} - -function goPrevPage() { - if (currentPage > 1) { - currentPage-- - searchKeyboard(currentQuery, currentPage) - } -} - -function goNextPage() { - if (currentPage < totalPage) { - currentPage++ - searchKeyboard(currentQuery, currentPage) - } -} - -/* Click: Open Search and Display search instructions */ -elements.searchInput.addEventListener('click', function(e) { - const query = e.target.value.trim() - - defaultKeyboard() - if (query == "") { - resetSearch() - } else { - searchKeyboard(query) - } -}) - -/* Input: Search and Display keyboards */ -elements.searchInput.addEventListener('input', function(e) { - handleSearch(e.target.value) -}) - -clearSearchIcon.addEventListener('click', () => { - elements.searchInput.value = '' - handleSearch() - elements.searchInput.focus() -}) - -function handleSearch(value = "") { - currentQuery = value.trim() - currentPage = 1 - - updateSearchIcon(value) - - if (!currentQuery) { - resetSearch() - return - } - debounceSearch(currentQuery, currentPage) -} - -function resetSearch() { - paginationCtrl.style.display = 'none' - defaultSearch() -} - -function updateSearchIcon(value) { - const hasValue = value.length > 0 - magnifying.style.display = hasValue ? 'none' : 'inline' - clearSearchIcon.style.display = hasValue ? 'inline' : 'none' -} - -function debounceSearch(query, page) { - clearTimeout(debounceTimer) - if (query.length > 1) { - debounceTimer = setTimeout(() => { - searchKeyboard(query, page) - }, 300) - } -} - -/* == Section == - Search -*/ - -/* Display top downloads with search Instruction */ -async function defaultSearch() { - kbSearchCard.innerHTML = `

    Loading...

    ` - try { - let response = await fetch(`https://api.keyman.com/search/2.0?q=p:popular`) - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}`) - } - - let data = await response.json() - - let mostDownloadkb = data.keyboards - - if (!mostDownloadkb || !Array.isArray(mostDownloadkb)) { - throw new Error(`Invalid API response structure`) - } - displaySearch(mostDownloadkb) - } - catch(error) { - console.error(`Error fetching ${error}`) - kbSearchCard.innerHTML = `
    No keyboards are found.
    ` - paginationCtrl.style.display = 'none' - } -} - -/* Get query and return search */ -async function searchKeyboard(query = null, page) { - kbSearchCard.innerHTML = `
    Searching ${query}...
    ` - kbSearchCard.style.display = 'block' - - let response = await fetch(`https://api.keyman.com/search/2.0?q=${encodeURIComponent(query)}&p=${page}`) - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}`) - } - - searchHistory(query) - let data = await response.json() - // Found with Context: Setup pagination - if (data.context) { - totalPage = data.context.totalPages || 1; - currentPage = data.context.pageNumber || 1; - } else { - totalPage = Math.ceil(data.keyboards.length / itemPerPage); - } - - // Validate data.keyboards - let keyboardData = data.keyboards - if (!keyboardData || !Array.isArray(keyboardData)) { - throw new Error("Invalid API response structure") - } - - // Get total result - let totalFound = data.context.totalRows - - updatePaginationCtrl() - displaySearch(keyboardData, totalFound, query) -} - -/* Display items return from search */ -function displaySearch(data, total = 0, query = '') { - kbSearchCard.innerHTML = ''; - - if (!data || data.length == 0) { - kbSearchCard.innerHTML = 'No keyboards are found.' - paginationCtrl.style.display = 'none' - return - } - - if (total) { - searchResultCount.innerHTML = `${total} results` - searchResultCount.classList.remove('hidden') - } - - // Getting searched Word ready for highlight - const marked = getMarkedContext(query) - - const searchInstruction = document.querySelector('.search-instruction') - const kbHrTitle = document.querySelector('.keyboard-title') - if (!query) { - searchInstruction.classList.remove("hidden") - kbHrTitle.textContent = "Most Downloads" - } else { - searchInstruction.classList.add("hidden") - kbHrTitle.textContent = "" - } - data.forEach(kb => { - const card = searchKbCardUI(kb, marked, selectedKbList, data) - kbSearchCard.appendChild(card) - }) - paginationCtrl.style.display = 'flex'; -} - -// UI Search card -function searchKbCardUI(kb, marked = '', selectedKbList, data) { - const kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) - // Keyboard card container - let cardWrap = document.createElement('div') - cardWrap.classList.add('card-wrap') - cardWrap.setAttribute('id', 'keyboardCardWrap') - - // Keyboard header container - let cardHeader = document.createElement('div') - cardHeader.classList.add('card-header') - - const {matchFound, matchField, matchValue} = highlightSearchContext(kb, marked) - - const kbNameHeading = matchFound ? showMarkedContext(kb, matchField, matchValue) - : (() => { - const heading = document.createElement('h4') - heading.innerHTML = kb.name - return heading - }) - - // Keyboard Plus (+) icon - const kbIconPTag = document.createElement('p') - kbIconPTag.textContent = kbFoundInList ? "-" : "+" - kbIconPTag.style.fontSize = '20px' - kbIconPTag.style.cursor = 'pointer' - kbIconPTag.classList.add('kb-icon-plus') - - checkKbCardUI(kbIconPTag, cardWrap, kb) - // Keyboard ID - const kbIdPTag = document.createElement('p') - kbIdPTag.classList.add('keyboard-id') - kbIdPTag.textContent = kb.id - - // Keyboard Description - const kbDescHeading = truncateDesc(kb, matchField, marked) - - // Keyboard monthly downloads and platform support - const kbSpecs = document.createElement('div') - kbSpecs.classList.add('keyboard-specs') - - const kbDownloadHeading = document.createElement('h6') - kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` - kbDownloadHeading.classList.add('monthly-download') - - const kbPlatformSupport = document.createElement('div') - kbPlatformSupport.classList.add('platform') - kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) - - // Append children - cardHeader.appendChild(kbNameHeading) - cardHeader.appendChild(kbIconPTag) - - kbSpecs.appendChild(kbDownloadHeading) - kbSpecs.appendChild(kbPlatformSupport) - - cardWrap.appendChild(cardHeader) - cardWrap.appendChild(kbIdPTag) - cardWrap.appendChild(kbDescHeading) - cardWrap.appendChild(kbSpecs) - - // Choose keyboard to selection - kbIconPTag.onclick = (e) => { - e.stopPropagation() - addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) - textArea.focus() - selectKb() - } - // console.log("Recent:", historyKbSelection.getHistory()); - - return cardWrap -} - -// Disable or Enable search card -function checkKbCardUI(kbIconPTag, cardWrap, kb) { - // For checking if the keyboard exists in selected Kbs - let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) - if (kbFoundInList) { - cardWrap.classList.add('disabled') - } else { - cardWrap.classList.remove('disabled') - } -} - -// Highlight word searched -function getMarkedContext(query) { - let escapedTerm = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - return new RegExp(escapedTerm, 'i') -} - -// Find a match between Search Context and Language, Keyboard name, Description -function highlightSearchContext(kb, marked) { - let matchFound = false - let matchField = "" - let matchValue = "" - - // Get and find language that matches the search - for (lang in kb.languages) { - let langData = kb.languages[lang] - for (key in langData) { - const value = langData[key] - if (typeof value == "string" && marked.test(value)) { - matchFound = true - matchValue = value.replace(marked, (m) => m ? `${m}` : m) - matchField = "language" - break - } - } - if (matchFound) break - } - - // Find a match for keyboard name if language is not a match - if (!matchFound && marked.test(kb.name)) { - matchFound = true - matchValue = kb.name.replace(marked, '$&') - matchField = "keyboard" - } - - // Find a match for keyboard description if name is not a match - if (!matchFound && marked.test(kb.description)) { - matchFound = true - matchField = "description" - } - - return {matchField, matchValue, matchFound} -} - -// Display Highlighted Search Context -function showMarkedContext(kb, matchField, matchValue) { - const kbNameHeading = document.createElement('h4') - - const kbHelpLink = document.createElement('a') - kbHelpLink.href = `https://help.keyman.com/keyboard/${kb.id}` - kbHelpLink.target = '_blank' - kbHelpLink.rel = 'noopener noreferrer' - - // Display matched language - const langNameSpan = document.createElement('span') - langNameSpan.style.fontSize = "14px" - if (matchField == "language") { - langNameSpan.innerHTML = matchField == "language" ? ` (${matchValue} language)` : "" - } - - // Display matched keyboard - if (matchField == "keyboard") { - kbHelpLink.innerHTML = matchValue - } else { - kbHelpLink.textContent = kb.name - } - kbNameHeading.appendChild(kbHelpLink) - kbNameHeading.appendChild(langNameSpan) - kbNameHeading.addEventListener('click', () => { - const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) - const newURL = checkedURL + kb.id - window.open(newURL, '_blank') - }) - - return kbNameHeading -} - -// Truncated Keyboard Description -function truncateDesc(kb, matchField, marked) { - const kbDescHeading = document.createElement('h6') - kbDescHeading.classList.add("keyboard-description") - const word_limits = 90 - - let temp = document.createElement('div') - temp.innerHTML = kb.description - - let fullDesc = kb.description - let plainText = temp.textContent - let shortText = "" - - let isTruncated = false - - if (plainText.length >= word_limits) { - shortText = plainText.slice(0, word_limits) + "..." - kbDescHeading.innerHTML = shortText - isTruncated = true - } else { - kbDescHeading.innerHTML = fullDesc - isTruncated = false - } - - if (isTruncated) { - const toggleBtn = document.createElement('a') - toggleBtn.href = "#" - toggleBtn.style.marginLeft = "6px" - toggleBtn.textContent = "Show more" - - toggleBtn.addEventListener('click', e => { - e.preventDefault() - const isExpanded = toggleBtn.textContent == "Show more" - kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, (m) => m ? `${m}` : m) : fullDesc - if (matchField == 'description') { - kbDescHeading.innerHTML = isExpanded ? fullDesc.replace(marked, '$&') : shortText - } - kbDescHeading.style.color = isExpanded ? 'black' : 'gray' - toggleBtn.textContent = isExpanded ? "Show less" : "Show more" - kbDescHeading.appendChild(toggleBtn) - }) - kbDescHeading.appendChild(toggleBtn) - } - - return kbDescHeading -} - -/* - == End of Search Section == -*/ - -// Platform Support -function platformSupport(data) { - const platformMap = { - android: "Android", - desktopWeb: "Web", - ios: "iPhone and iPad", - linux: "Linux", - macos: "macOS", - mobileWeb: "Mobile web", - windows: "Windows" - } - let platformSpan = Object.entries(data) - .filter(([_, supportLevel]) => supportLevel == 'full') - .map(([platform]) => `${platformMap[platform]}`).join('') - - return platformSpan -} - -/* == Section == - Keyboard Selection Menu -*/ -function addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) { - const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') - let isSelected = selectedKbList.some(selected => selected.id == kb.id) - addDataKb(data) - // Remove keyboard - if (isSelected) { - removeKbSelected(kb.id) - kbIconPTag.textContent = '+' - generateKbUI(selectedKbList) - checkKbCardUI(kbIconPTag, cardWrap, kb) - - return - } - if(selectedKbList.length < 5) { - addKbToSelection(kb) - generateKbUI(selectedKbList) - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('kb-icon-plus-animate') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('kb-icon-plus-animate') - keyboardSelectionButton.classList.remove('btn-secondary') - keyboardSelectionButton.classList.add('btn-keyman-orange') - }, 800) - - checkKbCardUI(kbIconPTag, cardWrap, kb) - return - } - confirmAndAddKb(() => { - addKbToSelection(kb) - generateKbUI(selectedKbList) - - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('kb-icon-plus-animate') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('kb-icon-plus-animate') - keyboardSelectionButton.classList.remove('btn-secondary') - keyboardSelectionButton.classList.add('btn-keyman-orange') - }, 800) - checkKbCardUI(kbIconPTag, cardWrap, kb) - }) -} - -// Add keyboard for kb search and selection UI -function addKbToSelection(kb) { - const kbInfo = { - "id": kb.id, - "name": kb.name, - "version": kb.version, - "helpLink": kb.helpLink, - "platformSupport": kb.platformSupport, - "totalDownloads": kb.match.totalDownloads, - "sourcePath": kb.sourcePath, - "supportedLanguage": kb.languages, - "lastUpdated": kb.lastModifiedDate - } - // historyKbSelection.add(kbInfo) - selectedKbList.push(kbInfo) -} - -// UI for keyboard selection menu -function generateKbUI(selectedKbList) { - const keyboardSelection = document.getElementById("keyboardSelection") - keyboardSelection.innerHTML = '' - - if(selectedKbList.length < 1) { - triggerKbCount(selectedKbList) - resetKbSelectionMenu() - return - } - - const kbDivHeader = document.createElement('div') - kbDivHeader.textContent = "Keyboard Selection menu" - kbDivHeader.classList.add('kb-item-header') - - const kbDivFoot = document.createElement('div') - kbDivFoot.textContent = "US Basic Keyboard" - kbDivFoot.classList.add('kb-item-footer') - - keyboardSelection.appendChild(kbDivHeader) - - selectedKbList.forEach(data => { - const kbDiv = document.createElement('div') - kbDiv.classList.add("kb-item") - kbDiv.setAttribute('id', `${data.id}`) - - const kbName = document.createElement('span') - kbName.textContent = data.name - - const kbConfigList = document.createElement('ul') - kbConfigList.classList.add('keyboard-configs') - kbConfigList.innerHTML = ` -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • - ` - - const kbDetails = displayKbDetails(data) - - kbDiv.appendChild(kbName) - kbDiv.appendChild(kbConfigList) - kbDiv.appendChild(kbDetails) - keyboardSelection.appendChild(kbDiv) - keyboardSelection.append(kbDivFoot) - - let kbdName = data.id - let langCode = Object.keys(data.supportedLanguage)[0] || "en" - - selectKb(kbdName, langCode) - kbConfigList.addEventListener('click', (e) => { - const target = e.target - if (target.tagName == 'I' && target.dataset.action) { - const action = target.dataset.action - const id = target.dataset.id - const helpLink = target.dataset.helplink - kbConfigMenu(action, id, helpLink) - } - }) - - kbDiv.addEventListener('click', () => { - kbdName = data.id - langCode = Object.keys(data.supportedLanguage)[0] || "en" - textArea.focus() - selectKb(kbdName, langCode) - }) - - kbDivFoot.onclick = () => { - defaultKeyboard() - } - - const kbHelpLink = document.querySelector('#kbHelpdocLink') - kbHelpLink.addEventListener('click', (e) => { - kbConfigMenu('help', '', data.helpLink) - }) - }) - triggerKbCount(selectedKbList) -} - -// Keyboard count for Keyboard selection menu -function triggerKbCount(selectedKbList) { - const kbSelectedLength = selectedKbList.length - const keyboardSelectionButton = document.querySelector('#keyboardSelectionButton') - const keyboardCount = document.querySelector('#kbCount') - - if (kbSelectedLength >= 1) { - keyboardCount.classList.remove('fa-caret-right') - keyboardCount.textContent = `${kbSelectedLength}` - keyboardSelectionButton.classList.add('btn-keyman-orange') - keyboardSelectionButton.classList.remove('btn-secondary') - } else { - keyboardCount.classList.add('fa-caret-right') - keyboardCount.textContent = '' - keyboardSelectionButton.classList.remove('btn-keyman-orange') - keyboardSelectionButton.classList.add('btn-secondary') - } -} - -// Keyboard count default for Keyboard selection menu -function resetKbSelectionMenu() { - const keyboardSelection = document.querySelector("#keyboardSelection") - - const kbDivHeader = document.createElement('div') - kbDivHeader.textContent = "Keyboard Selection menu" - kbDivHeader.classList.add('kb-item-header') - - const kbItem = document.createElement('div') - kbItem.classList.add('.kb-item') - - const pTag = document.createElement('p') - pTag.textContent = "Open Search to get your keyboard" - - const kbDivFoot = document.createElement('div') - kbDivFoot.textContent = "US Basic Keyboard" - kbDivFoot.classList.add('kb-item-footer') - - kbItem.appendChild(pTag) - - keyboardSelection.appendChild(kbDivHeader) - keyboardSelection.appendChild(kbItem) - keyboardSelection.appendChild(kbDivFoot) -} - -// Compare and remove keyboard -function removeKbSelected(kbId) { - if(kbId) { - selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) - } -} - -// Check 6th keyboard -function confirmAndAddKb(onConfirmAdd) { - if (typeof onConfirmAdd != 'function') { - console.log("Expected the onConfirmAdd a function, instead got: " + typeof onConfirmAdd) - alert("Click on the keyboard again to enable.") - } - - const warningDialogUI = limitKbSelectionUI(() => { - onConfirmAdd() - selectedKbList.shift() - generateKbUI(selectedKbList) - }) - - document.body.appendChild(warningDialogUI) -} - -// UI for Keyboard Selected Limitation -function limitKbSelectionUI(onAccept) { - const dialogDiv = document.createElement('div') - dialogDiv.classList.add('warning-container') - - const dialogContentDiv = document.createElement('div') - dialogContentDiv.classList.add('warning-content') - - const dialogCancel = document.createElement('button') - dialogCancel.classList.add('warning-cancel-btn') - dialogCancel.setAttribute('id', 'cancelWarningBtn') - dialogCancel.textContent = 'โœ–' - dialogCancel.onclick = () => { - dialogDiv.remove() - generateKbUI(selectedKbList) - } - - const dialogImgTag = document.createElement('img') - dialogImgTag.classList.add('warning-keyman-image') - dialogImgTag.src = `/cdn/dev/img/keymanweb-mini-logo-88.png` - dialogImgTag.alt = "Keyman Logo" - - const firstKeyboard = selectedKbList[0].name - - const dialogPTag = document.createElement('p') - dialogPTag.classList.add('warning-text') - dialogPTag.innerHTML = `The keyboards selected exceeds the limitation of 5 keyboards. Click 'Allow' to remove the
    ${firstKeyboard} keyboard.` - - const dialogUlTag = document.createElement('ol') - dialogUlTag.textContent = "Your keyboards selection:" - selectedKbList.forEach((kb, index) => { - const dialogLiTag = document.createElement('li') - if (index == 0) { - const markKeyboard = document.createElement('mark') - markKeyboard.textContent = kb.name - dialogLiTag.appendChild(markKeyboard) - } else { - dialogLiTag.textContent = kb.name - } - dialogUlTag.appendChild(dialogLiTag) - - }) - - const dialogAccept = document.createElement('button') - dialogAccept.classList.add('warning-accept-btn') - dialogAccept.setAttribute('id', 'acceptWarningBtn') - dialogAccept.textContent = "Allow" - dialogAccept.onclick = () => { - dialogDiv.remove() - onAccept() - } - - dialogContentDiv.appendChild(dialogCancel) - dialogContentDiv.appendChild(dialogImgTag) - dialogContentDiv.appendChild(dialogPTag) - dialogContentDiv.appendChild(dialogUlTag) - dialogContentDiv.appendChild(dialogAccept) - - dialogDiv.appendChild(dialogContentDiv) - - return dialogDiv -} - -// Seperate list for History/Remember Search - -/* - ========================== To be continued ========================== -*/ -function addDataKb(data) { - let selectedKbData = [] - // console.log(data) - const kbInfo = { - "platformSupport": data.platformSupport, - // "monthlyDownloads": data.match.downloads, - "sourceFile": data.sourcePath, - } - selectedKbData.push(kbInfo) -} - -// End of History search - -// Keyboard selection menu's tools: help, download, and remove -function kbConfigMenu(action, id, helplink) { - if (action == "help") { - window.open(helplink, '_blank') - } - - if (action == "download") { - const downloadUrl = `https://keyman.com/keyboards/install/${id}` - window.open(downloadUrl, '_blank') - } - - if (action == "remove") { - removeKbSelected(id) - generateKbUI(selectedKbList) - triggerKbCount(selectedKbList) - } - - if (action == "info") { - const kbDetails = document.querySelector(`#keyboard-${id}-details`) - - kbDetails.addEventListener('mouseleave', () => { - kbDetails.classList.add('hidden') - }) - kbDetails.classList.remove('hidden') - } -} - -// Keyboard details for Keyboard selection menu -function displayKbDetails(data) { - const item = selectedKbList.find(kb => kb.id == data.id) - if (!item) return; - - const kbDetails = document.createElement('div') - kbDetails.classList.add('keyboard-details') - kbDetails.setAttribute('id', `keyboard-${data.id}-details`) - kbDetails.classList.add('animate__animated', 'animate__fadeIn') - kbDetails.classList.add('hidden') - - const kbDetailsHead = document.createElement('div') - kbDetailsHead.textContent = 'Keyboard Details' - kbDetailsHead.classList.add('kb-item-header') - - const kbDetailsContent = document.createElement('div') - kbDetailsContent.classList.add('keyboard-content-wrapper') - kbDetailsContent.innerHTML = ` -
      -
    • -
      -
      Name
      -
      ${item.name || "N/A"}
      -
      -
    • -
    • -
      -
      Keyboard ID
      -
      ${item.id || "N/A"}
      -
      -
    • -
    • -
      -
      Version
      -
      ${item.version || "N/A"}
      -
      -
    • -
    • -
      -
      Total downloads
      -
      ${item.totalDownloads || 0}
      -
      -
    • -
    • -
      -
      Source Path
      - -
      -
    • -
    • -
      -
      Supported Platforms
      -
      - ${platformSupport(item.platformSupport) || 'No platforms supported'} -
      -
      -
    • -
    • -
      -
      Last Updated
      -
      ${getOnlyDates(item.lastUpdated) || 0}
      -
      -
    • -
    - ` - kbDetails.appendChild(kbDetailsHead) - kbDetails.appendChild(kbDetailsContent) - - return kbDetails -} - -// Get only the YYYY-mm-dd format -function getOnlyDates(dateData) { - const finalDateData = dateData.match(/^\d{4}-\d{2}-\d{2}/) - return finalDateData -} - -// Validate URLs -function validateURL(string) { - try { - const newUrl = new URL(string) - if (newUrl.protocol === 'https:') { - return newUrl - } else { - return false - } - } catch (error) { - console.error(error) - } -} -/* - == End of Keyboard Selection menu Section == -*/ - -/* - == Store data in localStorage to use for reload == -*/ -let appState = { - fontSize: 16, - writtenText: "", - selectedKbList: [], - enabledKb: null, - keyboardSizes: null, - textAreaSizes: null -} -const keyboardContainer = document.querySelector('.keyboard-container') -const fontSizeRange = document.querySelector('#fontSizeRange') - -function getFontSize(element) { - let theFontSize - theFontSize = parseInt(window.getComputedStyle(element).fontSize) || "16" - - return theFontSize -} - -function getSelectedKb() { - return selectedKbList || [] -} - -function getEnabledKb() { - let hash = location.hash.match(/^#(.+),(Keyboard_.+)$/i)[0] - - let kbValues = hash.replace('#', '') - kbValues = hash.split(',') - - return [hash, kbValues] -} - -function getElementsSize(element) { - const rect = element.getBoundingClientRect() - return { - height: rect.height, - width: rect.width, - positionX: rect.x, - positionY: rect.y - } -} - -function getElementValue(element) { - return element.value -} - -function setFontSize(size) { - textArea.style.fontSize = size + "px" - fontSizeRange.value = size -} - -function setWrittenText(text) { - textArea.value = text -} - -function setElementsSize(element, sizes) { - element.style.height = sizes.height + "px" - element.style.left = sizes.positionX + "px" - element.style.top = sizes.positionY + "px" -} - -function setSelectedKb(savedKbList) { - selectedKbList = savedKbList -} - -function setEnabledKb(kb) { - if (kb) { - selectKb(kb) - } -} - -function buildAppState() { - appState = { - fontSize: getFontSize(textArea), - selectedKbList: getSelectedKb(), - enabledKb: getEnabledKb(), - textAreaSizes: getElementsSize(textArea), - keyboardSizes: getElementsSize(keyboardContainer), - writtenText: getElementValue(textArea) - } - saveSettings("keymanWebState", appState) -} - -function saveSettings(key, state) { - let recentTime = new Date() - const time = 5000 // equals to An hour - let item - - // console.log("recentTime: ", recentTime) - // console.log("recentTime.getTime(): ", recentTime.getTime()) - - if (state) { - item = { - value: state, - expiry: recentTime.getTime() + time - } - } - localStorage.setItem(key, JSON.stringify(item)) -} - -function loadSettings(key) { - const raw = localStorage.getItem(key) - if (raw) { - let appState = JSON.parse(raw) - const newTime = new Date() - - console.log("newTime: ", newTime, "appState.expiry: ", appState.expiry) - console.log(newTime.getTime() > appState.expiry) - if (newTime.getTime() > appState.expiry) { - localStorage.removeItem(key) - alert("Session expired!") - return null - } - - setFontSize(appState.value.fontSize) - setWrittenText(appState.value.writtenText) - setElementsSize(textArea, appState.value.textAreaSizes) - setElementsSize(keyboardContainer, appState.value.keyboardSizes) - setSelectedKb(appState.value.selectedKbList) - setEnabledKb(appState.value.enabledKb[0]) - - generateKbUI(appState.value.selectedKbList) - console.log(appState.value.enabledKb[1][1], appState.value.enabledKb[1][0]) - // selectKb(appState.value.enabledKb[1][1], appState.value.enabledKb[1][0]) - } -} - -window.addEventListener('load', () => { - loadSettings("keymanWebState") -}) - -window.addEventListener('beforeunload', () => { - buildAppState() -}) - -window.addEventListener('storage', (e) => { - if (e.key == "keymanWebState") { - appState = JSON.parse(e.newValue) - buildAppState() - } -}) - -function searchHistory(value) { - if (kbSearchData.length < 0) { - kbSearchData.push(value) - for (i=0; i<=kbSearchData.length; i++) { - if (value != kbSearchData[i] || kbSearchData.length >= 5) { - kbSearchData.shift() - } - } - } - // console.log(kbSearchData) +keyman = getKeymanWeb() + +function getKeymanWeb() { + if(window.tavultesoft) { + return window.tavultesoft.keymanweb; + } + return window.keyman; +} +/* Global Variables */ +let selectedKbList = [] // Main array for the search, kb selection...etc. +let kbSearchData = [] // For History search +let kmwLang = keyman.getActiveLanguage() +let kmwKb = keyman.getActiveKeyboard() + +const clearSearchIcon = document.querySelector('#clearSearchIcon') +const magnifying = document.querySelector('#magnifyingGlassIcon') + +const elements = { + worldMapBtn: document.querySelector('#worldMap'), + kmwControls: document.querySelector('#KeymanWebControl'), + + kbSelection: document.querySelector('#keyboardSelection'), + keyboardSelectionButton: document.querySelector('#keyboardSelectionButton'), + caretRightIcon: keyboardSelectionButton.querySelector('.fa-caret-right'), + + searchBar: document.querySelector('#searchBar'), + searchInput: document.querySelector('#searchInput'), + searchDropdownMenu: document.querySelector('#searchDropdownMenu'), + searchIcons: document.querySelector('#searchIcons'), +} + +const state = { + mapIsOpen: false +} + +/* + ===================================== Default keyboard ========================================= +*/ + +function defaultKeyboard(kbdname = "basic_kbdus", languageCode = "en") { + if(!exists(kbdname, languageCode)) { + if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' + return + } + setKeyboardWithDirection(kbdname, languageCode) +} + +/* + ============================= Toggle between World Map and Search ============================== +*/ +elements.worldMapBtn?.addEventListener('click', (e) => { + e.preventDefault() + state.mapIsOpen = true + if (state.mapIsOpen == true) { + openMap() + keyman.addEventListener('keyboardchange', () => { + location.replace(`#${keyman.getActiveLanguage()},${keyman.getActiveKeyboard()}`) + updateExample(keyman.getActiveKeyboard()) + setTimeout(() => { + applyClassToKb(), 0 + }) + }) + } else { + openSearch() + } +}) + +function openSearch() { + state.mapIsOpen = false + hideEls( + elements.kmwControls, + ) + showEls( + elements.searchDropdownMenu, + elements.searchIcons + ) + + if (selectedKbList.length > 0) { + elements.caretRightIcon.textContent = selectedKbList.length + removeClass(elements.caretRightIcon, 'fa-magnifying-glass') + } else { + elements.caretRightIcon.textContent = '' + elements.caretRightIcon.classList.add('fa-caret-right') + } + + elements.searchBar.replaceChildren( + elements.searchInput, + elements.searchIcons, + elements.searchDropdownMenu + ) +} + +function openMap() { + state.mapIsOpen = true + removeClass( + elements.kmwControls, 'hidden', + elements.caretRightIcon, 'fa-caret-right' + ) + hideEls( + elements.searchDropdownMenu + ) + removeTextContent( + elements.caretRightIcon + ) + elements.keyboardSelectionButton.removeAttribute('id', 'keyboardSelectionButton') + elements.keyboardSelectionButton.setAttribute('id', 'returnToSearchButton') + elements.caretRightIcon.classList.add('fa-magnifying-glass') + elements.keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" + elements.keyboardSelectionButton.style.border = '0px' + elements.keyboardSelectionButton.classList.add('return-to-search') + elements.kbSelection.style.display = "none" + elements.searchBar.replaceChildren( + elements.kmwControls + ) +} + +function returnToSearch() { + elements.keyboardSelectionButton.removeAttribute('id', 'returnToSearchButton') + elements.keyboardSelectionButton.setAttribute('id', 'keyboardSelectionButton') + + if ((selectedKbList?.length || 0) < 1) { + elements.caretRightIcon.classList.add('fa-caret-right') + removeClass(elements.caretRightIcon, 'fa-magnifying-glass') + elements.caretRightIcon.textContent = '' + } + + elements.keyboardSelectionButton.style.backgroundColor = "" + elements.kbSelection.style.display = "block" + openSearch() +} + +function waitForElement(selector) { + return new Promise((resolve) => { + const interval = setInterval(() => { + const element = document.querySelector(selector) + if (element) { + clearInterval(interval) + resolve(element) + } + }, 100) + }) +} + +waitForElement('#returnToSearchButton').then((element) => { + element.addEventListener('click', (e) => { + e.preventDefault() + returnToSearch() + }) +}) + +waitForElement(".kmw-osk-frame").then((oskDiv) => { + document.querySelector('.keyboard-area').appendChild(oskDiv) +}) + +/* + ==================== Search Interaction =================== +*/ + +/* Search Input */ +const dropdown = new bootstrap.Dropdown(elements.searchInput, { + autoClose: 'outside' +}) + +document.addEventListener('click', (e) => { + if (!elements.searchInput.contains(e.target) && !elements.searchDropdownMenu.contains(e.target)) { + dropdown.hide() + } +}) + +elements.searchInput.addEventListener('click', (e) => { + e.stopPropagation() + // defaultKeyboard() + dropdown.show() +}) + +// Hide Dropdown Search on Mouse leave +elements.searchDropdownMenu.addEventListener('mouseleave', (e) => { + e.preventDefault() + dropdown.hide() +}) + +/* + =========================== Utility functions ============================ +*/ +function hideEls(...elements) { + return elements.every(el => el.classList.add('hidden')) +} + +function showEls(...elements) { + return elements.every(el => el.classList.remove('hidden')) +} + +function removeClass(element, className) { + return element.classList.remove(className) +} + +function removeTextContent(...elements) { + return elements.every(el => el.textContent = '') +} + +/* Elements validation */ +function exists(...elements) { + return elements.every(el => el != null) +} + +document.addEventListener('DOMContentLoaded', () => { + /* UI Behavior of the Selected Keyboard menu */ + if (exists(elements)) { + elements.keyboardSelectionButton.addEventListener('mouseenter', () => { + elements.kbSelection.classList.add('open') + }) + elements.keyboardSelectionButton.addEventListener('click', () => { + elements.kbSelection.classList.remove('open') + }) + elements.kbSelection.addEventListener('mouseleave', () => { + elements.kbSelection.classList.remove('open') + }) + } +}) + +/* + === Keyboard Execution === +*/ +const downloadBtn = document.getElementById('kbDownloadPage') +const textArea = document.getElementById('textArea') +let langExamples = []; + +function selectKb(kbdname, languageCode) { + if(!exists(kbdname, languageCode)) { + if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' + return + } + setKeyboardWithDirection(kbdname, languageCode) +} + +function setTextDirection(targetEls, dir) { + const copyBtn = document.querySelector('#copyTool') + + targetEls.dir = dir + if (dir == 'rtl') { + copyBtn.style.right = '0' + copyBtn.style.left = '10px' + } else { + copyBtn.style.right = '' + copyBtn.style.left = '' + } +} + +// Change and type keyboard +async function setKeyboardWithDirection(kbdname, languageCode) { + const kbSpan = document.querySelector('#kbSpan') + const langTag = `#${languageCode}` + let kbTag = '' + + if (kbdname.match(/Keyboard_*/)) { + kbTag = `${kbdname}` + } else { + kbTag = `Keyboard_${kbdname}` + } + + location.replace(`${langTag},${kbTag}`) + await keyman.addKeyboards(kbdname) + const kbd = keyman.getKeyboard(kbdname, languageCode) + await keyman.setActiveKeyboard(kbdname, languageCode) + + // setTimeout(() => { + // applyClassToKb(), 0 + // }) + + if(kbd) { + textArea.placeholder = `The ${kbdname} keyboard is selected. Start typing...` + kbSpan.innerHTML = `${kbdname}` + + setTextDirection(textArea, textArea.dir) + } + updateExample(kbdname) + if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname) +} + +/* Language Examples AJAX */ +async function updateExample(kbdname) { + const keymanExample = document.getElementById("example") + const exampleBox = document.getElementById("exampleBox") + + if (!keymanExample || !exampleBox) return false; + + if(kbdname == '') + { + keymanExample.textContent = `No example is available due to empty Keyboard name.` + return true; + } + + let activeLanguage = keyman.getActiveLanguage(); + + if(langExamples[activeLanguage + '_' + kbdname]) + { + keymanExample.innerHTML = langExamples[activeLanguage + '_' + kbdname]; + return true; + } + + langExamples[activeLanguage + '_' + kbdname] = 'Loading...'; + keymanExample.innerHTML = 'Loading...'; + + const link = `/prog/languageexample.php?keyboard=${kbdname}&language=${activeLanguage}`; + try { + const response = await fetch(link); + if(response.status == 200) { + const content = await response.text(); + + langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = content; + } else { + throw new Error(`Unable to retrieve content, status was ${response.status}: ${response.statusText}`); + } + } catch(e) { + langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = 'Error retrieving example: '+e.message; + throw e; + } +} + +function applyClassToKb() { + + const kbArea = document.querySelector('.keyboard-area') + if (!kbArea) return + + const apply = () => { + const child = kbArea.children + for (const c of child) { + if (!c.classList.contains('kmw-osk-frame')) { + c.classList.add('kmw-osk-frame') + c.classList.add('kmw-help-osk-frame') + } + } + } + + apply() + + // const observer = new MutationObserver(() => { + // for (const m of mutations) { + // if (m.type === 'childlist' && m.addedNodes.length) { + // apply() + // } + // } + // }) + // observer.observe(kbArea, {childList: true}) +} + +/* Search */ +const kbSearchCard = document.getElementById('kbSearchCardUI'); +let debounceTimer + +/* Pagination */ +prevBtn = document.getElementById('prevPage') +nextBtn = document.getElementById('nextPage') +pageInfo = document.getElementById('pageInfo') + +searchResultCount = document.getElementById('resultCount') +paginationCtrl = document.getElementById('paginationControls') + +let currentPage = 1 +let currentQuery = '' +let totalPage +const itemPerPage = 10 + +prevBtn.addEventListener('click', goPrevPage) +nextBtn.addEventListener('click', goNextPage) + +function updatePaginationCtrl() { + pageInfo.textContent = `${currentPage} of ${totalPage}` + nextBtn.disabled = currentPage >= totalPage + prevBtn.disabled = currentPage <= 1 +} + +function goPrevPage() { + if (currentPage > 1) { + currentPage-- + searchKeyboard(currentQuery, currentPage) + } +} + +function goNextPage() { + if (currentPage < totalPage) { + currentPage++ + searchKeyboard(currentQuery, currentPage) + } +} + +/* Click: Open Search and Display search instructions */ +elements.searchInput.addEventListener('click', function(e) { + const query = e.target.value.trim() + + defaultKeyboard() + if (query == "") { + resetSearch() + } else { + searchKeyboard(query) + } +}) + +/* Input: Search and Display keyboards */ +elements.searchInput.addEventListener('input', function(e) { + handleSearch(e.target.value) +}) + +clearSearchIcon.addEventListener('click', () => { + elements.searchInput.value = '' + handleSearch() + elements.searchInput.focus() +}) + +function handleSearch(value = "") { + currentQuery = value.trim() + currentPage = 1 + + updateSearchIcon(value) + + if (!currentQuery) { + resetSearch() + return + } + debounceSearch(currentQuery, currentPage) +} + +function resetSearch() { + paginationCtrl.style.display = 'none' + defaultSearch() +} + +function updateSearchIcon(value) { + const hasValue = value.length > 0 + magnifying.style.display = hasValue ? 'none' : 'inline' + clearSearchIcon.style.display = hasValue ? 'inline' : 'none' +} + +function debounceSearch(query, page) { + clearTimeout(debounceTimer) + if (query.length > 1) { + debounceTimer = setTimeout(() => { + searchKeyboard(query, page) + }, 300) + } +} + +/* == Section == + Search +*/ + +/* Display top downloads with search Instruction */ +async function defaultSearch() { + kbSearchCard.innerHTML = `

    Loading...

    ` + try { + let response = await fetch(`https://api.keyman.com/search/2.0?q=p:popular`) + if (!response.ok) { + throw new Error(`API request failed with status ${response.status}`) + } + + let data = await response.json() + + let mostDownloadkb = data.keyboards + + if (!mostDownloadkb || !Array.isArray(mostDownloadkb)) { + throw new Error(`Invalid API response structure`) + } + displaySearch(mostDownloadkb) + } + catch(error) { + console.error(`Error fetching ${error}`) + kbSearchCard.innerHTML = `
    No keyboards are found.
    ` + paginationCtrl.style.display = 'none' + } +} + +/* Get query and return search */ +async function searchKeyboard(query = null, page) { + kbSearchCard.innerHTML = `
    Searching ${query}...
    ` + kbSearchCard.style.display = 'block' + + let response = await fetch(`https://api.keyman.com/search/2.0?q=${encodeURIComponent(query)}&p=${page}`) + if (!response.ok) { + throw new Error(`API request failed with status ${response.status}`) + } + + searchHistory(query) + let data = await response.json() + // Found with Context: Setup pagination + if (data.context) { + totalPage = data.context.totalPages || 1; + currentPage = data.context.pageNumber || 1; + } else { + totalPage = Math.ceil(data.keyboards.length / itemPerPage); + } + + // Validate data.keyboards + let keyboardData = data.keyboards + if (!keyboardData || !Array.isArray(keyboardData)) { + throw new Error("Invalid API response structure") + } + + // Get total result + let totalFound = data.context.totalRows + + updatePaginationCtrl() + displaySearch(keyboardData, totalFound, query) +} + +/* Display items return from search */ +function displaySearch(data, total = 0, query = '') { + kbSearchCard.innerHTML = ''; + + if (!data || data.length == 0) { + kbSearchCard.innerHTML = 'No keyboards are found.' + paginationCtrl.style.display = 'none' + return + } + + if (total) { + searchResultCount.innerHTML = `${total} results` + searchResultCount.classList.remove('hidden') + } + + // Getting searched Word ready for highlight + const marked = getMarkedContext(query) + + const searchInstruction = document.querySelector('.search-instruction') + const kbHrTitle = document.querySelector('.keyboard-title') + if (!query) { + searchInstruction.classList.remove("hidden") + kbHrTitle.textContent = "Most Downloads" + } else { + searchInstruction.classList.add("hidden") + kbHrTitle.textContent = "" + } + data.forEach(kb => { + const card = searchKbCardUI(kb, marked, selectedKbList, data) + kbSearchCard.appendChild(card) + }) + paginationCtrl.style.display = 'flex'; +} + +// UI Search card +function searchKbCardUI(kb, marked = '', selectedKbList, data) { + const kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) + // Keyboard card container + let cardWrap = document.createElement('div') + cardWrap.classList.add('card-wrap') + cardWrap.setAttribute('id', 'keyboardCardWrap') + + // Keyboard header container + let cardHeader = document.createElement('div') + cardHeader.classList.add('card-header') + + const {matchFound, matchField, matchValue} = highlightSearchContext(kb, marked) + + const kbNameHeading = matchFound ? showMarkedContext(kb, matchField, matchValue) + : (() => { + const heading = document.createElement('h4') + heading.innerHTML = kb.name + return heading + }) + + // Keyboard Plus (+) icon + const kbIconPTag = document.createElement('p') + kbIconPTag.textContent = kbFoundInList ? "-" : "+" + kbIconPTag.style.fontSize = '20px' + kbIconPTag.style.cursor = 'pointer' + kbIconPTag.classList.add('kb-icon-plus') + + checkKbCardUI(kbIconPTag, cardWrap, kb) + // Keyboard ID + const kbIdPTag = document.createElement('p') + kbIdPTag.classList.add('keyboard-id') + kbIdPTag.textContent = kb.id + + // Keyboard Description + const kbDescHeading = truncateDesc(kb, matchField, marked) + + // Keyboard monthly downloads and platform support + const kbSpecs = document.createElement('div') + kbSpecs.classList.add('keyboard-specs') + + const kbDownloadHeading = document.createElement('h6') + kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` + kbDownloadHeading.classList.add('monthly-download') + + const kbPlatformSupport = document.createElement('div') + kbPlatformSupport.classList.add('platform') + kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) + + // Append children + cardHeader.appendChild(kbNameHeading) + cardHeader.appendChild(kbIconPTag) + + kbSpecs.appendChild(kbDownloadHeading) + kbSpecs.appendChild(kbPlatformSupport) + + cardWrap.appendChild(cardHeader) + cardWrap.appendChild(kbIdPTag) + cardWrap.appendChild(kbDescHeading) + cardWrap.appendChild(kbSpecs) + + // Choose keyboard to selection + kbIconPTag.onclick = (e) => { + e.stopPropagation() + addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) + textArea.focus() + selectKb() + } + // console.log("Recent:", historyKbSelection.getHistory()); + + return cardWrap +} + +// Disable or Enable search card +function checkKbCardUI(kbIconPTag, cardWrap, kb) { + // For checking if the keyboard exists in selected Kbs + let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) + if (kbFoundInList) { + cardWrap.classList.add('disabled') + } else { + cardWrap.classList.remove('disabled') + } +} + +// Highlight word searched +function getMarkedContext(query) { + let escapedTerm = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + return new RegExp(escapedTerm, 'i') +} + +// Find a match between Search Context and Language, Keyboard name, Description +function highlightSearchContext(kb, marked) { + let matchFound = false + let matchField = "" + let matchValue = "" + + // Get and find language that matches the search + for (lang in kb.languages) { + let langData = kb.languages[lang] + for (key in langData) { + const value = langData[key] + if (typeof value == "string" && marked.test(value)) { + matchFound = true + matchValue = value.replace(marked, (m) => m ? `${m}` : m) + matchField = "language" + break + } + } + if (matchFound) break + } + + // Find a match for keyboard name if language is not a match + if (!matchFound && marked.test(kb.name)) { + matchFound = true + matchValue = kb.name.replace(marked, '$&') + matchField = "keyboard" + } + + // Find a match for keyboard description if name is not a match + if (!matchFound && marked.test(kb.description)) { + matchFound = true + matchField = "description" + } + + return {matchField, matchValue, matchFound} +} + +// Display Highlighted Search Context +function showMarkedContext(kb, matchField, matchValue) { + const kbNameHeading = document.createElement('h4') + + const kbHelpLink = document.createElement('a') + kbHelpLink.href = `https://help.keyman.com/keyboard/${kb.id}` + kbHelpLink.target = '_blank' + kbHelpLink.rel = 'noopener noreferrer' + + // Display matched language + const langNameSpan = document.createElement('span') + langNameSpan.style.fontSize = "14px" + if (matchField == "language") { + langNameSpan.innerHTML = matchField == "language" ? ` (${matchValue} language)` : "" + } + + // Display matched keyboard + if (matchField == "keyboard") { + kbHelpLink.innerHTML = matchValue + } else { + kbHelpLink.textContent = kb.name + } + kbNameHeading.appendChild(kbHelpLink) + kbNameHeading.appendChild(langNameSpan) + kbNameHeading.addEventListener('click', () => { + const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) + const newURL = checkedURL + kb.id + window.open(newURL, '_blank') + }) + + return kbNameHeading +} + +// Truncated Keyboard Description +function truncateDesc(kb, matchField, marked) { + const kbDescHeading = document.createElement('h6') + kbDescHeading.classList.add("keyboard-description") + const word_limits = 90 + + let temp = document.createElement('div') + temp.innerHTML = kb.description + + let fullDesc = kb.description + let plainText = temp.textContent + let shortText = "" + + let isTruncated = false + + if (plainText.length >= word_limits) { + shortText = plainText.slice(0, word_limits) + "..." + kbDescHeading.innerHTML = shortText + isTruncated = true + } else { + kbDescHeading.innerHTML = fullDesc + isTruncated = false + } + + if (isTruncated) { + const toggleBtn = document.createElement('a') + toggleBtn.href = "#" + toggleBtn.style.marginLeft = "6px" + toggleBtn.textContent = "Show more" + + toggleBtn.addEventListener('click', e => { + e.preventDefault() + const isExpanded = toggleBtn.textContent == "Show more" + kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, (m) => m ? `${m}` : m) : fullDesc + if (matchField == 'description') { + kbDescHeading.innerHTML = isExpanded ? fullDesc.replace(marked, '$&') : shortText + } + kbDescHeading.style.color = isExpanded ? 'black' : 'gray' + toggleBtn.textContent = isExpanded ? "Show less" : "Show more" + kbDescHeading.appendChild(toggleBtn) + }) + kbDescHeading.appendChild(toggleBtn) + } + + return kbDescHeading +} + +/* + == End of Search Section == +*/ + +// Platform Support +function platformSupport(data) { + const platformMap = { + android: "Android", + desktopWeb: "Web", + ios: "iPhone and iPad", + linux: "Linux", + macos: "macOS", + mobileWeb: "Mobile web", + windows: "Windows" + } + let platformSpan = Object.entries(data) + .filter(([_, supportLevel]) => supportLevel == 'full') + .map(([platform]) => `${platformMap[platform]}`).join('') + + return platformSpan +} + +/* == Section == + Keyboard Selection Menu +*/ +function addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) { + const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') + let isSelected = selectedKbList.some(selected => selected.id == kb.id) + addDataKb(data) + // Remove keyboard + if (isSelected) { + removeKbSelected(kb.id) + kbIconPTag.textContent = '+' + generateKbUI(selectedKbList) + checkKbCardUI(kbIconPTag, cardWrap, kb) + + return + } + if(selectedKbList.length < 5) { + addKbToSelection(kb) + generateKbUI(selectedKbList) + kbIconPTag.textContent = 'โœ“' + kbIconPTag.classList.add('kb-icon-plus-animate') + + setTimeout(() => { + kbIconPTag.textContent = '-' + kbIconPTag.classList.remove('kb-icon-plus-animate') + keyboardSelectionButton.classList.remove('btn-secondary') + keyboardSelectionButton.classList.add('btn-keyman-orange') + }, 800) + + checkKbCardUI(kbIconPTag, cardWrap, kb) + return + } + confirmAndAddKb(() => { + addKbToSelection(kb) + generateKbUI(selectedKbList) + + kbIconPTag.textContent = 'โœ“' + kbIconPTag.classList.add('kb-icon-plus-animate') + + setTimeout(() => { + kbIconPTag.textContent = '-' + kbIconPTag.classList.remove('kb-icon-plus-animate') + keyboardSelectionButton.classList.remove('btn-secondary') + keyboardSelectionButton.classList.add('btn-keyman-orange') + }, 800) + checkKbCardUI(kbIconPTag, cardWrap, kb) + }) +} + +// Add keyboard for kb search and selection UI +function addKbToSelection(kb) { + const kbInfo = { + "id": kb.id, + "name": kb.name, + "version": kb.version, + "helpLink": kb.helpLink, + "platformSupport": kb.platformSupport, + "totalDownloads": kb.match.totalDownloads, + "sourcePath": kb.sourcePath, + "supportedLanguage": kb.languages, + "lastUpdated": kb.lastModifiedDate + } + // historyKbSelection.add(kbInfo) + selectedKbList.push(kbInfo) +} + +// UI for keyboard selection menu +function generateKbUI(selectedKbList) { + const keyboardSelection = document.getElementById("keyboardSelection") + keyboardSelection.innerHTML = '' + + if(selectedKbList.length < 1) { + triggerKbCount(selectedKbList) + resetKbSelectionMenu() + return + } + + const kbDivHeader = document.createElement('div') + kbDivHeader.textContent = "Keyboard Selection menu" + kbDivHeader.classList.add('kb-item-header') + + const kbDivFoot = document.createElement('div') + kbDivFoot.textContent = "US Basic Keyboard" + kbDivFoot.classList.add('kb-item-footer') + + keyboardSelection.appendChild(kbDivHeader) + + selectedKbList.forEach(data => { + const kbDiv = document.createElement('div') + kbDiv.classList.add("kb-item") + kbDiv.setAttribute('id', `${data.id}`) + + const kbName = document.createElement('span') + kbName.textContent = data.name + + const kbConfigList = document.createElement('ul') + kbConfigList.classList.add('keyboard-configs') + kbConfigList.innerHTML = ` +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • + ` + + const kbDetails = displayKbDetails(data) + + kbDiv.appendChild(kbName) + kbDiv.appendChild(kbConfigList) + kbDiv.appendChild(kbDetails) + keyboardSelection.appendChild(kbDiv) + keyboardSelection.append(kbDivFoot) + + let kbdName = data.id + let langCode = Object.keys(data.supportedLanguage)[0] || "en" + + selectKb(kbdName, langCode) + kbConfigList.addEventListener('click', (e) => { + const target = e.target + if (target.tagName == 'I' && target.dataset.action) { + const action = target.dataset.action + const id = target.dataset.id + const helpLink = target.dataset.helplink + kbConfigMenu(action, id, helpLink) + } + }) + + kbDiv.addEventListener('click', () => { + kbdName = data.id + langCode = Object.keys(data.supportedLanguage)[0] || "en" + textArea.focus() + selectKb(kbdName, langCode) + }) + + kbDivFoot.onclick = () => { + defaultKeyboard() + } + + const kbHelpLink = document.querySelector('#kbHelpdocLink') + kbHelpLink.addEventListener('click', (e) => { + kbConfigMenu('help', '', data.helpLink) + }) + }) + triggerKbCount(selectedKbList) +} + +// Keyboard count for Keyboard selection menu +function triggerKbCount(selectedKbList) { + const kbSelectedLength = selectedKbList.length + const keyboardSelectionButton = document.querySelector('#keyboardSelectionButton') + const keyboardCount = document.querySelector('#kbCount') + + if (kbSelectedLength >= 1) { + keyboardCount.classList.remove('fa-caret-right') + keyboardCount.textContent = `${kbSelectedLength}` + keyboardSelectionButton.classList.add('btn-keyman-orange') + keyboardSelectionButton.classList.remove('btn-secondary') + } else { + keyboardCount.classList.add('fa-caret-right') + keyboardCount.textContent = '' + keyboardSelectionButton.classList.remove('btn-keyman-orange') + keyboardSelectionButton.classList.add('btn-secondary') + } +} + +// Keyboard count default for Keyboard selection menu +function resetKbSelectionMenu() { + const keyboardSelection = document.querySelector("#keyboardSelection") + + const kbDivHeader = document.createElement('div') + kbDivHeader.textContent = "Keyboard Selection menu" + kbDivHeader.classList.add('kb-item-header') + + const kbItem = document.createElement('div') + kbItem.classList.add('.kb-item') + + const pTag = document.createElement('p') + pTag.textContent = "Open Search to get your keyboard" + + const kbDivFoot = document.createElement('div') + kbDivFoot.textContent = "US Basic Keyboard" + kbDivFoot.classList.add('kb-item-footer') + + kbItem.appendChild(pTag) + + keyboardSelection.appendChild(kbDivHeader) + keyboardSelection.appendChild(kbItem) + keyboardSelection.appendChild(kbDivFoot) +} + +// Compare and remove keyboard +function removeKbSelected(kbId) { + if(kbId) { + selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) + } +} + +// Check 6th keyboard +function confirmAndAddKb(onConfirmAdd) { + if (typeof onConfirmAdd != 'function') { + console.log("Expected the onConfirmAdd a function, instead got: " + typeof onConfirmAdd) + alert("Click on the keyboard again to enable.") + } + + const warningDialogUI = limitKbSelectionUI(() => { + onConfirmAdd() + selectedKbList.shift() + generateKbUI(selectedKbList) + }) + + document.body.appendChild(warningDialogUI) +} + +// UI for Keyboard Selected Limitation +function limitKbSelectionUI(onAccept) { + const dialogDiv = document.createElement('div') + dialogDiv.classList.add('warning-container') + + const dialogContentDiv = document.createElement('div') + dialogContentDiv.classList.add('warning-content') + + const dialogCancel = document.createElement('button') + dialogCancel.classList.add('warning-cancel-btn') + dialogCancel.setAttribute('id', 'cancelWarningBtn') + dialogCancel.textContent = 'โœ–' + dialogCancel.onclick = () => { + dialogDiv.remove() + generateKbUI(selectedKbList) + } + + const dialogImgTag = document.createElement('img') + dialogImgTag.classList.add('warning-keyman-image') + dialogImgTag.src = `/cdn/dev/img/keymanweb-mini-logo-88.png` + dialogImgTag.alt = "Keyman Logo" + + const firstKeyboard = selectedKbList[0].name + + const dialogPTag = document.createElement('p') + dialogPTag.classList.add('warning-text') + dialogPTag.innerHTML = `The keyboards selected exceeds the limitation of 5 keyboards. Click 'Allow' to remove the
    ${firstKeyboard} keyboard.` + + const dialogUlTag = document.createElement('ol') + dialogUlTag.textContent = "Your keyboards selection:" + selectedKbList.forEach((kb, index) => { + const dialogLiTag = document.createElement('li') + if (index == 0) { + const markKeyboard = document.createElement('mark') + markKeyboard.textContent = kb.name + dialogLiTag.appendChild(markKeyboard) + } else { + dialogLiTag.textContent = kb.name + } + dialogUlTag.appendChild(dialogLiTag) + + }) + + const dialogAccept = document.createElement('button') + dialogAccept.classList.add('warning-accept-btn') + dialogAccept.setAttribute('id', 'acceptWarningBtn') + dialogAccept.textContent = "Allow" + dialogAccept.onclick = () => { + dialogDiv.remove() + onAccept() + } + + dialogContentDiv.appendChild(dialogCancel) + dialogContentDiv.appendChild(dialogImgTag) + dialogContentDiv.appendChild(dialogPTag) + dialogContentDiv.appendChild(dialogUlTag) + dialogContentDiv.appendChild(dialogAccept) + + dialogDiv.appendChild(dialogContentDiv) + + return dialogDiv +} + +// Seperate list for History/Remember Search + +/* + ========================== To be continued ========================== +*/ +function addDataKb(data) { + let selectedKbData = [] + // console.log(data) + const kbInfo = { + "platformSupport": data.platformSupport, + // "monthlyDownloads": data.match.downloads, + "sourceFile": data.sourcePath, + } + selectedKbData.push(kbInfo) +} + +// End of History search + +// Keyboard selection menu's tools: help, download, and remove +function kbConfigMenu(action, id, helplink) { + if (action == "help") { + window.open(helplink, '_blank') + } + + if (action == "download") { + const downloadUrl = `https://keyman.com/keyboards/install/${id}` + window.open(downloadUrl, '_blank') + } + + if (action == "remove") { + removeKbSelected(id) + generateKbUI(selectedKbList) + triggerKbCount(selectedKbList) + } + + if (action == "info") { + const kbDetails = document.querySelector(`#keyboard-${id}-details`) + + kbDetails.addEventListener('mouseleave', () => { + kbDetails.classList.add('hidden') + }) + kbDetails.classList.remove('hidden') + } +} + +// Keyboard details for Keyboard selection menu +function displayKbDetails(data) { + const item = selectedKbList.find(kb => kb.id == data.id) + if (!item) return; + + const kbDetails = document.createElement('div') + kbDetails.classList.add('keyboard-details') + kbDetails.setAttribute('id', `keyboard-${data.id}-details`) + kbDetails.classList.add('animate__animated', 'animate__fadeIn') + kbDetails.classList.add('hidden') + + const kbDetailsHead = document.createElement('div') + kbDetailsHead.textContent = 'Keyboard Details' + kbDetailsHead.classList.add('kb-item-header') + + const kbDetailsContent = document.createElement('div') + kbDetailsContent.classList.add('keyboard-content-wrapper') + kbDetailsContent.innerHTML = ` +
      +
    • +
      +
      Name
      +
      ${item.name || "N/A"}
      +
      +
    • +
    • +
      +
      Keyboard ID
      +
      ${item.id || "N/A"}
      +
      +
    • +
    • +
      +
      Version
      +
      ${item.version || "N/A"}
      +
      +
    • +
    • +
      +
      Total downloads
      +
      ${item.totalDownloads || 0}
      +
      +
    • +
    • +
      +
      Source Path
      + +
      +
    • +
    • +
      +
      Supported Platforms
      +
      + ${platformSupport(item.platformSupport) || 'No platforms supported'} +
      +
      +
    • +
    • +
      +
      Last Updated
      +
      ${getOnlyDates(item.lastUpdated) || 0}
      +
      +
    • +
    + ` + kbDetails.appendChild(kbDetailsHead) + kbDetails.appendChild(kbDetailsContent) + + return kbDetails +} + +// Get only the YYYY-mm-dd format +function getOnlyDates(dateData) { + const finalDateData = dateData.match(/^\d{4}-\d{2}-\d{2}/) + return finalDateData +} + +// Validate URLs +function validateURL(string) { + try { + const newUrl = new URL(string) + if (newUrl.protocol === 'https:') { + return newUrl + } else { + return false + } + } catch (error) { + console.error(error) + } +} +/* + == End of Keyboard Selection menu Section == +*/ + +/* + == Store data in localStorage to use for reload == +*/ +let appState = { + fontSize: 16, + writtenText: "", + selectedKbList: [], + enabledKb: null, + keyboardSizes: null, + textAreaSizes: null +} +const keyboardContainer = document.querySelector('.keyboard-container') +const fontSizeRange = document.querySelector('#fontSizeRange') + +function getFontSize(element) { + let theFontSize + theFontSize = parseInt(window.getComputedStyle(element).fontSize) || "16" + + return theFontSize +} + +function getSelectedKb() { + return selectedKbList || [] +} + +function getEnabledKb() { + let hash = location.hash.match(/^#(.+),(Keyboard_.+)$/i)[0] + + let kbValues = hash.replace('#', '') + kbValues = hash.split(',') + + return [hash, kbValues] +} + +function getElementsSize(element) { + const rect = element.getBoundingClientRect() + return { + height: rect.height, + width: rect.width, + positionX: rect.x, + positionY: rect.y + } +} + +function getElementValue(element) { + return element.value +} + +function setFontSize(size) { + textArea.style.fontSize = size + "px" + fontSizeRange.value = size +} + +function setWrittenText(text) { + textArea.value = text +} + +function setElementsSize(element, sizes) { + element.style.height = sizes.height + "px" + element.style.left = sizes.positionX + "px" + element.style.top = sizes.positionY + "px" +} + +function setSelectedKb(savedKbList) { + selectedKbList = savedKbList +} + +function setEnabledKb(kb) { + if (kb) { + selectKb(kb) + } +} + +function buildAppState() { + appState = { + fontSize: getFontSize(textArea), + selectedKbList: getSelectedKb(), + enabledKb: getEnabledKb(), + textAreaSizes: getElementsSize(textArea), + keyboardSizes: getElementsSize(keyboardContainer), + writtenText: getElementValue(textArea) + } + saveSettings("keymanWebState", appState) +} + +function saveSettings(key, state) { + let recentTime = new Date() + const time = 5000 // equals to An hour + let item + + // console.log("recentTime: ", recentTime) + // console.log("recentTime.getTime(): ", recentTime.getTime()) + + if (state) { + item = { + value: state, + expiry: recentTime.getTime() + time + } + } + localStorage.setItem(key, JSON.stringify(item)) +} + +function loadSettings(key) { + const raw = localStorage.getItem(key) + if (raw) { + let appState = JSON.parse(raw) + const newTime = new Date() + + console.log("newTime: ", newTime, "appState.expiry: ", appState.expiry) + console.log(newTime.getTime() > appState.expiry) + if (newTime.getTime() > appState.expiry) { + localStorage.removeItem(key) + alert("Session expired!") + return null + } + + setFontSize(appState.value.fontSize) + setWrittenText(appState.value.writtenText) + setElementsSize(textArea, appState.value.textAreaSizes) + setElementsSize(keyboardContainer, appState.value.keyboardSizes) + setSelectedKb(appState.value.selectedKbList) + setEnabledKb(appState.value.enabledKb[0]) + + generateKbUI(appState.value.selectedKbList) + console.log(appState.value.enabledKb[1][1], appState.value.enabledKb[1][0]) + // selectKb(appState.value.enabledKb[1][1], appState.value.enabledKb[1][0]) + } +} + +window.addEventListener('load', () => { + loadSettings("keymanWebState") +}) + +window.addEventListener('beforeunload', () => { + buildAppState() +}) + +window.addEventListener('storage', (e) => { + if (e.key == "keymanWebState") { + appState = JSON.parse(e.newValue) + buildAppState() + } +}) + +function searchHistory(value) { + if (kbSearchData.length < 0) { + kbSearchData.push(value) + for (i=0; i<=kbSearchData.length; i++) { + if (value != kbSearchData[i] || kbSearchData.length >= 5) { + kbSearchData.shift() + } + } + } + // console.log(kbSearchData) } \ No newline at end of file From a13f8e9fe95fe1922abb50c4bf6ab9ff8ed13a56 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 6 Oct 2025 15:41:27 +0700 Subject: [PATCH 32/38] feat: remove unused images --- cdn/dev/img/desktop-keyboard.png | Bin 116931 -> 0 bytes cdn/dev/img/headerbar copy.png | Bin 507 -> 0 bytes cdn/dev/img/phone-keyboard.png | Bin 81945 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 cdn/dev/img/desktop-keyboard.png delete mode 100644 cdn/dev/img/headerbar copy.png delete mode 100644 cdn/dev/img/phone-keyboard.png diff --git a/cdn/dev/img/desktop-keyboard.png b/cdn/dev/img/desktop-keyboard.png deleted file mode 100644 index 29706d44a41c1a78740f8a853768d045016b5c3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116931 zcmcF~2UOGBvNwo=NK+9JX(CNTic}FuL{vlsqzEEilwPF;fkZ(-5r}|_(gM;uQbH$m zq=w!?@10N+N|Ns%J@>wI&VBE``+aMDYo+f0t~0Y|&-`Zg`$rlo45u!hqM)E)P`!Ug zn}UM+A_c`Unv>K(iOrS3Dd3CJRa@mYMQ$g@67c7^m6Ey=1;r0I-I4hT;6JVNeFIkt z3eF(%n-V^^`GSIil%je^Nf% zl~a^w&mQ9`x^95vWu@*4dQH)`{O+HJxc^_KEyB3RKPmg zZHsVC`o$^cLqEGaYHp-xGM`d9ef+PlJI^js@t^d&^w(E9d$jf6iY}e3yYT;^@N1ws zuZpb2%qNig=u||f!&4kg z(5;Psfb4dPC#ZSvnc-10XP*yR!4ZWg zLD3+wT|rR)HSr5bnf`WgjO{!^U3wdx8oh62^;q)l^7#w&?A~>wcg0^ll_AgSO>O>< z!fbYO0~wkAhm(=&(#&|v-UStsJup!ZJ?VPdz+!os+X$qaOWft_HZ2eEFKZt>nY6B} z-M>>m>Bwn@zi6zqFRS*%@5C#sEe`y%z1vgH^!@FMx{{=X=zSVs66u!2aF34DnK6b1 z>1?;%UFj4DkNj=txpgJMsuhm9lDJ15N4#s%yLN*oS3GT#qgl>nlhU^J>lzw`1M2-! z$5rB?XJi6BkqE7k1S`RzN>A2KDXe@SaVm5)s|PRWfJ(%v=vLW50w} zy+Gu4+TC+ko6tyd%*BPT=KsNYo0*B>yTA;FhXJ10>r1b6^--+2+h2t%EeA~V=jMB) z-jGW&-!?H$Ff^2P>bc{d-{%m0aSF5lA)x+rrhx~*p5N>u6EP@@EaR)r#*#;#x00Fu z$x2cJ8crk=UthYujo&>r!b{a|4{o-sU08TA8*N=&D=!Hh=6zManU^e%_*hEvGI2AOkFbBruAcO z1M#dSz-aU>APwnlF-INA>n*1_sosaFZi+X)_jF@5!f#4Y51R~gGPF4)yK?+gSpux^_=|GD~XPikq6#Cn0FgjLIzN24~ewoTY;8qyY!3u%B$z$9KQ$J!SXq55zeD$&kbfJ-v;P=@$)$; z4e8$W^ z`bb;uB1$)`N$lVJW&d85{89>@H_H7#O-1I8>;J`6 z0@QiJf8TyR&LBB@?vLZ} zk3;G!S?SFI2iKpJ-dD2H1CBx$&8gsFjrXESS5;zCSS8;$!(^_J}a0 zWj%-cH>ooWi+PqVBs>1`z%U|A8F=u>weMn3U(U!!H+t<7TjieX_s23BRGTlkXUXt! z`v2F1h(n5x=S^1{4?+TWD?BH!=FQ)Uj)UH`OB7#zYx@PE-EpMz+gu@^av3&&PBR1@ zyswYuDQ@C*PZC|Z7ajV$4&niVn?SB>`?TC1tBKzO= z&VIS4fFs!?i`ETJ4gY_j{x^lBH`tg>HNShDrE*Dc{%)DRdwkXkXML%l+08QiH^ctR z+A)7hK9HFJ`zEpc4+{wT?5S*~0Teh&>x(R@MyOf$1uHGx1EhAT^qWr>k?Q~<7j&MBnU08c{b8o^Td>9A0c#d%WkW175JJ@n!#^%vZ z^QyOkNHDR~7oK*vo4aIVQ|iir#h&87X(akCOv&Txcg(K2Vt0+$aKrg386BgQC|fq! zWLpj7cSx{{a_0PV;o!6j|8oId=KKqw26Ks0M+(|>w0X^YH1L63zFZP`oi#OSC#bO{}466v1TJ*#7sgmh6WlKb3nZZO?p^sIvh|MkCC<4owt;!7*N zCo(NsW7J(~^jYajuGWWAy6dl97wsSRB= z(_i1ji{*=m;d#hu931?xFBkq#??)!a^-0t^F`gZPzFu)C|69!eI7fbKm6QD<-07Ck z+wQ*{AfT+F$WgcOh-|albPU*rrrpKY&bCBO#(9nh&b9S(Z-1cDfEL*eGQQebv~k}! z&RlJxM>2X7DS2_$h{gu_Z;p*$I!Q#enFlye(&cPJ$w$t=o<)DtNxl?Yx^gY2K^6&+ zhX@d7baaCzUX?3K4bUNy7t4_|R|Oy6FYHAxe2wc-mTvnqtAWF?k8JdbaJw5wCJ#W8 z9Y4j}{c^gi45#q&TH{Y#jflgVa@{5xjKPBQ3YpHCX7U=Zk+-XnXBR zK1CR5$_3lRp67aq#B97(+#8B4`JkbeH=J!yIN2h|6+|LzDB*W{HO-nr*p!Z2nX#Ma z6jRsaR;*LgaQcYTv&+ywEw<&n^Fa-0<2m8myu3@HfUltvhaTzYJ5SwS*I#kR@&x6- zayX{0Zn?p1P?%XQ^MDJw2y<>?OWS0k`T6clP(31-K% zm=c$d-5~5pQe|BLEU(SEvcS9`v?A^rOrvUlo;?v)lxtj3H)6*Wm;?t=?~QnKFOFB? z;Tb7?_RD=j&XbgfwGHo?so;hOyDKzIibq#=miy(gvubLv+^JAjQ}11A2)6ccs(8?Z zp}$x;h*8{m^3srNUe)B`1ep3@Z;kywAjH*z zwp{0iaFv|12+lLywt)!R=1@*LfB>v8)5C)m+LVcVSTE#y`HI&rRN#6}j2J@s>E+*6 z;vVN0nw)2EqSRjDj7b7)14gdu_;H+vAHUj{1}H`&QlAxh>S@c5cp7pT%qPdLGUrdN?9PEbOY&i6pZg^cD3*r-6RsT{&oyE z#G4N+Acw8_mP1VpKR`g0~~yy-tg7-1MV^ zQXQ^Vm`@EoBmFjBc>0?KaW+yD7J>MaNC2tGNw-5I12catW5x?9^ekePvo zvlN!e%s}#946l1ARn)gI63ikzd1kL{GYX}^G>?v9g=B44aeBU06D^}3F!5fi(RujP zw!_(P3O#5-1tT4byf&EkrFSTxt5p$E)RiaR3MTS+r8w_~y1>-#>(zAt_q z$XS%OYx%8kF~wrzO#8seG9O6~`RGrFtzuwGXhbLLq-iiz_OnS@pDuF1oClGPwtL>Z zQLT9&$mub3efxdj;Q4--bN+5hcE`+Yz!+hY=xBLFC>pUyWZ2 z$b&EQ`SYog6v%$W^PHI>R_`c2PFdk%{-qlR!d#nW8zAp3f1PEyo~1B($Dk_QNF+`r zA}p%-mo=&}5-p>O;}s@rNrS6IGr~54@D|4S@Mg>F%A+2&{O0wFcj(v?B%&qYiWKPj zIACC?s;MS+r~5}ESHLUWo~zyB4kLYcW@a-0|AbfV^F;67xE=gXB>hPu#2u3ZTd)cZ zk z2PF-s+i9mkZ+FhInbzAYjnMCJs@`m(y-p13spsIkOEFF;D%USw*f)pf?O(6I-#(`b z*vVT;3mtKEtR|4ed6lB)gbxW#)-UIBg!N_W<2*+h!K8gnVdzwin%bnzx?T1UYVhrQ z%`Wfc}}C&1S9uW=#dk^CC|hVqISCE;rigEnP_s;)cG{9G%|Q zib9}OGbS@c3HLJ+mU%E4|q)0 zZ5w#R9Y=4>hxn^3Ot0`(mn_w&X&vF4o9i2#P~G!rW3nZ`=JQEJs3%pOeXlW7s22J> z8StlBZn26yrDr`__JIZ#FdiLgtrhY@=NsCnKzloA&2~$jALLMFX*3*CT6Jjr^ zJbW>-IvpwSUXpED?p^xD8%p9nc;_LTv^X>3(TPR#jY!_B8Zwi6E7^sN2(u@Z5L#2l z88fZ77RKA^`2_%>iQ{j z|7+UG18hlPTAY`jWS`geLS2hs-0{5X0}0o+LdG|Rl;SIk`TJK1S{t=mDqLKLwXbSk zzrkji5-xg-ImlXLQXOo(_aqwOf#uV|ZIerBh_md%lWZy|65&Nxu&;qubBm#&cE>$m zEQrIq9oLu~Ru{&VuF7$` ziKVGcO+RJuUdHEm_)qhoDaDJ#*ejYQBR#edKVfeIyc4gtw(C+dw)dKyUbXA$OVfYflBk5}#=9m;AHcrN$7zZ+vd`!oDVqW|nDm*6?)XOw~$uvd@Y zZw}*35IM|!P4iMO`ltTpQje;76Fd)D~X8sIAADpok7quxIgrw`aEk%zyPGEhUIi@X zBe}lvLzXKJ!>sk3_-}$+(#*9A@@ti@`xggTnmUyAKLdg#nW`D2qXD8#efaGf#~G{_ zV1;-Kb^;tKiuSDqT^o04c37oy*cY%~IGR?_3-UFKOH?+G3;| z%p{aSR6TIgD#B}fzK+X#{X{53EpF)Ij8%$AiY1=QV<`o-V8xd{$wselN)WuUab$X1 zb8onMC+QrO-9Va?>5U^SZ^Dm^Gvkn?BaZrm8AWH0QJb`y`g95Cmyw8gtIweA8A7~h zIo|Wfg29Sjj(Jk3j2~fdjN8O#(+jFbA(}o(Lx*WDjDIk<+AGaR{F3b z02Sb|=9lDnCUhEZA7u>X&x<>5wZ2iYfqHy6mk9to#+MqIE)E*GN`o7#1ZcN@mBsy- zrlemU=7(IO8pjLUz?}L%CGSi23{F5e?}b%rUZBJuKrm~bb<0_}%n=yX-rQsfs_Mqh z!IiuZRX%scyLD4wskZ*nS=vy|bLjk|Ly?ji6ww{-d>pX+X!CKPLxIl7Z)D3QWG5xc zbXw(nW~|G+f%r7GzR@-PHmcM3=60dU<}H@bz`4y;jelm;2rbJ15T~EFz(=n=u3M!uofZ2pboueny%N;eC4pYyoi^jYc#_ISWQ!{r-yu6uQ)JWYryAIJ zjdTj?A*pd`a`qT8J0$A<@&pQIA3=%Yp2m3^<%d?ka^zd18(?NQYW6yskZcq?YwEkp z5Q4ypJp3wt21?vE&0lz=JWULEq3_)hhm7HpuxqbOGehkcclGTwY&& zslU}vv^m#apL<>(E4SzrSkDCJU{t^+nB6uP{U9=HrTBBrrGQdwVt+9Sj)iEu!DZE@ zYhQhTV+s$Kk_9k`^-8zeqkSx9f=C@Ezqi=6qzpOUp+v)ZEv#DaesswdGQ4VVrTXM_ zvHoN1JDmHVu~?C@NaM}*Dt-K`IY{O@ese|{!=eO;qC8!rYy|*#MPbgyN)6c;b|_;W z_c|I^Y_ea-m|Q)qJ29QUmh4ra4FIm9!PD-MVil{}n=j(t$j6YaDDc zD717jlz?DQgWh~h1{XBW*C+ZO?p2D^#`FuUAwHA$e3AQlY}pTV7~W_fus4JBa-KFK z^OAvD{($xLsf1rsarZch-k+}{68XzjIwyAhd|VgCd&Aef<~3#FTBgu=GbJMC?9q>< za22j+4CaCzk)QtxUT@h?WV663S*;{KiJ7llJc>IjRu+tKm@R#GL&y9&is?f9=4({_ zJ4v?lQ34lc_aHR_Cee?^3weY-b9p|s^#kxT>lUl)ccZdS(sk~Pd2gW1R&q+-%5PLE z4jEEHGfMa8QT1?`&&yTrN>P0+Rvovpt*6)k!>U@L0sso!Rufo4<{`6-2cG_T1>NnB z8gbZu`mlSh)oy9%2d|N9N3nAYf7F%^4y(p(@__{BcQiq5LPE5_Zo(D-Es*3{50ahNGAxEXjc}UggH&N>{X^ic#=g zO88Zu)gOZ9xG~&uue_2Av|FsV$^Lk2uxyRO>__GOs6deK!4_@cc-7$jQPanj28`nr zDlfjpdTDflnaPf@knniJIj3olQ6}igK~oqnU`WR}55LeCSceBYC3Lf&n~G|>SNX>6 zGqj8x5BX`}gqqQVMyEWFRF`>E*m*$f9h!~3{7u}+k*ua9dW3WY>j6ASke*s2b^5t| z4{|&2C1FqT$&#_&24Nna_l-sra$7-?U zQ2qmw(JvQ2jB?`3jWosR*f%_iPb&}JT$Wr=Tx~_Ud!hX9zt~2Sn1y1egy1@ z;DjM2L`v%$pY^s%o- zY~CMc-SlnR8Dg)kdE@^KGnbLN_;NoRa#e~Z8n<=aDk@w<26}#g(Dr42Hd2+kCoS9}#a)5%y`(#&zrxVdgb!39I7!YNqIC&?> z)puhZB^Npcts-}D>JBI8v@!9Ee*1KjfRlCAt%a|0bkx8qu4BCUCVyvS5D;qqoaV9E zb!Na2MleGkM?eo~L)c|Si;Sf?rI!_<%6C6k69z&YqDsg$qeM+A-wD}W$yS8ix3AzE z85(L}Wl>;0u_2g%0Wkrgd|@%;d}qoKPI-YL;aZBls!SF1`ul^d^3I#e%2tV!xZ>*; zV1Q4;(s!diNU;N-!c2{a`8lZZn*b&mE$&QVsNKcxRLUdc7;hVV<1&c7(IEUq+n2iU zcj+1@+5Bj3eL~xxKJ>>~*Su%abq8-Y9ps@LK`ocIpJxaFsX|H*-5ys*voN5#}8x4i(Sf0{zwPR-GhF_#6NnT*&YsxR1+ikrk}S$5G04(BGswX zG<%M`8p**h%Z{7G7qbP|AaOII#uc?8OTBpYAh_cEm7!gJ~pFJHGdgXLNypd&3u z(q|A({aZoOs8W&7TdnN|4V$kBy{YOfjMQ9>WuSOpzcn-C92Cq&{&_BB{OQa*H;jzt z0tVdVmsxB*oPIq=s{&T-BEKVN7y3=ZC(77k1}#aeaWv|&B9ia3AKc|pPMlCb`T{$z zWnd91ZH7N@n6Fo4S_wn`ZnFg9N^!^57ghsBeR+OXEz@v`mcum85@kf;z*ol^h*y|X zHLYp+4^vZx!%Bbor)c|qiR0KsMn$*d3frr6M_Z!!Ii=7-79zL5 z*XPn90ee#Y^p93tT zDTmQdIbQO2KI$i5U5Hd0?iBlD$l<2VR|$Z5esf5k(!`%xkTsBLg1!^H!HNZ}!kYGP zl78tFYt7s+dJTn5mHh5|E43ZjoseWTDU?yG2h@fA&M9A$?oI)ad+Ti1nY+dn9&=U+ zKX1rjoAWV_hw>agSjzm)k4i`PC1Wp*nE5AS>$y3o;GhF>)cY7w*zkE^CPI#H?hC%0 zKHF+&8&x8t?bGAQJoUxU@f6p4io9J|9j#z+o9q{4KTZrI*C=v&NlH#_&3*=wag{i% zL@7oEX`G9q&ht7T_NHnCAdY59W=Hy_C#sGM#yX$PF0+Ka@b)DY#A%Hl3)hG&?CZRe zyRYy@<=K~MAIw#Pn#XDQYw)`n#n1=s1c!mjxb$l)!|p>S|4?OWgti1Q1%XT z5ST$nSD7m-NGVamX?;{%q0+Y!kR6>np1vC0sgS3C{OY{QwfZPimmS5?cGWRBT5#<| zt@n*7r*{UD)?Fj{fcdD5K{}M?V8BMFV`~%v?<~-y?E^csu9J>8FV$mFE7m#OTT<$ivX|w7?`e1s*Av57~!Dy@E1KvHa zpS^7=JPDBU%dsv^HsU@X)bZZYmFE(ci1&Mt>RogBWAN-%a!Bg}80uq28wNUf^2936 z{g~RMt-^adGF{BUej5Z>%-A z`~s^Y8|ee-bC{_14dA74Ivs{v6K_eI9+CM+u-R|LH@~>IX_q)MBJeY5s<78`=+%k? z-gEX^jil6O;p`h4t|vDmkAW+6F`6MI7Ki{w@R9Q#$WCVXkqGRf?d|&f@TC27jY7V4 zgX#}kL3VD>44zOGHhhwHrhYq}(ZG!`s-|{R#2Xa?`{iVq!d8CQnRg|lFWFa-hrr3S zz-h{2m-+#`iMMc`|CYABGN4+HTcjir2VrC!%5D!WQJo1y**;}BFDBB|dQPZ64{Kd5 z9vsJ30AOeTW-9bYrM3ZYbMxR?JDKqQxl#-GJg)VlQQfk0`;X?p12Ll_3aC#V{C3pI zS~VkMLbIJ$r8cpW+f*%MI1S-*Ooik6WjA=>6+D1hKbc-CoEBI);5I!S+gGuRlutCB zfWB`+OE^B2Ouph?F_kx1->*-4BX@$`Nr9f|G6|a zX%+{H?Y?gohJisXS{)ysKnH#d4ZUVrU zxDQ~TU%NEq*4r`JDZdd2;2VRhc?TqyK~CpxC$Z=E*kT(>apQ+(09=(j4E_L7OCQe4 zt2_qA*IsXLcs=PyC;FC~gm1V*c#K-#<|DrLTyZE-4%*`c$bMC0BIhxx?^&~N-tekH z;nbSv_%!ZoMrBpp^ahVIHIvp+c6j$pZ=<>$^0D16=(t2iLry4;vQF|8kTcNfRC82A zh1>QPOg^C@LC+>}d~X5Mjv1n`3qVp zs)5Rka`arVX(7B%dlYtL#i=$cuZnh~@(>ilcF1ysL*eT4&0~%meqoceq>uF+7c(0_ z@@l^d=hgieGK+N0NB(X4E&;N3|{sRbKy8AiGoGAvd0zw0Tnql22vwY&Qy3{+j#Dg${PTzYEg#XSr@8p1-l6ba_09 z-TrJDsh5U3#1FvK1B$;Bl7my15z^l0y}82fC@Xu(C;mkYfe9`MyM8ab{dXc2Lt3UM zX>ui~Xc$85xgP`L?_Yh3rwo<8jd^c59QIc+S1u|`{#Swh_d7xQPK?@Ld+Ba?T(Ul9 z23Oqk^W7U`-5a(->AL;==zcXUPya9LmoYmgt$I_YdT;7mBi;FHvpBUItNHbKey!e1 z3N85;0K~c(b|hAHkNPl(nW@eB_SO7GQ0^o&_UkS0hIjSDo*zI8@v-__prA>w#) zPh{HS6@Dscvigu%Pfuy`@|f7SzP`Q(81O0F6_;w&6Td6r9r zg*G(O(7iH!eiQFdvo4X=p4O|t6_si0Gg7pK{mIKDne=c&df>G(BWHLzN@M#S=JnVI z{8y}G0~HQFi!-iii{L+jeqDpUY|$K&6K&eBFfC(-yR4Af)TEccQGK|{t;@HF+G-UZ zTG)3|#;81=Z^q@2Mh~6HsBnHo;4&eFvtNqbMq$sOUt8f6Txj!D<_DGi^@uM}PUKvWJ$^WkM8C-`Z~=&K&aIOmA_GvEMQ$!4K9uIiH2eT!qoWW>DHa4! zTm{RHskoydv08#qh%{%^=U_)md_0u&-m?c?CmpQheOjMuA}$=3xh+Yo$0&L;;%543 z2A=Q^Kc|}iXz>=aG%P^&_PaV<`l6{4A#9jZTBOB1=irnCY{Z4xzPVkVIM(nU>pxQ$ z1y#bT^a|%zUMxR8_)XtMuG(SrIOcj`2pR#G#oNuR>`b4jz*{`rq0u}p$eUX_EpcP{ z=Na)ATgf$sO>RE#+sHkahs`hzvYP5vk5UZGvM$8a5Ds?f6g>9BFE^^^bN0UA5UX-+ zzuvsb>*l?)NDJU7Z@kybSO*N92xfF|a={uvd3ih9l_ z+vqVWH4T|aV3SPUmNA)N5lea-b){bC^X7+uRey&{ft3lz19>ADA@qkN2M{SCWpIw8~q>s8ZuQ~TW)<0#%;5L($%vr)8>RS++HMBRVl?D4krhGCa z_SLk&5O5de#%_c9N7sIXE5t86XxkcE3WaT#hIeN=1=*boCV)$u8S|( z5m(uL`Ama`(D$^Y{cQ2kmc zQm`HX5e*Abeb=V-?rZ@w%}rRJsU_a2!KKQtm(n3891pwpx`|KneD{Wf@q@y#x` z>>`jjapGt-aq$LurM+Q>XF6EY$>f!qUc-34-tIhnvDy?3F+eHeh8T!jQFi8g+22yC zOS7L;$8z(z)WM+?QARJ%kd&yWqQ*iJ!US1uRHWBRS-OqhwB8-jQs?F3zo`Ehpr%cT zvk~xRd)~$3a#`}1ExkvR%LI{=B7*RtO?Rys2u^fqHhnBaTqB;pI#SW zca9}XIhXH_R!!U7^jjrY$#{3sCWN%z`O59im_*^b?J=@Z`{UG=->OF$(a;*SSfOP{ zAlV^<=Ifkog-00%b3TsRJaBn=Pq|}>3CQsT5YBUtllayEs0|1w_$?i7plDP$-64yX zFYn{l6(_k#r8F|(gY)WN#azia=ZQxORrw+&8#nUHq-3`2?o4Y{$o@D1OV+BD9Yzs% zUp?Wmn#`I->;49Zot6OKmI<;}tX~$IUD){u-=YZ<5dEertoi9FW+4Xvnd_Myn&YjS zIdN2$)IS9AXK0cUQnSA}mf07ASdXWo)HHW79w*u)cVx?~rHGi{drJhmVo(|)HlFlv}KMmyQ_)dP-H(^AcqftFN7@Uexnt_9= zUghzG96toZ#t4*;OPtP7cg zX`!C2*bt~QbgF6*q(9DZ=0=Sx zz+E{?@X-6a4v}#I4nT4%Xvihg$&?TC$yV-z?F`)!kh|JiZNzb=qD6chOD)JIGh+R< zM|Ko-1qo#19$4~LtRdx%+;f~Ed zXIov|V|8d~&uat# z1HYwJEyQ~lqWK2(E6;#Th?IgKv8(c4)c&*0U=S^k*l-q#KwkOW)K*XKJbMl4fC(56 z`nYN8n_;g5gR&SaIFYHgjoiGlv;iZXyimFKR2+hR-B8{gxB?`rCRywUTLO8@g2PKA zsSU38q^oYk59hlH#Se=kCg^xVTLJ;s4%>ElYC$9RTDnxrr8AKX5X<_@)lPUtO0l?4 zpYSuE)Q&bQLSiN-Ljor|9#*G)wnV*sq_9>>Tm168BA_wgLje;czP?t2Z2Zf;I%qw^ zU_Ah%cfujswMhjV)e95(L~3^3Rny95tJ^uT#Kz6D54_i^G$&6_G9l1llF@hK?SN!% z*+jig`{~HEhkmA}&d^1bf?gHJD+R{sJ=VbnhRyFx$>uyI*PYoseQ&`iqFe4d4TalznCQEAi()Z(WdpQ0O3? z-K{3vdP7;7^NL|hjq2(Ba$}{X3TNVnFF97mHa)NJ%h16yASPg_13v%bg6!kaL-m1$ z$6w`T_xb$eeMr^)`QRi- z%xm;BAI^)urh~e39W6y?`B#Y*&V4c5lw`xUsiY7`^+rZJB^}@Of3;>6AJ5F7W#m2s zvSno>Owl~MtvWV-3HB5Dp8c7$zzE}XTa<`D5YMrK8eFC2+I%m2VSZzGdGA3C#+G=c z`^E_H!|V5meodP+rQ=%>XDRUkD1HU>=`5FSk8^O1`Ab!=cKu`=FmFrrM@9!`H%2og zcQz)#KQDh(@REROKC~mL0n6}6DLv60TY7HZMOFSCj5wTz1&~E*Z_yzS%vz!fnrmw9 zvrGx|yx1@>qD`ZSIG4^y*z^Q+n<0dq9Iv5_7b+V+SPA$&Ml<`XnTGIIcBe{4I@b1u z&91#@B9DAd>4_$b2l9>h1VCMbNmbnO&;zd<`?EUxcImHD?ciLBWK<} zMofvFpn%gkAPYLG6xL$d=C{AS zpQ5CDu)9XXIpR493`)JP{0Db5E*v|QZck~ zmG3C!QJ}Hx)Y?4k?MZ379LW$Q7iV8ncsAmp#C>cwzft@By;9>$S|F2UdO=`6Nr!6q z&8Z$_M|ylA-UB!US=(fiUUg0n0cq2INpR39ASDRyt;=|G@icG_$&>Nr$E#vjq8;w- z#u7(>xPo85o?)mVusyA6wJSX;ExnZnkZk>~mKHM;b<1hyxcyGg zOTXuY!orSs3(i%h>#J4>Ujh6}zM7Fqh5`0{KCd;R-}hllUG%p&MVp>GM1Ip3KuAA8 z4}#|D*gIAgs!})eP30=Hz{A&Nt_wCLXf%0=M-Dz*3>S-J$f@J2WqX%V=D1Q9<{^oA zUm^ry`pjm#BWPQ#wS@?YTLt1i6Il*qKx}VKzG-X0E=Ehy%0tG)FWYqio6_i9CvO9L zlfTdr(=7HrrJ(5|gyK#CaroDSP!2(d1eae820TVe$4w0}^e*<7+ddagcSP4)$rSkm zNhqPuNu>y6EieJGYRoFA-j5a5c+XR+`?r z5Yhr&3PTeI@qPS5{8Z%U>(_sL8Tv-w6`E(-1CRNR4pIZbY2lW&I@X&{`_Q06DTGhI zLo?8#wQagl?HLYP%j=AdIQcBbhs)H9)}!^buZB^9uaWP;4s+DbqpuP#URuXswG~le zSQ$qgxVjGoQ|+D;7HfPz6N(>)k*dt{PT-Rk4_2Jg?YWJE3rXdT)W)D6&k0}sIJIjE zgX%EpYI8?FKk_J-J-}{J0Z~95WZS`J04uxOenZ5D#WRwf&$6~0$fC*ZtGKxj5a5EK zL$MzF>nI?@;aSVxb@#(Nf( z3o_b*JxoviN&FmjG?TixJrzN)c);ymxyo${q4j8?kXDhh8t~YUXLwdXxgqEFlP3sr zV>kikV>2S~L{sXM)s3(BtQ2m`02g6HGa@9Pvr3x;bnQJZb-cOg0?I%g+laM1z<;#@tna z06@oQ+Qbop1;B%4gvaRDt8&U7Bb(XjQlQ?C9rxuOAAXMIktg6CN=Tf5(WE%!SdnA4 z5LW`^naZ7shY|OIsFEUYk7=<>-80}a50IvlbgshVvBq{z4{I{oYv3sX^tv$Iy; zX#@5&wW9tCIa*A2>VjO}Hxdcv7Yo>I03T=m=iqsq{gZ)X0_=Q_BvA3%EE)BHS2su__Abe* zVLm=$96bE=hVw3@)g||CF$3)!aCz{{p7%yIm0;Ws@0@aW0uUy1MuRs3lo>%%kkC^H za$I2d-|ckM2qz8;oC&+Iz-BJ*x1^K)Dng+brCYB|%nC)C4`dr;8&lhj1)4I;RQrk| zc@jBtaT$#A?5#5{?xm!Ae-vl{={-|+fxH{=S8xZUw!OXz$S3|ToY-I&;ki8ezIYn5 z@XYXZ>&z?Ea{gxXg8Kk1HyfdQk;#0-?MUfbwXd}I!A=I&eYWQkVel#42-1cZIkVDA zD9i`0pl>1T2`_D6`*Wp3Z_!AM0~#E-h{VsmznnJ*?nsdWdo|=~Jw{y&FMxcQZ_F?9n%Ca0Jg%2-?B~;_e=SIb zYoB}jGusX4)7hc8;rm@+VGNLwu$?bE{G53})ZfYgy2(F|6CM&(s{Xv{+ID4c|89yV zqFUT+vgQs!@(+qX*Dv`^diNpYa*u#9PYfsd_SaC1h!O5oUwG(*(A7}H2ZwjBbbZ{W z%A}!X$t+P;GLwpDEjyw+K!~D1f2KW)f<*P0ft2R(xe4@f8Y`(w47El)?p(>ZAI$k^m zc9;Rw>kA*@v3K9$Ml-a5O~(Go;?v6h11k&6q%C**Dwm?3|KSGgBoL7jf$SE`mQ|m( zK707h%H*}W>{!S`#AMLG;vV3m-c{;bBgSB4N=Inqy&d*aE*?s`SQHRcCy zg~CtML6%amRcXj!OT)!Zl49Sw*!_v$ZP*=4ue&{tx5M+EF=@SS1JjL-tzpm3vIlPX z=08PaznOnNperbFa4u$gP8Tskra{38RR>or$l&H@i`g@#Wd%NHY9FV1N%mmS@N3)~ z_IHt0DZ#o>pJOGPuUsH->SA?|^S@k0v*vdVNf_1^nUtrUmG+hM3xHb~IRrPa4|1aQ z9Q9%aQubbxah>WR;JW3v;?Uv?tuSk$ZE|h`ko=c3Rvn?}d*Fs2M6J_GoWw#IfOaWk zAThGbRamg8d2e%2?)^4BNCbW=hCBY{N!|%;UDPZFha>oYU!?^ZowrKlkyt_i_K(X@5R@ zt@T--VSUzmzhBQ6<14)7kfcV3-S&79tEP@tsNNhKMCTqMo%Okew|MzmKv~vdQJQZG z+g%h~LHUyr&=7p|%s&EZd+xG}u%^qJY8x80NY{Ta7roNPyIelQjT=ov8kkM)@hz22 z!rztRSq0=*RxGX;+8m$Bu^Y~@MkHXOvCSjb!HZV_f8T8O$S5^*Llwb45O#K4z(}wf zG%A;R^Y4O*zh9UbErTgJia0Qbh< zOfqAPYQ=H#2oe1!9XJ2>l^+w)cs;$o>q+HZc!Z4xOyoX|X*!3owKWjT z2L;U1Qx6Uffs}y2oJAqq^>iC3fxvo^<#}{X1ND9s%v`O(E>5(8gplm|A) z2I#&0Lqfzkn4G>|@MWnH%mlX&&sDooQQQ8{rT4dqG2MxI0YD!}z*u`qWa0RHe)X+3 zoHi7U4@4|p&Reg9LkSH60tq(uR}DD0>zw=d$~O?1k#;!5Hc-*Tckno*JsL2+^vY=+m~Gn?6gXPU%uUz&g~2H~bB+0ZAXTXW3z{@q zej~19{$s~=R620y4-+it=sK=82F0xqbgGq2MO8;GmEX(V2Vyon7-iJRqPetM9GyegwBOWI_h2{zmbkInPFDO4bX>7NZXdOYMlSnR?d=FN@hDXSQE%f0 z4M_1}q=>x?X?n(8qp^%br4iBeMt632bP%U~TvsLS_xHArF&@FWInL+0)?Gy~=1k$r zi!~eir7U>#%1$c^Pc>nmNu0o8yr-D*T*9lLm_P-O`(ehIYWtgF?aCPlbNJ7%T)ntA z^Ch0Nx(XG&0y>tE@rXhA2}9lf*`k0=P@V!%x#rp?dSS1@yk8`|--<}Yo>aWCt!Cc) zM9}Hfy`9OxJurtL((~C)^;*;LGb=@f&=Z|B+7uW_EVee|m!MywZt~q5%FYJ~NZ9im zmo}7O9;f0w=DsVg%{(Z5Ju|c*T!i|>w0~KEy%c0-*Mjth6B_l&$Fn!~Ct4lsr)km~ z+I56CzLG|;$djLm&QQ`IlJFRdzhK*cUw9%Ws%465<9&ownDg zu!XPO62C}3KO4wOSBUbSr7sSjoMt3VeH;2)%h{L;8{Z=D=ApdDMOX{uSs^4C<{DqT zwO?<8P1-~P%tI*5-D@p~4d~CA%;erV54mw^h9>Wolycd_$^E-xcIGbc@}{6ZHmM6K|SCoNQ)Kk7J~d)bRAWpgjocf$sSdcn1<* zGblEIbOWPO``&{E6;Vv;-dBlJkHP)mfTMYadBJL6Ivh&tge|pF&-w-#}?gDrJY)=Ucvwj&-jPpJ*) zJ-t88^xIZ05(tj2Xo6%H^L-f*q?n4{Pw>_l6clKA98qSrH>QLkhjp&59rg-(Jdmk{ z4WW)(PlVMgONTs$R@X#l{1!h5+YW09?Y&S%6?ZF!j&ze4nt?^12HbI(*28YVXn%_{ zjAN=4r&Bz~;LO~&$U7zYiBKc`Db}(1eIVoMSkoH+ZS=6?a@ORDmV@8C{1&fcWJ8gya3<;TokK)OhM`fYg=N9W}K2TDq;LyKnMrwA}J8zIJhL;vh8!MM8 zJd<$lO}e++7(F-0eV(Z3#5uN?+fM|gpIc6xca!r-xZt+93bIc17Xq)zfN^<%PFGi} z!05u4coDXh#_hq5_Hk!RYfE`iAB|P@)e_~#)soe3sy-*}q&v*Z)-2h!yMs%MW5z#y zSMqt3*1LX^?O6Ut^o;?leD66%@#kd+l1@^q&8_OOll^)WRi;mf6EeSMsZ&%dmLmux zUxUThb7dfLXPa616(iG-fb>EZzeMmxnJG5LDlZ_`w!*iBU~#C#zj7HTXkENoaA)s1 zt*d%zk|=B3y`LGsWQY{sj5+M;10l8H%HIB>Wb%g2km$%TYH(1%`xswv1L}7S# z{#+u7A#Yb`tdYn=;|VJJDDhM%2AoDYW|jYOJS`S?D*lG^1Xzmd;9UsZ+ZwiFvZY>J zjhsju2#vi>Z`h$IwyowM46=Qk=&{!b=QX|u@*#S<@?m?r<_%SG=OsP7`YsFWFGpt! zje6-H3nQ$*E@w?jU&9wLK>Nn1`>DKT(N0_#Bbumkn>}jf_I1I$m6r>BC z6Y_z2&F$?1QZ3|d-=8wD(DD@6ya>M(!z<_69yfUPp*)6mKd*NDn_K7VdO?WtqdSh% z7MCzjS67=7eLrrEMk8f}zrCzSfhov0!KlV9dVSo*fyT?iNy2-D{!OYEX?YS3i?gG% zyNYeTq_j4pa1(_d2pfB+)k58tSZeb$oGnIBiLRFS45QbI@_^4SLs>ilBBvQlPTF|b z0x8a3H{^qj!l`7dz^r4yjbQ{xh6qJCYh(hTm*mo|7WnO!^yx21Af&MYB5uRSCSiN; z(b8XKQOs8qr^nxNV2SRrl*WkLA&FTMV|eX6L2Asm{E)ejI4j@$m(WQv)V2y#1Yi*!J6#y=&C92VDfcj9!xsHCHU`E@^wUx2G)n+z3Rx zy{@}#KN5{F(#{Ls_1%qd+VAe%`H*OidTl0pw@3}d*p$^m!ix<@Azeq8DngmHJ?o*w z+McW?6hlM@_j^^Nhvvt7HOHP9?#&4nw6MnBj^@_)FT>+m_7k+g?k(p(794e>=B~zO zt&~iVK+=`uSy~p0YQ%wPF(2bqJ3}f4TXBEVkv_YAa#4NRJ%E{k&6DA}>2Z*NDvsKo zG4uriUMiTk^;nfxy%)Cjq}|2~@r3b|uV6{GWm)x!^h?&3#Qa0J13WlAYSP(S9Ux3d z7;ZEd1&2?u=Rxs3>k`%U_LX@17$aH{4v28aU@4iI*qETm?C;RKUcQXT*ood25d(&KPrikrkEFVj zibk|uS2oMF<=*y@0aOwMi~_KfA9N_yZU|xOwE;H2i6PIUQSlU25uD4jP0{`p(F)#9 zOjA9A24qd{UN-2#5QU8Ue+vh}D?&Ja8Cl9;_O%$jl);RD`=pBTN}{|_bEcIgq?uMH3rB{|_VAw?JZ0l}TiD-a$^mSSjqrlLpJrzAw=RVX zw=|tcmj6;fU8PCdd9p#DAy%OZX^FR%ju(y(8q3=hJ(_nYQ94ste>c`rqmlZT59EWk z)0(?17er1DE3P&!$oFhE5Y4oTkfQ6NG;Houn(kKmXwoJKvhCpf6sz zycb)~aG_1M6}GkWK4vQUr|SUX6{27x zmJY~NX%M~2GrnY4zby-*W$A+o=zdh7jvZ-xci66;w1?~OsXA2KTl!2rA9Mu9vC^h- z)yF?x+l)QRqHC@L$5zJv#!td*@-x<1wGCTjV+kU(}l>z$9v`T_6o?e-stmx=R!XCFVi5n%mlvGGSEi^-`0A?$(Kk6-EaSX-LxqAqU}s&qK%n21=P z16W^tzoO@Ejm8}sUSZEDY3dUeilQc)E{cGP|0JwI2;@Adp9?R9#IzZ0XV`wf{U=vi zuNPoD8Nk8XtMiIx8`JRJo{4NdN;Zy95qqNs+t}x;F0RN*`*NG}Q;WbzB-_U~CzPKJ zP?FJx)2`-6OV=07diy&8xkHF>c0Kv0{kg2o zkG0aSd&cF>8egj&MP^4na5)(- zqH_nuqiA^K81hW zLmFOmK|27me(>o2<<3frp=wRI>Pr41VLFeoosD*<#OleW2)|$9{*yqIc(Bq;{*$2R zn#6%7gs$^=_5HK5`-=2_{GR_x{{IO_3Ed)~9S4})9Idh(Y1QRRO4Y~d>P3)=-d8gu zF6AJV<4vDMy@zT8 zaQYLv3+_dVtk|Cbv43o8sC#e|0R1ABQTjrz%DdoOn^|i;W zTy4l=H|IX<%n7A%m$(MP3(U8P-;{i6vrtki+K4>FiXOs{IkPTCmcFm}%Nyk%uPqH- zz$c)di4Mg=(%wH1^#{Y}AER#3{Xt#ycT06LHZwldRQL_#e(ZT-c`G!J z?VL*7_;s^Goc~T>_%Y1U&a_POs`zRxp_A`p9{dGC{UcaShM%Z;fA+Y=P21i`KL7-uM?Qn6FON?Yu!1E8bdxj8-57s|D(JA^^_0v)bG3? zLzmHO?UJJfmCQzaLtsLY zPr{M6-Dmdoi3Z&}h~$RUh>Bv{hORqn;qetCsU_~684tHX%MaW%4y(|h7ikgbN~`$m z8`K}Sp~jWUY-6bKA%e-^O0@{Msg22MeyToa-`lCsLMm3V=EF~PgxR?@kM=_eY$;`WC-j;WG9n`;9XXNz7nuw~<8KjS-rYiQy*MeAI6%iQHv^O(}~(~))Eh`gtle`ahVt$FFc(YteVW#Gy`Ang!8_P-EwExdJj&}MwaR2*Sm zY&L_I9#Zu?BO>;sT~8wS=D9*HJ(&D4Ht9^x>rt1mkYkkyJ#6a+rBpYI+s0fpnVeLJ!#h} zIY>M3X3gZF(#w*|K>n4+iYmZ!yqFW_#IP@2wgvfBR9MRVb4rB@LO=fFN+}4kpoo2f zMS`Jpreop_3=L2gm|x;V=)}L3iFi0nU}na5I-77Znjqwcc4A(16kQ{4om$cGAI}%) zg#7E1K7~)f{|()KT{7I3v-f8@`(Hp;ziucNZ9&h1A<|=H zh=}W=m00Y@%jUgAU^V7{+Rw?nw3Z6KFX31CSuA}1qmKaqQd?Pt+o=7#EcEXt3DB9+ zN$d;UyyIVHT`ijZ{_O%W8W3hlcn~Y1qHE3d*6tZ8Aa(wte9Q*JScMMk77orXN~Zg2 z`W;YdzIvGa&!4o}?V9R9gbEP*|NXN>g91F`X)jXHgZcSmDKs?><*&Rl9cx$ff~MQJ zC7k8`gPjcv2&7z3ZRk~7>Uy)v3Q3s|kbBqh9?%BfEmHpH&k*&Q?5uxo-{0Gh_IbV3dGD%?x%rc+)@b#3)0bED zD=5!i(W==o8k=)p*TlcgKJdS({I%R;ZLWH+r~Hd@^FK<3B~|AIZ=p%2f`5@q{;Rh5 zP<5(PeWK9rvgY43sQ(~F{!^yfv!n3RTcSMa7dhy!>g7Lw05u}5&(3dw?lTpn68#ss z^DjTpk}*{KfA6pkgx)1S6sBYM^8P`<{U7wOnVYfacLN?t{!McHZ;Ee7ZLW|zMldM& znltNHMeo0A&tHz=%?A-Ww4|YS6jCnOSX)0%OIx8K-d(EX!A=WSkGHOj*W>5E%ghW? zQe6uk2-<7JVls;ISQXtZ}^Df#00f8Hz-On32-TC;W`J0qN- zfs|aB3~@(h~c9N&JKJq(ciZ3!egUq3}Z5kQPXm4!+p)u_grd10D#}P zk7%qhs^->LxQ$2@zFF9vB#%akE_k)UL-exgNZw-EXQx-i*Tfs@2R?}>770NEnS6dY z-=tbmfow2+ddyRGm2X15S8~EHg10Q=NK*!BOPl1zOk3kfN?}EQlI)abU}B}kA_-RN z>NwaR#aW)!ka_jfufsKmQy9T=^^-8CreusiYZH$rNPF-~x^=S~PaAGcgV;msUIoIw zigju25BJ^erRpaJgk;vHY+^5ZK6=2JNpJD|;h;vGY>_pmVyZTrD!uCpGFa6j%BCTc zuN6L_7V|*YfupT3S19u5-BP<>W(lWq{qx5ESVoj0Fg1A%H~%jc{8Je>NHb$phm!us zjr_BW?|i^f<^R-yDtrhRV|fQU&xuxrKfPG;f3If`8r@}aw>Pfq?BBZm&m;P`vm=)d zj9p}P|HG;Kw=%fm1Jv5sZ94xar~j8S{_i=^8}pxl>MzWVhi82L#BS6743mjhlWD>vvO*WV(yJK{Y70&as)LInqf!n8@;+ z;M19xaxXc*zo8`SxoS(?aUuG=X4f@##th?O$^;4STX`uaDx&x5%h*K&_5Ac?fJXYA zrQS|bmThvzPhSN%sJfjhCnygG+Ueg&C(~BwADwu_!VodxOWUY0F8uAxH`yDk4fy;o z{%3Ww+WHlF^35J+B4tXy>wx&8oUP%;J6%|0){y|fPBS&(W&((o4(s2noARI9;EE^z zuvo2H>rTWnZ5S3QSqOW5dS75v>vvxEG{FbUYdiI1#i~sO<~yQSRFF@OP3d5vnt$T{0-KQ|3T`JPl)Bo&ZoRU9mXba#56KPM@*lh}V3qVTsy&+Rz@Nwqz`{I`N8Ug0l z5*88hzBYF+2X>)r8AYZYF(b>|K#VkFHTe|Ezy`a=4&E?Shw|G~6w!{sS0q6es?N^q0>t+WTry9<5*S@RrYyy+0 zbGpzd__E|68T=nhvp{Z6czE?6K(lNr&*nAB9VBVK8Oqfu@dG)cO*Ka`5P;%2Por=v zPs@;Ea70jmQJp`Jv98c(0YR#N|Ll1~JeuPU;OWp{D75jlzSvAaJ~nN%=+>vti#6mI zED+|f#2P;Q-H7QV;Bo+FIlp{TX)l-Wa)Xo%8&nV*qco3nX*?M;7tJi6^XmO`=E=h+ z%eUnFb8H*@t!^FyU|vMC$WlAg??fS_3Ol%CDkgm8!D%BEu3^2$$X@p)eK%C&mx|z2 zYT%_EDzyt^^btqRBzh`V>W}w6R$J~wiC`pl>zfFmknz<;#i=+fnp#$M<21uuAQS29xY$I2BedT^@nc6qc)Mo9U-wBGfoSm zn4(#i*XMN{c9RCvpt{!!fIJ2dB(KvfFw_8{9Pya9;D-scBSYfUtVIwVQ|&4a)~{8RfC2(|Wf64WFqRZv9;3vy3 z2Y)L5$3OWN-6);19gx_!kQ$ZOl%$Oh=$^?2ZV)r@k+?8!4LiLMe{Y4S%( zAfGod!&n{g>E-$EkU8>%hVV)Qx!DttAo@&=~D(&>$8s!h(t?ox75jJ0D-sE5nQ8=^rMzc5TXwQzPdwAmOih z3VeC%Zzka6D?xTsO=R%=(%@+!iDqvJDn_b}met_0H+8$M)eqFB&TPu1mZ=W|)r6c} z4^QL-pc-aPUEu=uqrtij3Yk$w#dr2p*lnofcPgB%e&-ra!hbZe=gZ zA}?D4U_dI%T(qnMAXoN2ii*lGr+{Iaxlzz--(gMswG%pzzfRb`k1vd)5bj*$>0 zb_|@j5DDt%pZWcFmhAwv>;~;RP5*n{3hbfPy>``mTYfhwqc@mDT;#1Q588Ci*00-> zk20jOQ3?W%Yx#L^jZpjS%^TJqqy9v_(K_Hh6Hf%RJ$Sp5gbetf%>=GI5qA9cmUOix z0LU&#<)XPyh~5dBP0_k#?RCa`b1K@tfhxMTU1SjtBsrcvNngNvlD>@9`eX0eg|ScD zS3NcY-?I&c2#(fFKB|NU_I7molLI{Ay;>iT>nsbC%iKrI*k^CUlC-SS?rSFaf|7;#n8qzTRtt4?S`eTF>bopNclP zV)(gz6_a^@C=3KlsoZMZjZ|8j(#5{3{6da)IIO!pAYs-5uO6M?)_!^11=*^g8^cVY z2Mt0sC){x6$baQ!5JK;sc$@&`ohdMEH1c(Q3FMW#2>1jY48s!f0#!`4#-+-B#ZM_pAA3Zkh|zw>NKnm}q+jFOGsO3WcZaDz zNvM5DPGsoq?>^)FZ8GIxq*f_jU9Z%k$XWM$O5$h!xPDdWQ1H;?QqmC`3q-mg`&1d? z+53U4!=O{4O-dush;eQR>zrE$JOxgD>hOnbb%3&x>oyXw?fQnrEqivcj}^OD-js$h5^S+Fmrl5s3$adjKtbj&A>k z+jr(T>wC34hCn>|u=OJR%1JH~>a5m_S`|(-u8rbMud)`5o zbA3wmb~3ZKm-}Ga3X|t5O#ah8Pv}jTFXuF>{fz*@_DS{LA|XImispYHSe|s~00NLB zyUQd^jO*TSHbzoZ_Ahgzo62pTb$j16BGY%hsRh8cex1hvG)HBd*5%b=GP*S%LBGMV z-olnxlk*m!{G|ax(EGXJSp~oTF5T!w)zn4R5>kf>GWG$J0qPK-Vmu8Wap5f6*ot1^ zIg9bg_7e{mTU(K^2V|leDY{%D!M#N(oJVe}=4IsR^xc<9496xRVZ_3RCR?ntW8;hO zw^Fb%<-ky?4p<^_tZ9WN1|Kx9H80wHKWQjHXoQG_ZV;euWCfo}*vEqLi8e;FFn8|D z79c?e*m4BAOVhgu@s(J1*)D(X+s+ya=;4Urhh?j=hBd18gMAD9)lYn{ z>)1$7cywkrr;Kx7?^z<5`bx9G#^kroyai98zL(Y1_sy_lojBoxj-eTFsB`F_Otqw& zaALY%;!pJMOfZp-DRlIxuS-QzOt{K$0XY6ud})>^}{?P|<)$dHg* z=keI^(v%Y0$7WfT60-EK1|R_whZ;ZV*M5mlwxsD2pCK~typn~-6&T(8PMFB@bbanx z4!ghjSpWpvN?pdpya%KG+uU{6fKDJP&sZ~8+~D)V-qr*^b~-kHaLvX@eJPCMCAc^e zG9WMlhJVuuNdl0m8Iin9o}jnvfk#pR&|QS2bnp`x=0jJM(AqQdmBmuG{CLyJDKiiU zG`qHNnWB2{Y`f5;n$Hts7D6({qq?>w{C1V2Os;SU8B(7|-9MRru&)c6HP-qwbtE|B zQ80848~3 zu2VLq3j-fkHv1{GIJNf?HWYDjo%a@420HOXH)*QBs2kcB8gqb?$^=eoW()gS_YOjA z;2IDTt-(_OXun{{GP}X&o!N-&UUEkH^NMp6Z4pHyh(|2L0O0|dNw7Mh{ZfG7Z2YT) zbd9n!LmTY$y^a^PbT9VD_Ty{CPKS_*9=-O$2O(->@|wOg&SF48L7|}j)YN?c1-F#e zGKbnJ&5OuvG*G+Ofmj6j28X}68VtOAeE|1Aa75hxsIG!vlV0wOWsFzDVaEB{THAg&7rh(m7Iu#$n!kU6X`u{HJQ0vm z@34o;0p_Ia-e6V_cg$g?xm6`_<4fJ5K2a6;akDRWXpwW!?YEPR*mr;?vwLf6X@p|4 z^n-Jix$%AHi^*(#T1o+N$7F}58d38D-p2NMlUA{Rl&V#E1V0gqfgvn`c zI9;Z9`1H!F7Jdp_Wlz34`gn|qBQ!esur4>3f{qJ4Wi~kL!}HMq_unHkj^Ob;ENv7G zmXrs#9yn;jykK=>f<10dyB7x`TmYsK2qsCuTcc1lej>%T3{~O;%JeI(+e|onNu$VGo_zp1rbVoMo?q~9PeiS?=05=g z{5dfU$^^o?`{%A)4#@{RZ=9JCdENl<_K@q(msokaxY=(=mh&04N97dFA@MCtu=gDA zwBs8A8y%w~)lVWkJm`!GaU)dwZ0hxB^&=l;eww7&tVj58-P7u%HTVB(eFF zsGFQOtZumqwpO1`+(*P(N}ay*{Qe56_Nw{UcQr@d zrXr)~cZQegLfg$R=jDOx`)if=u94k5K946eHv_YxvgUfy#2^_!IdJd(rj}q@lgt57 zTLeyXJv32V^{w0uVNudo15b?zNvf!7+4S3dy>_{nqC>E_iJGuSKiEUXf%yiLScCIi(G?1{FXJ&_B-XK!YyPDLn* z1!xzUMZ&{4(6H}Q)DGQeVr}8V$Y_8ieQ@A|kZD)FuCX9bC@L~5NNqrHX?dT?`kEIs zhN=%S_AiP!J+7B}@mQMC`zWNE?_@Uu{)s@NW6)uxVKXe+1I!kZELc_o+jQ+J@qy!( znYp#)6`QeKPgkHK5$gng1Pi=>u>j3qQTjYc3)R@r!C z?7J;m@7Ie@UFJtgxp5=Qg96ng`Zw`lu4Ox6u*b`+ES^eVRKRaIvgS@-+e1rgf;M>F zvzE++dy_*B6G`U%wj&bJiVbo{6|qZ|Du`xFKYx%p;Ma;zrL?Nl{n3+b05C2j>QU23eqWl?Hx8V0_1-N6KnuhM$ zaak#kqhA4G;QnOvenuZGTHnTUE+56as zo(Gd@A|^z~&Ep36WYjHC*qfp{zF8-7w|dnB)4uPyST4xNufAXUGA$;;3;6A{Of;ZnV9uzYtGg^Ha+S1jxy*^!QQ;Lh<|C$rNQDics z7>{{N3VfI-K{=kg;!6mMPs)ywyJopS2yuz7cb!C|l!<;z0{yZ4!|iH9bJMZRFp(uU z%ytK?_Gb8r$)Ls*&Q5#6^rF2XBN~0Nfr>bNTE$eOsX$9-`R6XUF_MTwQnuh zEP9#Une5HU*%tv5Ty7gjx!uN|kO~f;_Ss0LFap@PK;S&8rU%@owJL1Ss)!|DzzU_y zztwXHe=iXjift^0IJ;&yP-u?2Pv9**W0KMVmcb2iR?qohB;VLHhV z7=bz7^^>=kE6Fk9iWq4-;K4l4&OBxaP^n_U~P z`=@@m#$wFr;)7prT=~kpk6>D{;}dJ;2cCGhA~nrFguE1 z9zMYq*NmKlTT>NIb-`_Pg(hF@`vb$N=UcBt(U{~FV0!WzZj!B{Tl#A&Y7_qXM6qFO zL)lRe@|#roG? zXz;G^TT|diT0+RF4Or6C7%6R0>b=%l+Zq86n2E+AMyzA|bCViK| zV_V$hG;*3{)^L;tMi!6`95@e2n?$ZcPlbqm1SNu zEdD{41T($E%9h=hM?V_ZleSi?jz7Sx3X;m?f-Up4oiwBkJye{ZXh^|Yy#M!Zv$_{F zyvEaCw6T{9X8n#Cl-V1vWPHxpPE*Xi+44AAUZ;YRjYcDCCo^L^=`QS5FXd=8-VR{W zJ+a++j_O;#kZs}$fjC>uU(VGay-w!eiDR~?^R=d0M8V39-RmX4y3 z=iLPA0NI70USN=qkDPDLUm47ZzG%S^TlkDOQ~d-V*>%Hh%qw$xUo)2%eLY5Uc7^GS zn*AD~oltB_b(R)M9J9vuS}Tw7gewKbW{0eTOnBvS+GA|^BCg-V%V6Zt&z`4RQ@!6o zH>j(Ie{0uSJ$?#de8V6~wXS2p1N$LsZ>36NZt(s<;+R|fRCZrSChMS-GPI{k@>SO) zpRBpNT|8F&EHX&~{!zZ)kNnYHu(c-EkXg@tt2)uDN^In+z; z9E?3xfc#e!g#x^?DZzH7A#oo5S`ak}&f(PHTW7*K95w385x#2Dc;$_lx0GqE%rk8- zI;=?mxqF&Iz325FpqFm8!wZQxxw`jCZA~s|H7S$*7HoUcPK`Gh20-|FEEwa5zhAk~Qs*rII5Uzr7K1%TVuZ!4BDl0c z#tF70Ts0Zi6DCNdpoO3kAcHAiA48)YP2D7JXgS8;K|yKYcKBl=)-dR4(_<;&>hxz za09R_eca&{0QK2dWfX@ie za_cYyereHRK@Ju~DDC{49_VLV**)T4`FFPh6FzSVK7lF8{oej7jLEmFWx?zVdORdG zUFsPTUxsR$W*YMeWRQ(OVcc=xN+)i3s>ppT91sPoSZ+UA8i;VdFErs zQA5CpfE`27N0}D23C=_u!;HIp9h!KgbvG3^TmQ!N}( zE{Ep76*`gPXO{%{@SF<;djgTs418knIG6#3(BZg`b`GCU!ymh|-xZZLF)_Jp;J|J_ zeArsbEA3xSn`f;KocYeA`v_zL9JDKL!i_1$|I`iU0l6av97n_KiEZdM5``TJMbWdD zYNL)WjAc5eub?|q>oBPe0-=u_-l%Z6 z?a1U8s-tbQ0;!VS;>F)Uj>Bf(G$$8LgIUMhHXhfU!X=OS)v=rRy?at``-na&mJUm} z#afGSU&m~1euey{KyRfLj1GCFvdjzZDjg%kPK@RE+VrptiE9m&Sdo3ySf&E-Cn}be zaNqYfoEtn`f7Dz%p`5fjpo03*YwY%-0T1bLiS0bm^goJB#d8qFJZgTqw*1V^Ikd}4 z&kv_lt)~)vzy-!UktSEi`mV5cVw%nf25YEa85h5Zj^+DanI-7cC_{*lKdz`^bc*?g z&udv9nPOOH59Q!Z5H(g*t8iI7n!QQMbUR{0lgf@U_maha4y1@L>jTs68Zg&7t92Bi z-Ts*>$>&j};F#OZ4aA68**6tw^ziWg=i>-2noZm;R^eQJAwd4vC5gq=vyTyDh0$GrTK8Fv?ZIq!BG@$hG;3Va6G-nL7g^vnm z9>lm2onpw+(6PR^gQf_54A~5H?91$!9r)aGs#}cQ@KFk34&J-rG<%-@h}&-i#OOU9 znf)sVnDakdBiRiG!o&mOIigs%KM#x2Y5`_jpV-tQ&>eE~4YhaharR@^`96aI4;qbf zuC{#jRl1IPMLm&l(v210mb{HFz01w-^RDJe{wL1U;>R7^I{QusJLcAho(Z9@0W^f# zZc}qX0l42{={}=lR4tPhW{=-*k(&Dr86X6?oTd^lJ4r88K*_}T)*M+sf4r)m)GXQ5?~dK zNJ-TRich}+3ugZ5>@P!>b=~qWQ^jd%jxF0iC2ADiS|~~~#6xpdFMnT8H=g(EwFWDj zq6$YAE=z4E-I+WFtt77SF%Cdc|IY`F|7O||&nvPKPp3S2d%mayG7kwotQ8MVY;dE6 zBhgPF0a~B~^;G~c##Zye&)iI{lqb9*jvhAKZ)gprMIgQ$wvAoCr)TbKjjw~fNjukn z9V7A9!&DL@A5e}>I2F0va=L>$O$DKnkd#6C#-A%y&3(XlC19L0R+Avgc2@@+CISx* zAkYtu>;Mq%eX{6k40f{7yH@9-m_-+}nEQFKf~XHIsageL04}J_PKtGW%N;|wyncRy z$!q1-Y$FQrX~pLK1uWl%Oxa4BFn$k0heEe`$XVwdcQ*)-i{sU{iboyk2F`okU1~ejgZ$+QSdi z@&nNwXEDWN$Y5e&$D-srlQIh+272V6;2fynPf)=pZ5GX%IFS8?tEJ?kXAG3Qb`Prl z(#Cy>+m|Y&--<}>#f+&gNOCm>SoJbC=+MuO%iq#z$}I! z_+RP>m{s`%Jo^khLm0te%Gelc@*IB;&|I>Fd>Ek`&$fh8g!a!F-Z|jZo6p~y>|A_q z4F#LY7r^@H(-NZSWzHv6(oEh$Wr*|v9Ed-y?~dIi%>5{kQ;iEqEsNpt)}6^d_yr^U z6hGsLfmuhQIL~aRN@$U@IiUYRQSmGWHhMEF9_a5cU47mzpNvu$tp#I zpq-`%4Y!ph_gVMSMnW5yD?x5rL1$yV-^WILBk9#$U5z0zJ0t62aG9gcx#GOQOp9Tp?MPxchv8yyZuhf%5y(ZaSkm(RRZ_FGZHK@p$orVEIp}Wd0^}9a5vW%H=VbRl{0pLsX>5 zQTi}58#>gt7ldLR5+yjeVJ>y80DvQyG~ z`g}pdEGTeV`*qY7xhSz&C&x1WiraC(arNWY7ztuRItIKkhHW;r1a<|gHom!LVzd+| zd^Nz^0kTuV=cxg9y`MT$Ug63I4i67nG45VtbSiJKh3zrsM$F5Xfi4V2RM! zzX-*719KKG&t|2=l&vM=mOz#l;QrCxh@tKX6WzfoK6!ntl zXm{b>9yI;r!sTK02fMeC2Teb)kFbFn{#n34?1Xs7B{$ebY~1qoYE>j8C|IR4koew& zC|h$LpFFO3{)$!s9&p?{0*9$va47t=k7%W)F+olf8ue#E)V_P;Z^|eydu8(+Yc?`xScH+XTEep5Fkp4ldhue~l zz&Rt35o;Z7zb|S-ktDoUSn2egSRycrNB1deU9tz@fw^|`Dse|*tqYGVz~>b~9-Ub& zOSImXIgE1yfQ~9Wo4%Zvo4$tj8DPERh%uhefO|VYB?X&LK6oi>Hhl~=LjltA0si*s z5<8z4ChDr`@v26R_UN>bJKiNgVIaH)PtMT`idJff^4ZO}X|m&l!`GwVL%SoP0!`*K z5#HB+G|gp^5CrUnOPL|>Wv|AwBj}O^ketWw;%Fh-4Tb~vLGTmGdT#%%-d(JtS8g`k zd!VtuOVhypE%FRPlgX#4+a@vH<~E;nCp1Xe!B2G3R}F$U-6W_k%E89nAln>0vG2g* z{IMhnbzzi`=iuk2JSHL_&+gKDuzD#pf=HY&jwhUy zStEj7Y200Co#5>dZL!1nihE?C!nSvC%83=Gbb>4~Y&>-0pQNgr0g0LjTc2U;86UE* zu`<-+I1`|>m{aUM3TKD%0CNEIuc97~w548ng~xV6Y#+-j#(tSbjGo86PoNJ5==!x_ zje*jdg*)2hDBNB0bcjUF&ja}HXZ{Lre!A+MVfUFu zY_oElp4-9)X;dxIvKji~BIvS%guv&f(ywrZ0i|2D2lU6sHL<@(QVZB%u{EeHXAEM}{E zp9V}#Tx&=LYIcX1#}bPV_jVuTm<7X!XJke1QdmR*a4Nm~@)ktbx>fCCWmyUUyHHBy zFPV>&-}#M0nfLN?PbP;miaDqzI!Zweo~w8$FfmPPiFT3 z^)qd(JmH23!eC{(3&8qFK!lW^eN|fhqW(%fr_ZhEboL9FZ{ zc1OUvbmY`6xs~rATP06Dgug+x!wE%pP1pK^q|pfg?G^Aj!72l6UX4ebTLt4;habaS zoue4tCxV*X7sIQJ$Em*@5Nj_y5`WDF9|$)b4LyH6iRDB6sWE@xRDb-+way(#WSF5m zC3oz;sK@?=i*!lR&b2cBO-y8CBFSgKE6uTCw@E|%=jV?zxJezjLPp^wnqWS1em84s zcurkUDyY|#kf@3uhG%G)Y*s??-8XSN(PJ*CChHXA*X`Z0{m?PwEx)m4;2?V(r+-j= zlEJiRJ3Zo2ll1>0@2$hC+S>kK6$KFi6#)SOQ9?mVLL^l{KuSQmq&uZ!EdixNxfy`T5}UFTfCf6jI7Eihx$9CMB_?s4CrZ^ig6Q*%Gpkisbf z47OumQprts`M0*E}Em*sa<=Gn1r4w1APqAod>g)d?oarNdGE^qNiiJ4;BY= z9Bxm8Y1CC9Ga&Nr;_lLDsH%FJzX8)U5MI|I&9=IrjI3dg;Zf3G!Bjf<}?WsjJXqbS(Qqhb4ioiNihpba_+T_ zsVF|b=9rJf00Xb$s*`QuFkb;R*&(F=2T($$EvL878HF5g&#}Wz%9dVnPv08`3Pnf$ zdqUeuS`R24my;$Kdy3t#NlEO)d5x=%UIDVVtWCM(8MXlQ0uQ{~ERU3%0?ZZFku>A{ zT+6;*nBe(LrlH~Z0SWX3J#S$c$i2Gp#S(9|T*g;2CE?usCP)%E8M z2k@`1&K$Cd@yuopbq^e(>^q^Yw$k_J>u$xrIU9bjT^%f|gbMr-ZpJ0h&NOXp+dI6x zk2K!3J*)ygF}1IVJ{cr&(?8W_97~owt9EhQEWo373QeCnE0!98&YoMr?oPhXahwAB z?sG=yRmCcHOB6^6;+maK9xCI+v|ZKaD!!_-347Byf4Azr!87?oT%^V`gU zY3$;RUCY+ye*NfKIx_Faa-4Rz_ji|ir$QIboOwDo-8%K!=u~mux{tt2{W<~00OOVk zh<^nRpRsyVI#d3e+g#WP@Li%}W@gm~;^;vKq-jsxkQTbTlkaMMj(miqH=jiCu%EIW zu9-kFRiQg9Q0&^ZEpsT4Z)J_LnAu{O$#qfdNfdH8E*c=b!JZ*=uMwcy>t~P##BX0? z%sDG64RM)~CPae93`Z-@8F$`kFfH?Ov{I_jB^!gD2@U~ouPNZkbqn$dY=RazJnD}k zReg-SL%va%5EVKKoD7(zDt0=-M0lp!Vg6LE7EovjvEEHqlG-i4n8yC*5f^*9dl&MJ zl4_$7|J>T&JwsSCitliiaNa706_-8@!#@6Kp^63ljOye_l>WJa`a?3ST=uxXGh~{&uCb_mL7zRMD#D-<)6G3JeL$)bv?^n4+$=o`)n6urHq;bTZNES|3G zsUQHo^LdKmp=piy+D|p$aIvx5-O8~z(#!>3CHnf#?>i9`4jc9ySM23bO*XBU)2Q<4 zAuHdCS4)d=?6cQ^*)aDM&O4Qw@CwKllA$1XPGuHAY9==Wyn!;T2-Ugby$5x~ zQNv!)Y!MvnzIZNXcY*^z;=~D40thbAo^pcENY?O zdL2>$0rEWwt0M6#?CrZQQ1p2ypQ+P&YMvP zvdKE-|8>A>OCNlI3Z@VI*rT9Ubq91Os{j@rnK#&ud33qVZa;KRhv)dp$rKvTYfcCV zsQ%UD+IRf!?s!hN_M!KmaUEV*EnD$DIW9V>@MGbe-IY2F|4t1;Vbmwx<3xGnVpF8BBBj$*<%v{y|tL?z2f~pgWP`=4|-wRX^wgXj&Yb%Qivvv1bm-y8C%}wmcA=?Fk*0 zDx|tqxav{()!@&a zMXy7HpKnf3%c_{+cFKBGkiyVyH+IrVp2jWuJtAz3oX5Vya4&av6T9dl|0opyHi9v2 zi%z+$2Dn2J%Bf*-ZoXSHcsFtEM?RdavJFuxV~a5}{~oS`CSwlYT|xn~U@lmmp5!*< zgmSL3vv^D4u&jec9-N-lj|;Ws*Iw-Sw9om?T|vgP3hRbG(hGJe@jDwSnJ>o5r==7)-u9fB#S z96TBW+6SVG2W=GvCXQ9Hfj)Z>enkj*OxlO1&uU14CQoFC$rB%pVzU}G5Ve$RvDC9| zNrh1ncB@6|9uXDMdewpo@c!C4ym`CmTLR7L&Lr9)rlVq0=!X^n)g>X1hc@WfIG2+r5P(n5->z1UO}7RljcQHkD(nAu-V+nDb2QSj4DmE^~ zWPxbQug$yh{K7-|VMU?a=&tjvvX?{WghJ?{EFWX>;*=IL?pYmMtxeV8h`W|d5?p~E z*0SUR{QQgKed0P+?`-ArnyTY_+x{P|*$a9)AqcLvt0T~3n> zTrCZ?tn*Kav-@FZ5r{YtSW<)kfvJ&bvsG$nBh~C}j^rl)|+YTE_G zHP&HGsl}QYRqDgBT2c)$u00Ez84sPQ?#38rBoO{!f&4E0`OTlRiBrIqXi1i7A-4Q5 zP`5HlYBxs$MqVcr;#!&qsB0=*!ivm0l#-B7bm=?`=mNQEU4Px0?8ng zT=og!Ytu)!zv`9n=ncuRjkvWLCe=?T*PajzgTK%Qi{Zmt9#k>&v6x#-@o+B8>V-+L zcEW_7?(A)@my>R~NNt|-6>TpVDNgH>Mh#2I-8BGC)la`w9{A4X1llyjT*lt4-MAR4 zVt1uttD$^zWm4%fAYY4dtB4ij`tFl4ad@u$$P4+{i;C$Zj6NkeHnkWJR&g0t?y)*u z**sc^-A4HaHfkHPV_nrA2<$xal!CwIPRb>W%&hCh?XPAe9@bI_LA=nIe{eq|&)}f= zKBlnSnT(nG<8Wd4u6Ac}VUE&P*AhavgT-xjH(f=+LrT<;^ zkN+K{(+Ehs%?IRDs)3SkU6eCy!W3te4__+%^XiJEzSR&#V`rYzE$lY3 zZv~a>h)zMIl7|QU__iu;j1JH)yNMLWS}kb0|NX|v$-+X72UT=HDztkhW5i$Rn_gFq}rn4gxMuOF$t2^bggD0D>SZs84g(wk+@4X$NY=lj5OJga{+84tyUg|sAGG>Vbtlh{-rzGe2-+yQm z58m)Zix@pE{oxxiL-=y*IY#-}`5oulm^v+yp6y8wkyEI|uM!~m2E+lBi6Z$xHSq1z zo55a%2?}#;iXM%4_mrmB=74ap_RXi10mAx^Os*t-bsP&5q)SVx0J`k^|E9$I^Wydg zzM(x1hjD0X!}(g(9VkHU90EFVCm*7~U0^hwSbBn$;(wd0l$Ssi&V#b^;=phGQJi*K z5?)v|Qf>JDFF9tf8-6v)ua(BR)A@hNE=yL}ja@DiKuL3o2w;YpAQ{)^J9?kX{)O%{ zmjNC-I&#G`@oJN@%jW%JBBG!h=}ZVV*96DY|3obHW&PTIt3tx5frp~dNRICLCR}o` z;0TY&IZS9z&k^bEGmOnRO*X1o0%%XcNe;9E@?JcwxZ_r~)TiU3dLAr0F95Ff58!Xc z%XUi9i0h%Mr^j8EmIp%`CU=;1bFGd~z@Fbr(1l}v@^VIc^zkV4cw#N2?PJmwXSf&B zWeW09vF|^J2OM;Y%Z^9jO3BW&0BfMDR^IJy0_^;lp?3k^zyvXN%jh;>Au|Px z7fxIUV+0e92S#~h3CiXBn}`ikOyKq}y#t8B1VekfaSICfNQQq=gEdROM)0Qj}8XR95$xv#KxB5`vKrocy(0)yuzSSUJjZxgm#p{X=caw4WegNtYln!H4h;)v6 zes_FehT$&-{gZx2o2D%)>Vy2&RD*RZ8c+VP2MM!f5jr^f)Gso3gW7YB>s>1v8@!y=JW;=sV0U( z2p24lMHWY!R<(IxzJivQ#=j5>r#@ZRE^LdyRsHRegF38@mbd|}JG9~$Fuq`QaPAoH zKNEqx6_4R@6wUW}W0(Dl7g<~pA$?!(Y-T0>fRm;`xBDfK7nRfvXI|ov%ZnfK%SakD z++Q8eD{G5-7T8!r4u)0by%?SP0r}SV5xQY0Sx1Iww6xG_g~%sHX>Bfnn))hGU=|0m zX(X&adt>$Q)I!=UZ4@-DYx{H^K#>*$*fUvxU%C7e(Yoq&#RZJfzqF-f`;fwFn6vv* z$w9wLaEy+S|ERz*em!V8Vc#m~%{A#I+wU%1Mrp%!$hHb_r3@SIaxDsIcmE7eDM2%8dSl4I_bcXSv;~lMsLak39~awv?2vf_zOBs3)4pK-A<^0mO)0$+k*~Y zzh|?)CY_^QU!3yTfHhm7HrGGFwo?kuZ03e;6e;_Sy>(%`b#-dh?c-{QhM!UYCvocG zuDHC5uGadOC^>W5#FtgJ_NJnbXfjn&Zvq%6lKB1W8RLrkD~!GwKlyh`dyeL5ufl8nZCrm4VUdize0&2-!GKur|gxwcrOe$zs^lzH<8 zH)Bd3rihU~wlJ|0T^ivU(M8l;DrnBYZeNMka=v!hHvC?4ea8lq~8D{31u?AKL`HqoxOw1GQ8>0RrtnOYfg70yV5*ZZc=Ha#( z>o;yRGI%{2U@!`KiXx(uk=A-KWSSys=yXa{F~YR|^RWP-%)kZCKs^%sn_(4(6yC}` zZH3`yT)nRP+R2%KUnuf7KClBQR?l4J(f)NX~^}#MDofk)%ca z6YTH>+${^|7ZBv=zJPI`eMV^C=SD* z#H9VSnsVqsT3Q|jk5=*G`%pT!M;IaBp6=k)at?Id0{riv2vD6K}VX4_q5iG$Ts3!t2tHxK0y&+;@_u9e=H7OiQ-)Sx5U>zox zZ7oNuJrCVq^=O=AdJPoVxF8+(4|U-ceUq9%2cSB)2z=ZABtT~t`+V)tGmskp6YBpH zNz0KD(QT5&NBH#=(SO9p3$yacg`~WC6Z8JE+U3*Q6N}T=VP9>MOxd(eORyLme6n{< z`pM)9tSLL4=(Xu@V>P~MALIQUlTP*a>0emGJAQ=*uV6*D^qkKi%81jEzT>7|`kIE# zj(sL|7k1{FGU9&dVRy=fVYMbKoMNIOXhw~XVPE0eX&F)zxHcM_w4e4tPTz)Vua;e7nY68<@Fou@nekn z&BX;2LL>z| z)*T4|qyBa1T(2SpC=|eo0%)5W*1HMc3B5;wxw$+Nqg(BdOS?F*GIU!hA=4?SuXF}R ze`2kTq2gwGNI2e7S}IH6WvIh?8ojk)gwg-_55E1+2~dqyfRX3Be|T)8(#Y!daNefx z*4jDF0L;?O+c6#con+3bS5I+F+GV6dBRbQ`A`g}?jgR#33_Si8QKYB;(PV)h4~zFd zg%AGr%&=uy5+)TqDsqny{ebDr>7wIPe8}7*(M%s_WBD-K`K;rRK*M#)d;0_3+9j{1 zODFcDZF5rX`EI{4z}v(DgZ!^>-C|^_885b$hZ>C_&>|#(8h@Y?cRlfIj8xJJr$p2Y z-3(hC>*%JWwM%)in+oyB(bvoSo{&(}aY2rH?k+KU!rC@mPmY2~q^D_8Fa8KmDjrDI@<=nBylBp7QMi zM#QH=fbIPAlhDS4%-u+e37!?qY+|Hw*g5zE9vxWCRdWuH7Bf3Oly!Z&KA9`f_~lcs zlKM3uB*MHVu1$AU0caz%f_h0vSp6`0}UB<|h!}ov9e8y*v(FDRr|05ducic4Uim!oWk5d0RE1FN{PHgw{ zL5eoa*$4Eg+NFQ_r2PHM)q6gi-DCh?E)Y)eAJd_$&T=ey+zD#WN2h8;uX7f?RB1#f zi(F-1MHiNls0m=@4a*Y2@(HB8}=}}Q#R!6} zRLB|3a_qXF|Gi+?%UK5Kr2MbmDGxw?I?e!yXll_>|A1tqL$u4eP3QW*lA=k00fzs- zbGmt zo;bDf7k^kaT!ZJv=(tFY_!NEK1(GVLCT8#BVN!n*JgDZqep}Cww0ulZY*2YbR06Rg*)eZeySIM}X z=rINFHHThGJEKnwcqvG>OQO%vpG;_qcCcRHShXFi^QwT*r?7m)-%7U39=g96t)tSO zQA(`W>g}0Lkw0y2B+aUnoz>#nS|mMeT3SqvvK zeI8rC7{sj0|E*5{Et_8zCz4-x{;w_bZ>i*u5fFc%9km;25#;RtvN2j0Vzib?l$wEq zN4-)1Sa%=I@-;-@t@nLKj0nVw=zz(axCw%7&f3s7DRb6*^$%|qd>JO~dvruB!RT4{ zm&@6CAh66scIw!hum{wy{KKxapMDW*-f;JnAlH6Tz>_Mq%@MDD+e5x<6?-}8#5eU0 zzd9cCu?suJUoTJ3(8$$NBwcy=T9*0E@&N$wXmQHfhkqPWlS4}@wjx_&&Bc-wEB|ao zB!~7WMOm;MGt(ugmo9M}b>Kyd9)6E8ZzYQ$hjvjBhF*!2&M~n)73i+fv5Z<+tC%u4GZRLe>ku^lJ`xI^q>ZJU%Y%be0L!`gxc28WV}Z-V>6d zuB@!AUEuZA3m9jwHehEYl?O556G_kBYxe^G;Z#)^B+amsJi{&<7|Lg82%QUvF*D_f z-YUwvW>aU$>C$v7XgM0)CX`nt`t)jG@Kv1uUXg^Z=6^p_*5x0-SS0g*bkBLpbQX!4 zB3aV^+kAeNCJTf35rLFJ@c*K0zwSA&)XGbN*A0FD-&awF)*^hGA-{_Cnonkq&&vlZ z1_@nF@R5hi`Bej-e1p8xidugB^$!>P+ab%i2NW9mS^t>mzuj}5weq51bC^QLe-`Aw z-h(Wz0zSLsljH&F-wOXf-t+&uic7xHd2}g6L_~`qgdh$u4(+tmSPh4sBUu+kg_+`x z$HN1`{%~AOTh!2M5c%j1$i=jFvp!E3f$MEzIFnAxM}kbP)(}Z4DePzVpYUVSu-9do zcel(%vdnmPoR2eAOk?M<*9%Un9Yc7&c5b5|D4tGnw~~(O9Jw4nh9XZ6a<9DB$dXTq zi*p*tQ56Re9@L_uBHN_ycVjk-U2)qjsK?YFvfW$HUzpbt#;D{p5G4{OqY(@X5OCe~ zzLQIMXQ4Bp$Y8Lm!G{O~onssjf$p7jcA;R831Hy0b&4E&b@wB#*E0P1U$1f#TuwRb z#Ab>$Ci(-TGEV3r*jaM&Z~-yE-pL~2F9nEMJ^=>%M({053yUVWk59c@uX3?TfF<m;0PJ7-`Dg?>cQBuHkEU z!*sjVBUsm9+n!f&+BA*w>hYLC3>o`&(}N^pZila_vuM?i2Y~w_4e5<|YX+Po#LInq z0>4Cv>?%X1%Ui|YhnBs8c|m)7A>>#RhX)@IXIe^4@crUN#~vGFGh?Q&rzaui2fAys zy>7Nr>675K@Wia&MkLq7k%lBllI8OG!T$5K`Uk*Jg>@cF@NExY}heOPMrHFd7D9BajN>xZtSNgX>NkRqOLxtD88JARrAJLLbY=J-& zv~}1gbXOo`9hqJFosj+PWM^s01v?J#@PtQ%=}P%1MV{;KYSxxn(#9Q9r-2*wbfu>Z z9${u(bD&L%lXl8UVlMpmTzQ~F41Nphdi}%J1o$v?N3a;^0e3BxG$G#9s+|8tD|~6CNlNe3ZK4iyv|ETS zLDAvaU+(wvl@ zMJ7OX1HzHdJ!U>k zs_=YCXnB(PBfa#5heZ&XA{y=M9NGxx5nR4t1DL=0A18U`Aohq%ec84-(_U8x;OVb6Q-8+>DYQnDD~rG?jxvDjn`&W*dJC z##A&eO_GhA(_-E%FKqk>W}^>N2wc^|)*I8MX_kP~z;2NGq~k#X&)E?jJBXdo16n4b zu`6HUo1b~HlE7xYy#eF(S_>oi-iiPezN4zwF?QwCWgl}_wL7kA+d?B6dbYhFqyt^_ ziDB`u_HMTy+x}s@3b{}H!F(5 zaND71{E3RW??w_IMBtVY)0g0^V$u>8rE)8uhnv+OYc4o6U(d{uOxiM7{&9!=z5#LV zhG4uAYGHme;=aj!N5PStOff6OJNaGq@a@0n@D@R-BA>nm@``{H3l+A1kSV4-eMp@~ zZ;5*1OFp9goTe3$rE&PjDF}x5_@1%xK0>ZuSZpgP+i8*j_N2yAR@pEBIL(O%Qw4>0 zj$_`U=gzg{oM~(=&knjxNw}KkyQ*KoIDJL2paIHu)k-7^;r_z*`g%t5m7OblD+v`@ zS;{JFAMAkp9UddmyziQ<#7cr;gZJPf@HElnuffRC%Wkv!Sg+do$efFb zo01_0I1z#QfSVRECqDuV#EGG*5QzckRz3bA&=5!nRf(Xa;=Mf$vu+Nk-vxwgk1}lc zGWzB+cc(S(gRugqjA!x7Xw7B5;=FO$`BixCkB>7Jku5oFqKgK5;87fI3H@*t)w4wLYq9;?(C9Px|wXYQo}(&znm6q`nKHf$3kg;<7#3^!YF6iV!yw z31Jh+hgdLidf_I-U-UL?1o>wm!qsXM`CKeF4>kr>eM`bYA2uDaTQSn));o!SN9So+ z@F1J_0qL_~yFLBn{*1vp8VRgIC91xOTRX|Ky;(8c7fh3!OCRj7jfR5YL!qytw%Pox7;s00Vko77}ZFA{uaBQCX^3TdieQ~rkH-LDIz;UNf5Y@*k0gx zgbHT~)BVO(;o0eYr5eL$^x<^KtCfMGrjLrZ;=s&}`XUM<_e*JMxYel9Q+6QepbJ7k zn034E$zyFY1Oio!W*S;TBBE5CPL=Iz=s1TAfnH_H*RHW-d{h*u0AXiNzN&fZ&yY~m z?dP?2Ai(U3XpF-RVyhvw!h;EWe3ExQuruI^Lu2M4flsx>N3wD+SpWC&Zvr_|>LG_j z-Xi1#&fwoCdp~UwUui+uO3vXYBU14mj_ zzDP__(Jj;Mqm$#9IeH#rS56KkKyqg-fgvbC!}pmh2tzeNj=ziXUUczbsigv!FzJrx zHxIbD@jO?1hvA~L5QyR6lI`P?8v(DSSjWW0vHR#k2xXsb`5QKXVZQkdWhv@?N0LzB zerVuzH&O^2a=zA^t5%yxdQkF8Su_nME3fw?LHP!k+b2)5GaYf0v0Q%;oW%(5!RMie zuihYhYNaz`6-g^SA~WoGFdRr%dN^yb5PK>}6Otonc`V)Qn>gZ1y~L6+*ah1-!dHe2 zQ|WecQNa-uJ-!^q0&b*MR~;pG7oY%4$2v_wBZFwu7mzgK4QBR@JUcjp2vNmaT=F4W zAl2Yl&n1oqU$fm5jx)j5P1dM?^GftpqCo)e>?hyV*Gy9$!z6T#rw`U51dAPxX$rfadMgfsSr;k!s>`v zFb8J5#?C&Qka7jSxjzb#+-yC2RNN`g5ui^b*)?(BeOi^Os`d0Z#-8siI;+ad#?kqd zWA}6OlX08g65ajG;SQtJG%NCc*1qRCiX{U)z7-niKsK_-e?>>(JdHjw^#SO7f2dxK z@$4nXYxaBnu>l(eW+kdP=k;*fzs8%03rjvPEDG`7#MR?XUhG%dv3lpH{Yjpwlkcr8 z@GM#nDqANcCnr0ro{F2w6b$RSHq*W6JtoRk~+yF$jI2xne4P z@eaeg3&f7Q-90evb_In}^I*<eFwufslnGYXxH%tlk6o~mWdGa4(;6!4=Yd}_>zNy@FneZhXG zz2xCowvdTJ3E9dBCcTWB!ZQxSl0x{1EbOI5<2oOH6qF7zjSUOM-ooM*=XJ8&I`N@* zIAzbHUwb91Z2Qa+5VC7l0q7=D9KS=~!cg<|QgfOcP zDi8yT7QLdA@reC#FA#-pFvE5onkE}G852Kno=Sod`v}Jzb^$oAxI3w}J*@Wqm>g~b z{3f3uL@ESG>=rf4R(pgG?FAbw!g^M8WXs>sX*(i+<(<8@>qW<@Izdu1=grg+A8CBz zTk!<;){#G}2xDGdTWU0s7-ogcq#&&}NQI~T{MQsl<0SE*D;%r28sBn4Y`cSTtPL}1 z^pt=MURy)BW-4x(Bdgv?Wy|Y8`L&nSvdnXjhQEmLTwoWv1VE7qAl6S-C6B>)jO}RE zO{-PLy)X)(ykE42KFA8{l#ti*L^tspv`tt2#%9 zwhF$Sr&JJEX(i)+4VManC}esCRtsD#lr_LVA7d`hMdKkB2uwapDCpqy;Xc_!$*D`+ z-CvITQG)mfSegA90NE?6`~u8{rOnk@>99FXd7#+Mo^)_mc}>K1gC8YWW=I-@iry6m zajm{5v^wSu1UfyKPaTveVoKg3?0yteWZ8XIBunPkO(Oab6Okg!q8>;1ZcL{6$X0;Pq6}Voy zp!$h`O@u8~k?KlyXyZi`)D}2fFE&chS8p`N>E2Ge=XVcp>a^091O;MVSmEAjW7<7{ zO^S+h?UCBfqh#xU3%;4V4AG8^LM;y8{d#tKyci(Nt+I=T=!&bI3#JnMzQbj>`CzUf zw$e3(R&hC)p zTZEbXM6xWNjHfs)O=qf=K)WutwjnErcAdt%*#+2NJ)@PmQZC|cfyYD%)jiwGfhL23 zdXYHp-n2vP5o}LY_g`m?j$Tf`gv0gRV{de1Wd0%=hR@p6I~1E&mnm`IkjiRL5n$O3 z;D7U515Zn8*AF^I3wb^P^IzQBvx$W)@QuTJLB@ZV>|SCaKnZblWs41WP}@>(6-+ned59CRwoQ?MyI*# z7H&q2)lxpiZfU17QQ6w_vr|O<)`9Y{0G!SKD3~A~rjnGAQ!1n4FLTYFLq0c~uf8RK zxN=?>KC*YlJ6W|w>2I8zkqv*V`+5EZgYMyB5n_=*=kknZ_j$^Aow22R1B!DWo!V^| zRG*(YPE(j=R?_-`o?ueN5_oz5g^DN|GL9&E>F%$}?^dH>a3;MOeONVaCnp=P-am+1 zZQX1=8NKv~<>K)Xy@N-L|RDjnKWh%4Q0;tbJZZ^hd4r$ZLP3(Zd}!rqIRT+b|UzC>g-_Sn-Ku7=A(+XcoJ>5 ztQX(0^vMFgv=u0iJ<2s7%tc ze6|{Ma0xuwdsD?!8fRe^18VKJw7N;`4ghO3p4|b+(ckNrZJuUSQ8g zXTObhmqd~_NN_Ww`SO_Wh3M?+3zXzooF~K}M$na0jsYWu^e!gDmr9$h`*tT=0`u}^ zSy@DymF7^BflQA3uUuD^p$Or{Oq-}r$AjgkV)h%Aes>oOSN2xBUG{HPf%rsHi*d`? z&?HK6&eO1=lzPZL>7}*7o-!OLQBkfJJ}r0?P9q<8f9Zsr?x=RtX;|HCwDNmX8OQ6| zmBND{fN%MkV2iSj?c_jv?2a}Mdq%U|EU8Xe(~Y)Jts8Tov{cg~Rui^5Ac**&c@%qh zZIu3v39z~CE{Q9P9!wm3aQFf>YcYWh3`8G}HhC63DuKvkacq@HU>rBqVtZ|HL;Wct zoKVnuOrQs7@K~a%7m-G+oVk$q?@idZ>H-(R%OMUzw!C+5KhU?|D_pOed}U;4#!WGS z5^D#42FChUy}2fdzK5_6EN^(WAhvxHQv9lC%E^A72XBZRu&XQI3!9Yh|H#~j5`xH- zvz{?YC}#DpoUq^MNCcs2%*@TE%@na;R_g5^LC`+VYBwU=Mn12*E+-auMeM{#vl^^~ zW7jKo=s{Pt-CngZ@?)DxZQ3g^9QS}>7B4AS^Iey(Tv71OQjhB4BqM^6iE(c6`PY)8 zWNXT8_&9kI${;#AtZJBW%~Gz42;NIun58VZGg&`w!f>Q^y;33Q?6}M|D=H{kw@IJ| z%bWO0$(<)?Ck#VgLYHnxcZyuVxtbx96=eIN+F^_*J0T%j#gXOERN^G80T(rpQZycb zW4yR`!VT*E3KKYUYP_?mom^2~DVt51kSd5iPu-shzs|-~QXoYfwY)EAptrk7JMTTg zGN{D65DUGy223L6T53`P*DIJ@m*xtpq)j2JfPe@IxTQwO~F& zcJ00L-){pI-BgfyCb9MRTAwFNDODH#BA%^~4kR7`X$n(0@&e)g0R@U>;Kc3qk4Y#Qv`|mYOmbx8h z`Phi+Z!LP>G%EjcO*`qCgZPXna{#Mxb<8o;cT)$bt>aR zqa+0)IdWy+BQlmU3%FkaRo3M0gpwO(ecsVNzB$#Js8;K#R_{VExj&HZEXQ?_Q%P)g z^#D~eAy~{OB38rHsIjjzo;35}E^ulzk&vmQ+qzPHR{4g?UD8GwX-T9!b%2<|B|T-f z-`H`}u}D4>{%-2SMP{>^^%%)1pW@z8SWACS(Ii*|8LX+&`f@o84b`Rj&0aqUX|(U$ zAKiFPdeoF=(JvjF2(%0u(oGaZix6}{Uh={`*<%WYU9opA;VWC@MH%`^L05;&cEdXz zWN_u`(*C$E+!EGM1gZRa3yGZP!j~{$Pbn=tI}KFtC%wnrnhiUJdWtPON$!beq!s@t zh~K3Wt&>H8&Y)OXvt{f_L#AgQ#?GW#88Yb`sq^Z6BO72TDt}<0v@$q~{B>`C^c#;( zhatRorPCi^Z6)&7(K~B~e7R)8PKt7Df}57({dbOSJ{9sY z_DRZgF6HjB&po)9M|pSLjSN@GHfEEoHCLldDz;utw<^EolG~DORm4{NEa&2MdcH+) zwXN7_q>s84XgSetsCuEJh&+F+TJ`eoh1NMN_la=$wGXnEk=Bf{6b4Uh)+42n3%xo!0KAJo+?|X=}L2C35;sx^V z6O`XGMkpxA&eU~8{21zK%+v>4z`~EWM}L#sqgvmAgI2n;kgdU&=k&6Ffrl(CxBw^UOkTdq1YGip706m`AmRMO#8=(Fz$G+s)q zEqM-ns>8ut9IBA3c(b;)jK@3MxbeEy4g0`B{~Z**D+>s4DYh<$)o>f9y!X|9FZeOF zCpH;)4gT@GWwCPSbrio-&^pn{5KS@5A_f!(vyUiL`i=&trrZm8EgYA?+u~7gq7C zNg}d0x1BZ6wmsVV)G51S`^mG5!*ss(9vUaBN6HWJ3s_HaXAlQIPqmvWwEe~pZf^`K zK9oqV8d%&IKe##(FLJ8@vW9$~AU3<)cbB>hReKn)wG0g96rojNte1@%SHTP&otkF(Jh&aSd@hB*`vYb?h*F3;9OB0z~eCPVe&< zIY*=jS;c0ER{FekwdeR1+6GaxfNSf8=1pX7JtQ;MCC`RGjLK-_U(_hIa^#G~)5x_E z)21b0Gri$M_z4G63l$$M3=TxT$U-*0mq7#=#> z9AJe}(;vT3t~*-bIeXE`a~9?8y)!vibD(0S`%{yG~q~Hz`jHVe8ne+$j@tZtSP~ zXRkG)pHt8CrpHg>N^m?;A=Bz2t=UEk;5~W%>rj7_9}fO*Gj;@H`RYqY_&(+!qZFS5 zXW}^L#mjtIR8o27(dmoU{C&ROvVukXUQkLK25w_jT)9ROE5`?)+~ow4Z!v2AN=>VK zqevNrSV15q6|SA0@H5-~<{Y~kosO|#i-}TF4ACc3eEEzTR{lq+Y}=}DOT{dA%kS$8 zG|(hIhF2Ej-?$QIY2le}lFSZQK5x5Q#|f>Lucv;NVbzar@R8GGaH^a#t(swek!7Gm z$78VwuDQ>=_o;|f9Ja2MW-G(;@;vPJ4Yvm}xxaF>1wE3QdruKR(u*62@kpur`6r<= z&LLkcrT#8T(mOplsyyt#&eMk|+j~v&by;nxhhlqxmqs@Gb0-f&H6XBl^u;HUz46U2 zA7EK+4L)?{J@hJJ? z4f*12c_QGqBNPWco!!{o%Tc9=y04aZ#uT=O5id49z)I>=wx;FUi=~>6RJ?6gEF~QI z@#|>nr~14d4`I3lz~&OeRhY8k>g3#Eb_9kboW_|dX0sYL_-;yeya1_f*g&@YgF%mi z=*L6kb>pvCXi=Y=Nr!q=U6G7}ClfzYPYlJlRRYN}yftI|fTsA4*@{j*CD}S_y51J& z!!eQ`%^+)G7~7sG#}_DcYknLG384go%P=yjtjy*wFHrQDHaHBU;8x+HZ=>x-kjDoy zDc9lh1w!uSJ_?F~JmW`=UF0a=tdC6`cUHFTMaI6$=ONE!%13_P%U2J)VNGP%TLg}P zRon=95E0SJHN05+JJ9-Qxq)nDeDIx69D?okF#BWpD$mGle$9X3qDUBRT7zzJG#{E0 zmHkB=vK?r#loZ;`s2X)4vteeNC1hEjhT@Y4YMc37>&&%FB3SPP8a|vga_=*;BTWvx z(R=qCZx3~wZA_<0rSt%`U#jK(049^KFE0h+4^?ly;f&fd6j##SoEii>QK6J#Q4d)t z(OC_@p@j3dY98Mnvb6@gewNLd7iVUyM0J^r9Sb3jUKP~wm5zblF6@Bq&bhaeVw|Aq z(i{xzWWK(f+k(T!ckivO4Vj({=1dF_+E3$}K6yUkJfj>cO^ZJ8Z!x^AH z24EkKIvyx5eVp}+gPkEv3ahk~$y7$xgoQaY>OQM2CytJuD30mP?XYmd^5Yp?8_3NU z2kyDTdTjc8&Xc{n2yDB+Alu+hR@)~;ubeLjiGAWUtk>1$LWyV%IZD;l z8K<_Pv`+RF4PZTiDyVFkf^C}CkF5p(as1@wF%BT%US&t_K_&)@#e30L)!EnB<&^&udn=n1$-%z0b^Xj873VRO3pP;oa-1_{^EM{yIM@Kqj;LI6EV z7{d`r7&gDSkm&{^&2e!+@!l%aYAthy-^Z=#lbwA=q6+pb!DcCCx6usRmGyo?{8a-* zqoSe|5l@pGWA>Z;>H`vf#2hi}E(*swNdBv-M2lXY!#Zt) zGo$Y;b`AbnIno@1oa;?-QeN-SP``k(4rbY*p(*M;7n!6`P_KUhs<5K#ee7z_W#0xC z$m%2J^XW+DyiqP~y}=K}mO~r;_TiMoe)SPfHuE>f3Jb@(&)q%HQTzG}%nAD%v;3we zwLF(}sMx>;B=mzPOA!Zo(_MqoE=RD8*zR!1k|9;oyaE)`uk=KX>K+z0&>8GA& zrz`voq>-7HvyG)R!bdf%{b(WqNdS}N1JF6;#L=v=!}S~tx?zR_f(sf=wz>>4=m!p8 z1VG(6*|)jjTTRWl4OOinH((NRFNJy!O$so(!zV-|>RR!L52Erk@wOy#0I~~%Dx3g# z4ATO0s|>vy#A{&?YJ5NdMqE!5w~E!o(0aqnMd*H*?VY7_eY0} zx7{wr;V(VKy@5&#q5BD=Ch_bJY&C-6fH|BkTf4n07qd&gN%&Z}if|t0A{boS8wT2q zbrZ;`()5FQTO#aZX6EWr?T9;;g2!_URdQc>nKbm{f++X8eeCbguX`QbobcjToI6A~ z-x0HyVoA3Wc>!%w_O9;nQ=}rJn#=dJ{>O&5EO$ z1Fv&5d&6FvBnSX!ty0b&SH|CBc(S((;@qnx{m=^+3548}s8_iOvm%sZ3plS)*bzeH=it`q!; z?EN259vCc$r1-A0kF``_sLs?)*z9X5p6r!}m*uK-Oo*>KLOrGEQq;#Zs_wif`1H2W z=z7=J04npc4G09gyd#gYm{T|M8mA^OuHnWfHcIwaesi!9cuBFLBlZHHQ|M-5RPy3# z9^NjSv7~e|K4MRof|#WGK9-7Rgq9bgxJM!Ht?EI3BE`WqOB$_}c6`c(b=V7YkBng` z3Qb=9rbtE+&Eos`_qhz@n)JY^Bajw50C+EFX8E~B%c`k;caSBjS_82OFCoNQ-dgs9 zkW}-kaqn1HZm~8z{CJc6E&b;hxPnRYp2(#>qoxR25A??D8sf=JN;}PYNc}Z^5S)W} zU{oRP=$O?@A984@S3Jn6yyr>HW0x(EDLIqyv}_fbaj>uddf63veO9v&+EWg8NKu@? z5s4V?^T%K$9`=LsaG7Uluf7klg02n&Ut@x&#|-n z>?XNX;uQqk10wHUAWQn`7cX{+jHLfI0`c$;=09}e{{0brYkEp@)cx=Wm)@&gWp0oz zC|Vm3qb6)CTQn58xTVxIHZ)%nz}n}UYpKUz+EH96$^XWTiOHxgQ8Q?u61UKd7lT3q z7VDZ6&*>4Y&(FS@&K$+#>Y+Jv%JMMLNERJP=blGMq*~KmPow1{`t`05P6V4)i0XqJ zA7)*iZkl*jQkqq4Y=jl5nQ5Ldo_B5aHLQ(47P0R4iy|&5L0aWFt!t^W^Gd3S@+wo# z2|ZB#k6A~~iX*zZPte3p_}(Ula|+E7Ftzy6rE%d)?B6B~D!77ZtL*1ro`H4o$&wtb%r{Y!hZ>^KXnn zxJYV4Rplj1J(OP1az@~5M26hU0!^8%_f!uk!K_C%`sLuI_GnHOI4+b(J$@BYmIs=o zCx$x!p^e+vDIe;+a42sQgpS7b{`T9qEb*7m-a_l#SNNX{0A@r6&**3klQG%m?UR0B zl7&G_a7-KWgTU#UR9H>Z)F1PZDq7^{Gaipb(-xYIJ(igh{mMzX+2KtjeEP|tH-3#? zB>uRw^AW1+SpC(!KMwa@4T0sM5LSDJlap*j%egN{1Vdg?e#pA)tu^ETyT2t3y*Nst zGjTS;Dj&H@B&2jVtOF;sJVR)+C=&Z5FPzzvQ)yeJ;s%)i=h)742e*!4P+=tb;81U^IK3Q^A|L zCb=@hK0h^BbQ}71lJj?C*7q|1I(=C#Q2BmKU8FHV!s$&_7D>?ujb+nL9c5?*T4&H_H3XaHeUpBu6HrMXo8Cg zrTVsN1V+OPxLF-DD%aGmxKEl3N6wOOA&A4<;2vzMZe{LXLa8+3ZlezZUbdgpuk$Sy`Q0@btjHK39iZdk*q zP9%UuQw8H_V%G2%vQ7CNEby5c&X9I8>?1f;9H=IuMi~I8AX)}$ zChAjzTFX0Z%I`L{65WMQ znlb-~D9<9rOj@5_E(U&?c8I&%#SJ@d?OUx`NeTiTh_|=#q=!;3Mk@Z-8BI2HS_+c5 zFJ`G!AiUStuRw4PI$tWJ6{Q=GJl;gD$yla|1Pq%$dmmn;N%V6%3oWCsfL1p$1kl$0 zA_0){`Ae)DietcugM-@sMX)$0nTAvUyma^+|B@rjHLPChLjyGOf(G!neU%^p6b2ZW zj6*EnZpSaJBsuG2-=w7kl|XmCfIhHJCnNMKxFUrxBqK9S?bWhB&UB60G&A8Pfpq7S zeUfs$4i4+x{D%UwSX7i*P{-0<-*t_LHMg*s)hW+?Z#*#m_UT@3_hJVfO%{2POcgw& z5a^Qc42X~=XjT__$gLk7ksvTJupo3h4Nd*v@9irHO%zAN>EP?!WJxqGjmx{UW1rcM zdV{YYuI@i2{LFXme(xd**Dvg}d!28mey$*Qw-MQq$C3rKy+uiG<%GDldK{LGhV%9w zAQ323cnKz+7Q^i!cYq|fgl%C0eH2J*?(eNpY7B~dZkHqzHIaTHLyWAj{A>Qhv&GtJ zcX&}hl6KxM-}~DMlubRFke5&OH}G2c23Gm(&nV3?%`oVv3ECklEV3oPxQppio=Qzq zL|_qTFE68A>1B(QgQ29e4}25WalQ)(ui7?DOt3pym|~VjO>>1~9W+Mr5HgAh8g3R9 z&W76P>Q1*_QX79aOIV$Ybv5i7(6wjB0P+CNk?z~+x6rhu9e1gzW3$(j65@O01kdu^ z067_ud8^NF6Z%F*5@5)$&c@dbwq&WZ8qMoUXGy5AV;<*~jvQH*oRF69G@@J!-e}2w zPsQs?1G9Y6a4;ifpvwe{dTBVw>rL7%Ty6hGLm@YZ^}U)|9x!GuDBB}@b*Z^x?H?4z zCr%uJSS#SW>~1*$L&H^jhAirTfAV7~Jw<~?Aw`bxJWI&=W2t4TJ*#VsRi z6MwP0^A;UN6heZp=9O0bpmE)_2Hb?iwF+rZp}O7owt7i!$4$7Nh`r@yn)B+oOzEfb znNqGzc{e<(8h1tJPaoD5G*-{2mlZX&n zCCD!h`d{~McJhGzba~yd_0L9Z%n@my2f!to=Bcmg4e@#a})i=CuWggy*jsi6D>{I`}yRdpFJ%5+izjf^3<&Dg3y0G!J7nFdrph`JkNs5x*r z&k4WBVw>VqdhOBCN+mbYKj0Ccol>94SdA$*pBd$`cMbSCeY#3`%{@lu5lB_7t)EFe zhEym*r>HmH^!bJ8)1gCsP2v9APcG+Zmf^adN}8y7cL2#q2Vpiilw6$1!Ebyb`@y*5|$*04RT08h%8`%jj~{cAW&j z@!$*y&?(h!*YrksG!r+!S?Z`4%ATLqGM!|EeLpfS4Gwa-JvmT?Wh$dbT&$pYM6{4)(oz%685h@ zmoh*D`dpmQVTr9k#uv+$9q5sPN;TWMgYEb^DmB|NE)3ZfdUPljih$+B!|pg+dfZYz zkE^W(A$(o!>46aTH;8VWDN*A`%o_DAuLF$N2KD!!2()!MF>wpR@J<79q-$OmUS1eh zUYyCpAj^v+TLNA4mmwv&UAq)=?z5 zG=HH|>v4W|;6-!l3mB~o5?|+{UwF)8&GPW_FJ#6wzG!e=9DjQ42FLZ;8I1z@`Uy9I_TU|5*G!hNJzTuqqZ@R+*yP2&6r8!_(=i^ya~`QIVcym5~(_)bAXyYo~%mh2dB? z-R-s?b@x0&6rqgH(R2e}o_V!~glq{GE!3tI6pMV?*1E-7qJw?vtXyB)v_dXy^9AU zHoOM(_#sf<{Ju~hj&p{PpvytN5vro!?^O;#j&attbf7B(1F*@^mjo4NX-gdCMy*x>WluC(^g^7efNtLz;Pl3j%Ky85J8&DU}rl z12}4mu8#J)3hD@8N^6g1d{#p|PVoSOUu=myh4%J`aZqJoZOXPUi+|^ov4L$%p>{R( zb++=%P*Qdcgq3fz_(4MjNm0WgLj$NhGZ-S0v!yGC2V=}uVakLf_K!A3LmB}%W}uu* zGh@f&Tx|c@00`#U8(EppeR;;E{dIdk@-T%M*!x&RdBppR4Qf~h*|zfQ0yhAe4M z`~$dY_W>WXZ&{B9DTXafdj=wt5&+|twL}gFVzZG5?8}u{1wSNE&KV`yA7@G4GLy=0 zbe}LkhrTu(*}0ZW8jxe(aC+>91ch~;ojb2PJ1M^1`_c&a0}A0Sf+WDdMk&Zk~v6T+fIU&PLY{ zD(N--YVYCcedWvOCdA)=1aO@eMwgrln5r(06C6u2eK$;ytm|i+FI+4Ao)Pz? z?RQIi~tO#`_ zB?0z6benTl=xpo(NHHW`e=3qBC6U5FN#pEvx}=Yqv(a+O0oAv*+Z>#oEtH*= z6jFA2qK*n|R~a{GY8;e3IW`^o##va671MxQtvd<>t}0m!Fhiw4hV$^pWPNjA9x6eaG8y<@$F3E>CCR@D*_RMu~Ev@-{}BQNt>o~zbXa_Xot-H<^jYD=V@n*U?t?#B)A z0V>b5z3v1DX+@S zt^JPPq9GrXw)*EqLa72=tIv;M>;6Ue074SD=lV7GSuuw;@u*|6V_IF6v6UP*H3!&A zn-ldn4)VS2ufv})j0R9l7aEOu8}4mfaNuM={g)4dZmS=8}DakGis#@p3jG=mD zkT6ENK6(k3<+xG_E`eG5STv>=au9ayLUBUweD3F{syC{tlv1&F$)|-Wv^qbqXbevt zh+`h|#$Ch!%VLpVkxCc+>k@l*flrjg!e~av2lwmdEZ+($1G?wa~SFEDyd5VcGFO9+ycS;{G;T1 z%pK#4>o{f!HAmp{-dF(m*-QdTc$aF2y4AeM@YGbigj>X(BndZ-VPZ$9^su1-d|jDf z;Rs9x(y6r5zdrveJMPos8RmkL5eL2T&s6A{!xmt(=} z3f?M6gt54zH%8@6O?U4(L)5HEsO*=*zpQwWUc9DdsA|1a39mH8QZh!Fea+)+C6CK; zTdgk-Ao710gMx}b-U`j>GGnwmLbituH{b;%vrif^VmCtEU?o7-xT_z_vAo*t-uD>y zuh-_Xfe4Z+Pfgk18*Q=V-k@;x&9IR28fAlDgBzPxz-mfT2`mSpOqCTS>-LUbsC=PF zU|=wx%De;Rof-Gl{jQ?VkbBW?pt#_{GOI@-sM#O`x}BdL_@T@0+dbUD<30W%IWZ~; z59AO{LxsCE@BG83Y!m&-u+%nFF=i$j!_1&EX&y7kRuv#}3;`mCsOyekXj{;vU#8^K zKn*wR*aKtH;5*{{Tjc>+K<)4SGPui&Ch#N1-(g{|f?QZcmBVR|<=HF4BzFs1m|=LC zTl{h#?HW-3QBZ8ErFJoYAtM731VRyvG4 z#NMq}mMH&qBO$oteo9Rr_*18v1eDE<_?E+mK1{2v-#zJfi;r1)L5H~$eN{`;GhIy+ z2aXPjbz%5n}HrsxdD<4PP%uW}bb#)ec}oE3BCi?gS@x9Jv`Z5Ts%xB}e! z%{%Yzkr4bwNi$I*r=jAB;x$$(la}u@U0-qI_R7piF#4gf&T+TJKvgiHZ}^Gol;JM- zlwm~~(4e{asMqwl9BzsL)fhH)tEP5ifKgs&(A+i4&Efo0|5WTa&XCC%fF?pu@`I?# z?`9AwesNcH7e0!i6$Xxi6!dh;F!uDgrjJVwcm+AYfshIVdBFeJda{=_4eVkkRK)x= zAl8MB+5C`m6Y+9UxAsrlB{5VmpQ_0%vQk6 zSMmgdm^*-r(>iIjm<-6K^Mvl08QpzpSvmu=qIpaVpN8lPE6#ID;uqErh9wiXpb2*Is9HHzKLZz!DpQDjcIC3oO#P8Dw`bJ1(95U zbC4N|jx|pHcC<$C5XrH%-K(f)gwAwOnVt|0fSac~oAUHigcd!TGK^3TofqngAtB!` zi~q;hPhcI8 z?8aqR~(TKr+KgVkZUT)8p%N*5V}o8*4Gl<>29(A2I*kd0w8 zbHt$DRPkB)$~VuH0?v*v8&7LJEZ473SLnItF-TtBE?fWdU#~fixhCJM(P1URosmzS zx2;Tw3DR7j^!K`3D_o}dK)dc;(pyG75oV-o=;h}9g2GHVn`nz&=hL^CN$t2ys`08A zcvZ!af6$s5-#1`GyTAqi_R+^nbq6>4k16D08o79#igq+Xh9PE~o9WzF2~*x$u)wQw zJRR0Xm!|0oJk80gX&xp?pbuZZ_jZptL;~!cM`ditpO;)MVT{?1XX*Ut< zZDpQxTne3;MRC>Z3cY6nNcNbD!95{$e*EGO!i$#4$hRAw_CqxYeXC9UyS?nW5tLn{&NZELLV2K@VxJ678Q#^5Md2^K zwoUQ`&&UP5giowJ?l}7yHGO|HavhO>i@Mma5c8NekJe_+lqu^auT;zIUHRk1CrQbk zv%;04>&nxq|>Jt%f8Bn z0L$A^s+VcWn8%WY&&__iE&TT=!k@8%zYa+mwB|Tu z{CV!yo#*?E6tNK_oYZD@mG%v(+MAym2VJz^D{g-Ixb?UhIz)Q_t4S5{yEZQrR>}et zRDX}N29cf*J=Gw9^wnSrh^cCCtl}=iJ(r;Y#pFk}Ng`u`KwI^`SsTz`y}`5i^AH#a zu<+8UR(AHzWba3OItEyPu7NL=aY~T4_BZG{{U4zS5^86I2H69`%Y+}nC^K|P=?y(3 zpid;)ncnoCg`Zl42P>z?qv=nkA5)dRdWw3DT+ClY{rZpmew`ejL8#3kP|QuU>%I@d zT^&23YtbS=!SVCo&YH>>X*OPJf472>B6{1i%Z&7P*U_VV%3ebtaydfq-;B@v1ZGxX z^RHDK`0_U?$_rOX^5`QSMfAkn^kRT{LO!0gZdpOF{XI}2bEJf&C8(#85B{;bWL&Ym z_WBc^$z$NsW&W>Q*OkZ?+6+{wy4WP8#N9U1&0|kix1_trR~^Dw(7!#*Jml3}=x|qj z^4F}15##&-76lkF&cAK~6Vu|QYksWO_D;Sr_1@S!@BXj{W0s#Ch5zB`*+~sjiRlWX zy!56upZd{J@bQmGCY2^&6@0HkSwR@*-hOWj}yaB75$n;w?IOi=*M%1AM6 z<|Dk(q{32{?~w6K?DOjadwNvf&k_4qsue?;(p1N!a7$se7vs_+d-C(`)(!Z2tMDH2GOK-;^cwQ(&+D^UsBC!cVgz$1Yswq)>9SSI088jQxM3 zgnW_7FIs$_F{wrMFz4@zl>dX&@>)y!^j-KfCESkK!uS>lm)UgQ3#NhVf{R&MM0J@O zm1guk(d-GNOiF(=xE^H!lFMa~09{e-<9fPR@OdEgMT{jT* z`ov8jQPhn754(%mZ=#~Fc9PdH($3VBu>rL$>4F0EPc)L00?=5vd35Ue5{|FItr1i3 z&XsF#s#CEjA&S$DIi~Bu!Gta#0k+yfmy`^I8#)eJh(iKOqdpd?7e;+QEX@mh_nX0W zc*O|DPJ^xmUNQ!Y3Em;-S{U04x)w;a1E@pt6knwSu;HLT{qOs#)7M(4fcH$2fdDn& zF{-Yaqnb(2@W@!w$vF-BfmGkaE|N8i5PRpX=lh^+d`x2@0WCR*8c~3-MLXl3a*fRu z^RZ%25J95nYbhY!|9~+NoY^v3WFtRxDc~bRmIXF(tt%HZm;92rZ4&)H=q0zDL7(tv zGP({Nt+@L#z;y_v1Fplju&=MS_s2zvB7vL93Qy&WPoF~I}Wpzw^xinV8` z^rKbYWHD0I^0<7)g0S7v1qw3m7$a; zQc#ZPfDbp3V+1%juL_l6i8`%ztpd`DL4dUTYjfyJv51I&{`9{dVRzpSfAS(Wl7Y6S zBj@6+L7lAhU@mOvp>lR1>rRWu|51dt^Lt;24?kI*`pv}VVvu?Kb_*ei!#%#sQBk#s zH88N}#iI!z1@^4L<@u(WR99O*MFM^R5cVA`Ed+4K>n~K`+!ztzS6#IR6QO_L8!OX| zT)fl&V~=?V6K3qYE(IoN$LDkl}0z^j^lyl z&7!FbJAW!J+>(Ys0G_D`GMnfmHmFK$U_k<`XN=`0j-1dZ)L}WJjKqKNW~{ zn*3dt^nX)%w{s*=TYoF@|IV68`0@+2!Fxar@edkK^Dxk0X`vInSU!Z2F+l6)E2R{g z`PQjdT2#KdDV(OAm&j`iyKMx@_kJ=vVQ1eRe9amWugCj6TGt5Z!tVQj1oR_ip*TQw z%9v3RdOTZwqtER2y$w(bNy#hX=r<>VBaYOv57ZD~;VmElP4|i56t&3j*~{iS!5#Vf*!A z4hT;@gU*IDLnGQKuOoK$1_0l8v#6E((n?K40p(@9n8Job3VT1k{ zo;XzG1(Cop?<_Dd%TZlY9FiG`jVJv;yZ58IW_4~#NlB=~xIUTlZ@217vG_4~GyVK} z&Z3?zfA0ibeMiy@$)uP&oQA#OwH5Zn304c@!&xCu8DlkPtm9kzY?AEl|K{|lr}U|) zs;<#^z*OB<;&&pho7XHW+6{JO$@Xb9)PF9#@+&9x%PSg~Mwv~NldV31)ile$OhO)v z?2l(Cw*lMp71*9HTc3-GA`;-@u zi>NQv9$`=$FD}{b#wnw6F71VI;hRNTA~kLsm!;nW08q=BKx5pX>ooDW)J|HPNM-m= zJ|Qfo{oV!`S=>i4f1fe8uen!Vg>aoN?xZkMNDHm$t&f*w4QH%-UCgdDrv3t8IuS_( zOY~nyO(&qt5V;CKIqv*b;#0!ISq~4s#qP3fF?soX3>eova>cqgUzxjujkzrXKhJn; z!hU92*Xpwa-Mk4-d~rd$_M-YYo8(Nz9Y0F5f80{$q-y<0uoM6P>O3*bQwC0afxoHv8D*tTQl zOGzb!uv+ig(trDTWFKHIx<>jw%reNIyPK>0e>;ov{$fnzZ8B`9$YswkI>=k$+Iu{E5%;Qw4MI*4wy!GjLQ7DMRojTvVp7;h9*`KiOUBXgcs ztKX!}@|WU>x9OzcpYQp;_1TKUfqt&t#Tu}Nov`}MfPA%Nf%sXVcP0;Olsj8-2zdpO z(D4_>y#b&oO68y=5{6H~J(-p?-Y*>#6to{hkOv|2Fu=BG|6s_ov_@qGbtMAjRrm?M z=-ZEHLW(r(W*d$MW4ZG(+Jx8{vIT>+l7&uK-oVO8Lb4WwL*666C^VJaD-pm0)W!ifSA~vc3Tq(JXG0Pn9bNep! zm5zkrrhcS+7c!tmE6a0D!|!tlqeOCCh|o2n!in#uN={SinnF98O>51_F3;avIriXGWdm9;HH!LahhekSls|et0>v}DdI2(5M91G@N z_O*QEdzEth=JFQkivXXkI^B@{}F)|(egL+BpN@RVlHI-{7MI_1X* zIF~B56%}QNNI%C6)y7unJ`lM3fP?mY+EHv0;X;cIAEI+;_aiEXn&!C}U@wH%m1<9v zpLa4+F0>g^mb0XD3?w@S=Bub_%R<4rfg?W(!l70AtnZU&^`xiBe$sfcN*mLY@ppzi zTKCi6PBAId$&w)UX3La^RuejKsUJrA1A@gLJH7GbbwGKYQ#24vCAH;%8XF2Gq9_av z7c<8UPLMwk1v8Yo3ZS-v*`;^lVP}#v6)YGWaJ;3H;QikY7=hm=t^=xqBAz-x4$62` zo$l7Du_dc{!e#ORbF(_9y@hMEYi(c!T$B+-!ZPzjqPzxx19|!>e zCCS{qM->;-D#LI<6jLTP;aEuJv_schVx0wS_N_zOU)zcrk^W8|RAeqa0CzAsf-((s zQrdy5!YKW%0kLB+w!*ZYL{O&%@6*L>8(wOmJp26o>_`v;no0($o1Fc0i)~wybV)Xs z&gctXxLUf5AQ?n{_00G5wvv*N2g*J$Rb_`VOw} zapDRh`)=YxbIg=apHsPd>%5-~2>Fp2!O({c2d%)aO954~hZs=JAOLin?&KI(Wxe_3 z4Jcf3->QJ%28RH=?l;?OA7~7_<^^}7bu;^e`OP6pGBDw@*>iL!3{u>Di2e4$onS}} zI1E^6HymWHa`Pd4y7c9X3vZ)Ud{6udC?54_d416-2-QIQ$Hf2SWGE;XDb+kbD;&}~ zH7o1k`4N71c`KtZCbn4dl*a=x5~VA{p(W_9Q^jZkP@Ozlm_Ol(W?vruKGE?u3D8`R zbs|PCN3v>)0`5$NGqLUGlnnibDR%aI@A7UObYkM9$0=F^o~|Hf@M=@@QD_&#R9- znR1v6Sw)N*et?Gz-ex-Pkby3Zyv4u6`>C*Q`^P?BKm$~;0tj;(i0HmqQJqENNR62b zs5>v~+W~fZ?o~eQsWL=FlxF0HRBSn`y31PY!8|U_%eF3m%r#ZkzkfI2TiAV2uSieI z6fFZpI(~$1L=ExI?5c}+>23i_##{>(EC=U@s|0);Wr&l0n(RED5!HW{?hXc2x?=>^ z|A{i_XdoJ0wd!$xgyM4Ee~A1hCY|ayBZr-Ca2mUoU3wowP~Avt@FtOko_+x&ouWa& z^`)J~o(2486Hchn#!>tENz%qL->Bv}iSzw8yifk}!1-Wz%KClOZSBKU&g;*Rb#pjdih z5sgPt*QJD3@0ysHFw{cf<&2(6@e;IwmW}8`RnOTQ6sHElCwh_`_@O|UQoT-5!!KE8 zTRQf-Awag1lj+tz5WSUT_6N$!2FusKm7cE#qg~`OC!kuHk|MX=eV89B*ir0)P}z~d zaUYkiKVD{f4m@rij0tG+_PL(7zv=`e8hw!*A8xSf)>^`#cB?5quCXnY1Cp`)5Sh0h zNBexFpO-`<1{IQ*0Dd}5mdU`Jd&UFs1O@i=544KZJdeJ{Su}>Kz;k^3)({OJOBaNx z`Mj|xQIbC30a^~WOgoa*%pnn@z~w4CL&g{;X1*X4l1ilu@c-#b`M z3;A6^pfOd0?`o?KT#?4%_y!jc1}&1r2zJT3s=5NA+5uSdtohMVM>+Rw*X=x0wJa;h zdcQF$Lzkk|?Xq^a2zJKjzVv{uOP7uiQ>Tf_b@MH9Qr+=nRvmjUufS7XQS#TGc*1J0 z3={16ruR0^e@JxN0t9p>&>Ym&VY?&Dh-rZ0>q)Nux}Bc%Fd072v;8PxSN)6{Ag#Wd z%g7oPMw}hOIN!(jBQ3RP0l^qNY1=E5*XthpL5E$LF&FcYXiY^b>~8wEc2~ABf3v>C z3;>BlTa}Y9V^}MphjupumCPP6x3RL%Q zR)4^84>KP*03}%fa_3PW@7Hnd=#*A1j>bDWR$Y|h(HwzMf)utZ5=)L zJC3u+?@yNQR&~S}LIVL**=Ahxt}$wGSUsapGKi6krDo~=i8INS#(Hy5BS9N=842-% zx&e{RwRfOEM|P+Qn?TQ@=fhgY1Lbol+6Z~DcF@aj>H4VJy~~F0d-Nip#yxw}?)PNt z13F#7>1lvGOc5M3o(XDB0Tj17RCqXfQ}Y~2#;mca+4Nf{mF{ukKByis zSgak_L2SfjTuJuQ_%09+)HLO#jMus95>1$BklKXr9BMC0m^jkD;`TYY;VxFC@0flt1Lg*)}Uu$ z>FePk4y4gR~^hJiGWtv3r_8kxQIOsn)tAi++Nvk$d0-U6}N<;voo@iN0MaD)%e zM1YgrWXF5^*1|-645gqSh$gMjr)DK0iR^u!aEEbK;ezT>Ae=AGg(C;XA#4ChWolYu zNc2ll_q#3P?l{fqAqS%x-yC};8Mr=sb3qGyVOiEw3CKD#cV}L_pV@KWA&or=uC8z7T?wwk)H8&3TsE$d344nn9ey@)6Bj}Z4`H{H zNxM0%=gSy=XJ*b;)ptm|-DxajxU@X9-GqNiyPufN;lR+%1Q~u>*TTm9zxrd~(YGf&w zefOi8wq2`P$@DuKWbHVTj%%lOe|fNFnTwV=uh z72-VjTqZiXuM=_7Oao=L^wK-rpwEhzIGRDd6Tp!>M~u#%`D* z!HWK~`XqQs6@#~7Uy}M~k(q zdVMifZZYFk^|Ih&p6%SO5{j5fz{Z}SX5Kkq*>@6`Dk z@V?97V7#bMORU9{xPsu}ad#6dS%2GnvriX~nE3<74j}cUECm3}nSR99rleOaWQw&s z9gFtv&;sq@WoGT)zDI$gQqy)rRShtS5@3-1N_UV)Cw)pbj~En5Z{qay@-8wJMffjw zMFFCThpO~a>_#sjjL#5{UyfRX9@SM10`lRd4Fmcbpwm2a)qTI2=Ik!l(<|rzTODgsPR6COW1DtAf`Pgo*!2|tU^qnq@!1ehMA;`bKYyT}H)&Bf0Q5Un0r79r zX{=qb1Q^LTF37dHkrzPID+0tnscN8tVL-@rJ;vX2=e_Xhyv%ClBve$@vH*wOp6ZS+ z*iD35mlrN+mA?=jG`UhC4b+o!4R12PA^7oyv;H@sH0Z7u&7km^H4&BblH9(DM1>I4 zCooyYZGq!t#_vd$IN!_9-VMTD74~rn=vJH1)oC7#2RQY17kQvnYZrrOJDb?m27(dV zDWIT&a6cCAoyVgiTE8s0W=M$|LaLt#hTo^Ciuic!+rm_dqhOVOQCQy$F4jbgM=q5_6BdB6Mn=0ew>swdQDa zbLIBzIp}^@Yx1Kxz7yi#hjDA1Qt$aruOUVf5(vsi6jiSz`S1MZU}T@+iMGjc{oE8~ zmx^WnQq>C`y}c3ISa@AsP_IE!^ps$s$Fws%E#mr|KiShTnlk8jOyq}i!=r4)W6l%x zJPiN%`so=F^fB%L(9Dbz#&{lkmS0he5fJw`(!0@fXXqngtD>8!LfbJ;i&C@r1XdpF z@{pmH=_A?u_Zv$!GBq&qC*>^I+R3?)Scu?Z_DyQuA3w5$Q6J;4vnqH1wNSesjut5e zRWlQeZ|BZN85LO|sV~vV1*I1ko42Ik(0dI0lsyg41yE=*vg&bwJk5p<$1ATLZXX)! z59QYDxaJXPjPs=75q5=^9D2Gqxq3`2eO;kNLS&tYnnNky(bcG*qCH=Lzfo3ZQVTtN z3etMtYYRcU3SfEhvzO4`o~y(%e9D9`$?}BVTC9-kkfNxto3zz8^_M$I=C_77c7}K` zK2KiHjbu%W+BN=l9#I$BuerinbHCLteSR%s&3nC(amE29GonB=VLsAc;siucuAy<< z%#nEv^4VGD#nAPO2eHND=;(p*dyup7KfkQbPSKymKpf{QtM*$Wqk+bt%oYCIro?W9 z!BqUx(8JpIwSq2Oe%miMcMoL=JqFDKDWC8h)Tpn`PNMCW!N~ver82;m%XSX_BQW=L^GrE47dF6_P~djF}jq%o#I(v#^^_1MQyUYt<~JfCK`6W+Z8 zDpMNjT9$R54X6fYo}VC}ywD`HsNI|7a_u!+zlA=SoJD&lmh|Qe9gZ!oriN(V7vAm$ z1s7~4i)v>g>BMu$leZ+S;^xEF_wcLUbXtgz$}U;n>*>w6A9l*=-&M(ZJ%ed^KFwME07sBeHH8 zTM+#$vuTpCC!5@-_G9f!%-(G#z~%9HDW65X7?EBj2y)UG8HCI>TlT{01qK;lxIli46DSCsI?S(s1=4!I{38U9s^tTkcP9IDUPoPdAO0voRx{82m@$9Og-c`e zn4lbn>#QgbDz{)nfTY;8t$_FdHK_bVFastH(9W zfA)d6b%(mbAP0FIxZQ+tmRR}_ARWr2b%fCcVC&kB zSAv>r{h)K{#icDw=4e0-?a=XK-!&SR0<*pYYyY+?vKZdwWlwuwk$MwI0|45mFsak^ zyVZch8bDN;rrVyAh1nR%B$UU}cubt43OzmPbL~wkZM66J=dz%jmIk`UUL+$c*rg0%HE9o8$zC{s4W<&C2zKbe; z8=%YNMg8b1{@yL)>`t-_>&X%YnHB?9ZVS;FdrDn#D8@sDfa z9~}&(wW)4~*ZltO(Iyw`XuLdoINKL(-vXyiW7@t9^>NH&~XuPGnwp z$)O6PuGYaP{{0X;ty@*iv(N2&*?zuLX62m8T{nwZt?S_(Ld102_h_OEn^s5@z24x* zPwfIGl9NQqN}_9yr+jASX7!>prWTw`D=uAobdo8r!}8KidE(ut-c3;w#YqY+>3u*r zlX#kgtgpNIs;>1HY_^^wbx=FA@Q>GBd@i8Ua^ihVL=U4^E;u4s+}`xQ`S*yBG<$tv zXj@gKMYwL#?OCOo5`c59jf?pDr#GG`pUA;AetyQCN$y0 zNH{PvxYuP4t2?;>mUVw14>2>Iay13|x6Xd}IQJm=U+%&t){4DQ&f!I$IjytFL`t?q zJfCrPM{9Fn;i|A{m+IC`tyx!yyzaso7v;_)4NiKr<)5F#S+}gH+C_6tA;~qTsCMY0 zTvgcOm+&Y+ceO39QKV0RxW4@yc%843&c8-2XC%rYN{xU5G(Voh*ALTcos7bdY(UA2 zUZE9%P*YzLRy>Sew5hQ$(5WstXwuv0*KXDs?F;)UH7!87m`yMLvKN>5DsRj^6ErB$ zJ&4D8N|r~$dlDWZTcptg%9S-?G_(r}t~Q#Eo$)#VQguq66{LgMAazt`L^Oh=1hh{5 zwJE2`FzIlXWzrZzyJu3@cwsoN0&|V>0)j%>)yb+PTeRrTwJWX-I`Fo`3t4WS$#o^5 zrVXHn7#VBjQm{G_YB-EN(sFGAL|0a!ofcGXg$AfQ!y$SvL%0wg!PUlYJ$TR-R4@}k zu&%d}Z4C+6jV~X2`QoixLE0CdDCTCp_k!PZX}Q^`1I$y^mB_Zbo2yNMqzz#B-`kk` z__d6P?YbZN|HIvz$3xlv{r{EXDx^?EsFYo#EZHVy$r=eEOJv_=mzj|4gk<0Mb+XGg z_9fXF%V4a9u`{+Ye2=NF&vkv4`+nT_@At>|@%a9sX3jaz<2<(WJdX2tzu(Un9Er>x zSUkRWMO*mG7u66oqo7OA5s0GL@Kg-(GGMQaQ@zxfZ^Z2ICLD2BW&qx^1 z>719PrF+p>!((lcnWv30kq}Y6VXRY@8I1^Hyyv34pf0-BP2FZ2hE)YFJBejw;Ic?5 z)W}gK0CAZ-AS6~RJIQj6u9;^%9D@P}qX_g#;;|S?uo=ghg?1kq^3<04~(}n<|8t3-2|Kl~k z3LCUV{O1yV;QbQFb3&lfV`4T`Yze`nja~j7Nh% zhYS5K`G0Z3U&<{1%|#!XTc9Kfa%AxNrRG|&y(?at_;2DZe-@U|M6=Y8MZ0c;v$N?l zm(+PmJ+tZjsFWrHh}qT_lxKl)TBoTvv>h* zHLOEKk?Xq9fFmN&?%ylhuKwTtH-Cv5{oYXK%wh2#ckU&`}YL?{Bf4{08nw5 zs=6Y-XF+O%b=|u}NVS#C-o$Ag=sd3KGT-Cp=H@On?lOO}e=|7g7J^i^LX#Vk=*egF z^_kk#23V5yd7arJa-0O_U)RV)Vv{@u*x}ik*SZC2Ty>d~P?~V-5;`bV)PazIT~KTg z-8`D7?gc&_sw_)J0Mq-TZ<^uRz{`II+9w_5uo1SXT>j@3!|;hT40qIfh-@AwLmSUmsvUXkCivQ zx00@26_%i8)AhirxrW|f8UEX^!e&<538m!)->MB-`v2|p##8u>3?2{N?xz;K9qYAg zc;)lui&%w!y#yhX80VINi~=Ps)IVo}wSd<>gdFr82Y8vWo|O#;$E`JXlUGr<7h?lZcK9Dq&Y zMSw%v7{0g`1w!lL^#wQDLeY^xqKam*?Z($Xo9WNf|3gDKHb`G6O9c5|Zes~ip>pNC z)dT;lk*oOYFB1F@Do(fnUEtz?NiT2!d8a&e zo`Tky-I&Y~B=@Xkc^dbf40$TFFB=Nwr;6 zHx8~mnZONMRTOvKl;ES_9o?S9t@+36>gnh6SUn(JS^>^W-`*C6GBMrL(8J5#XS3QI z?SY1bh^-2l*OR;5>ce^@NFcy$Pwap{Bp@}wuH^gr+G#sXXzlJ~n`(gBz>z%SV2G!g zB!2fSjUTJ!Uzr9YzTDpf^5z4;VO>&bACEnAGU3s$ygUwp4k!@;prMfrL>b+4YHJk_ zHk9w-%u^$jgr#)JF9!WRr%1>j&JwwIBv>#}BWnWI_`+Ppfo+;QP5s zj>1ZH!-58|G;BgxPiVo3TbE*k(1nZTp=AY}%o~#4bvCLRvLl*Z+VhoO^22tdUfEW2 z_rKi0bZXvVo|gC}zl zbOME%(d}Eb&YVe9hqetu(*bWl=Yh|8qALN`L#zo-V;v57tX_&QlbiCVPX2r>CWQc< zCZ%IlxazTeN7v#KPwhR$#027FPIwI$ynk?N$=72Sg%0(3cH@_i0aDjJm@k?~d_W5c z=PZWWiCK-2>YhGRmuFd+Bu`xg%@xkg_xr`JrvDfX-G`^2r`o397dF?BYst?n2SVY9 z+PVTONxOO*xQzw9%GGrgM&r@HTkHG508Ee4g?3o*_f^_eAM~sRJcm$>MLytC%3)pB z06MW-x>kY&$M8qK=TkyL7OZULSicY?26aek{6=J*$IOC+OL{IIni8<#KE5Hm#N?CX z(Tr{VS`iY*=TU3dm_FyYZu+<77}YvIc~x5{ZJ`r=5@vA2fVdGkf-qj8bFIF4Os3qD zPINxK2X-Vsm}U|hjwJxipL4=|bmk zEt%S6xv%bLY2*qmOg)-YyI}0$kF4S)I%<||CVN*9i9V_egaIz9L+xXs>hzUHGI zarzoQBVPdSE2tP7gQpJPn>in3E(0i4f!c z9w6(*;5>fE!AtvvvJKd7yrBePeBE^|=S81>xJj^Rclq)#oJTQ1SZ(z%(#w68(Q%O4 z^(;lAy*0p(+%#j#u24Gt(EsKmx}48vRq1mkk3gVMKah{)es{{-gvsDR{T6Gmo)zpy z4Xs&4#}K+aC)m1f5tV|1S^{#6!)%33=1Dxs9)<|6JHDs6!P*!I+{MBV>;%AO3zT&| z(NCMjV}n#LrNR4sJC;Id>VYtr8O7kIsN^apb_~aE9_Y@rDmc7C1t;!xXCJQh$2 zVQQ-z06EqVoF_R0j{5@#Op*Ch+-K}Wl8E2T3J#NG3Op^t`>z|MPh^%J#)0jd^P;xJ zl#CQ&d)K&MRDRHPZGotgUv+I(85|s;&Svs6Nq56hO}7A#H6>^u@LBI?rhqKtf}e36 z0X_2@4vr&pL=*&c;w2<^K81o+div4BE4*bf;ZrTyr8;U`pu1FwR57m%ab?7RyL32| z9tG#;EmI=&puTy6r6mGcKPWA?^yD24GjPGyd#-PO_f`X;O-6XQe&q*>V0Mt?da&5Y zeZ`J`y>@3@WM~h&ULC$8L}!ulGEBf~Op-uaaT>k#hTr4<_RS{H8@Fcl-=yRPR~sv8 z$N~3U_pJ7k)^L&+SR`ng6@={ zi1d^}(9|si8DH7#-t3c)5w5XU?&_wsF}mMee+zkmeao}2fZyNm0pgxlsfjdP0c5X& zIONWo%c(uTNE94Kz(Ty;NP3K=?z>$blm^Ckhw4PA{j5R$1V76eEp0)64{IWZ*Wd0q zOuGJ%3V};!00TlS*pM_J#Eb0fFMzF~eGj3oos&oj9d>Xl^hSm!ngaQ|$npJ+@4_z| zPlvI5lBF_@vntO3&iw;G4B-`7bHJE%BEhP+`H^@13qZ}e!^k`CE^QEBDYHfrq$!so z*R_s;_gpw|p~LwM3!foYhhpOYNUC`;Db1c6q7?nPb}l^dAyq~6wdPw3DvnDDzmiD}x@ClCr*LRV7HIeUG^A#+ zr6M^$rTS^Xp9cWtTXWWbHG&#(104fiTfTYVbaowPAyW{S1y1BrTD%z)QC@CMjrJJ! zLx0LM>rHO3x4h;S&mY|ys?qbLC7M&o3sqTECLdA_Owhn6nv&;vQZc^v3qhy8_|+A_ z*_2GrxS_}KGU3)tm+KvFovLSyya$wwET`PVZE%oyW>x1%d7mvUCVV%nn*n$+yx{Muj~5PXTyLL zSKk$r_<8mguv@y&N{^7>=04g|IW_px8`6HT(rRi*Lyr^oB3g8BipXKJqiq0i$)9F#u@aWF5 zJ6=t6nUQU{t4?Y8PJulz@69(2z&0b8zRHUER~#K+xwkQT#}MJgbVGo0cYc;a zQmF6+fQg>zsaN6C>6$fJ*(1yI#>O&{*u0++9+3kAu6aq%2q7W4Ub@Av?l3rwyaGF@ zxQDNH9Muo7Oy{UL!<={{0)hH{&-om47(e)~P zXXpIJgcA|BUR@*oYn>ZyYH4lSYW;?VftR^2V%5JMh<=Y%1X|Y;qlKwO1BMrjCaN4~ zd?!ILAdhx=jeZn&NtqUjNm_wUwUX{xPfdP?o{%Jy6}jt)6&F;zg=eAqiPJb>!|DYA z0@~{)Rrrus^EQoh6V8a&s&l^W6?It0*n4I+bS1CX11)YH#J}!I{p83kRiW3*@dIOi zz>s4Rm%@F##Gkh)g8rgXCm8!8NSkFkG0D8E@t_K7s2Wk@6TZ)@y}mv0q>t%nU3;nC zZ4;rTcRNMZ8YTsmSsF85xN$VWqCnj?+_ia>&mzQmG-d%&q+$umkj1Sj0*k~o#l#v2 zu$A4_acwcW2axIbCX{06)S{RRoEgzmTO%E z2TJtO=meU-y@KBxkbj=tC|Ir7jFnPa~Ex^hUgZg}SF>G)@Uc0*5R3!`5=FEYpw zWxtADCzBDAerD~SAF(JWJ00+z_$h1CVopqY@fP4nY{Tb^GT=Px*zSEaOUy^zwn~N>9n__2S-P*hj6Y* z)D!P1H{43>jN;jq8)vJ)SMBQnP%k+oBn)yiy}P|!($mgIemk&c>X5W0_j#U+2U)Dg zPF0UDU~~g_)(@F9tA@HYb*TW+y)^Ni@`znEv!4g%=o`=FcdCuCyS_CB_ypHt1-6fm z)+$Odh1F86QNMY`h4rB*wUr7z@ahsv^+Ys=n2h$CeG7(@@4NH$*D%!&wL6o(b-0PO zPWc8!b-328&?1AR*Fxn${KUD`+nHj15A~#p$%H{wL^;xlb(dy69dwI5Rt)sT@Z#E5 z8Ij|kJ@uq(?O_?}*)7D+jw?qGpMQn7;h3o?!kIB)7DkuK3xj}uGw|9j?W$(- zj(JSG98_G6=-=Dl5;15Fx3kaQco``1vuN{K|QJ{-tO z1YK+ji8)hy48;uqrB0G)N7lW`XzY_8X*9q;oN0-D_1m(5X(xs`hd<(Em-`W{`P(L*B* zQaIeQXJ#-O1WB;ZhQ=E1R)TD`PyrC&0NTK*Y}m=WA7erg^8!CgAdV-iK{y^4yhxIS zkyjJy%T*3dEae0an4L!s`1w{%MS3;Fi#I#fIGx9$efoGO@&+i6>bn|TH5G`lKOYZb zY*9A-U}I0Lg*V7}wAjd@iCpj23vy$xh9%huFN!O-rBuVT*`_6$!0MNIttm7|0FT?v zg1?z}bDQ?jSO5>Uvh@=$BfvtmW77t@CGGY-hNk&IF9I8VaMyZVXbg~e#WJErUHPo4 zSDX?JiccvSR}z4|0K0tqU_l?e8pD5Fk4X};b9N09+Z_*d*l0=mfR_J7_X;OO$zEQ) z_BM~xuH}_8D`wVqd6!R09}&g=@G0y*9m_bsPRQVkD%S|E?2rBodCims4`|DECJ6jk zAydGQ?U(1e*mjrpTJxm#AMm@0FJb0KG8&f8<}WpRr~}?>jEVi+5AiL95I}|lILsv6 zx4W9_oo`|sMIpO!|M(3+SE2izNdyNhne#zMI~C6Tdpgbq*+853O+4Uv0=8VwT>IKj zxW=b~Vz|J0%5uJ^uF~G+LZ3999ajSM^sc0csq`-I+MCCGLNn}I6{812pw8nJ9ndEt z2NQN^7M$41f^(Zk-12T|+V2FP^gg+2>Zo(Q7ilrPd=FO}ua!Cf_asOZ!nE&(CXh;m zxf*4x@R&w!l(B-%o`22-T*kqOA+F5J(RtwZyY>rcjD>}C;RtgHE`=-xrM84FK5_5l4O$nOnyQYzOE?`Q;F?V@56vz?pJjxNgUh?%p3%Z+91=Fc>H9ZO>2F}E1)#Hx+qjm30JV~d zoF3b}bl|!wU~XZNM&R}jBaW=b+%Q(>j%uC*aIndjo=ua8Z32eP$byk1GHfs4ePRN` zAiShYRYAj8>Jg9DaBq`pWFObgK!aFK!ewHrS9D0V0j6@N-dv}FD@?0*BO?cu!D#qN zxBcs%SBl=07+b`jhXIk69(Z|x=%#l_@F<2Hb*um-ZN@~^4-XHu%*4C@1eW|P3SSWJ zXT8<^$t~uF^ojFpgJdSLxzY$Yr%^{{_d`*JPh}>NIRUMh)pMZXK|HNVWQWgp@vVHm zFTG$SsM<`& z!MNs#AWa}N|9~&x_bw=niJs@U4#=J>sh7Gyqr~x|d@oPy8>5DnzrIf_9pBg|JF&Lm zK}VmBsM%yWavH5dNzF*Lan*4Gx@QHU{r~#YEKS}9-SYQCzdp+nz)7P{&eg>!F`q;d zEfWD-=yPRJ#q-oV_2oagTIKjadYsFB=kJya7pg6aRz52Z%s94U5~u;nOcU^O{`QwY z)(;we9)z0z^Izr=K>wU2z%g}(;X5!vz+657DwCx`u`n_h$*bdkM$yB}%J9jPFWxbS z>S6B}aa4S2vkV&zRjK49VI6>W#Q>`E8#4eHJ#QNEf5+Ytf+3j;#Aof4GONQK0R73I z_;X4MiDLj!5d^}UAzzf8L%}W28(~yZUK_Fg3Gxo2pV#^m(%E3-B`|I>oBoTUC)iI*q%@C|jlGq6CwjlWMJ^%1h4j*Wv$Aq-T*K>Q9i_XSDCi$+WBbPnMtGL}RX}j3o`M`Pz_Fko7gr)5xB4f*<7-Ho8-n`h@ z`R=l!>$M&?&WT!U)MgnxEXW$n7ml#3DR4IKi_DE2oF04UYJ!;fSN4#2R` zbXKb^PGRLXTZ$N?wN+!GyI0%nDU_WSdEiv8ViUI37jv|HBO<>1z4X{Mr|eJf8B24E zXv)-Gy&5u~F!!x9lHYrr4xJ&QNh%wek1@5a59oQS#VY<-qs+0NG7LGq*E=JgNA?$S ziO}Y~KZ%V*|I8i;^C9#t%i1${vdUa4a%GQ{%9n4g`w2GiAAfpF7kWf!m|1MpJp(spO^g*99wuP(os=coVb9i(q!v+_#zItGbIfO#GY|DY`~FY1 zCKILoWZDS}WWLyS{jS(D*3(1CYb(*fi+1PT+p_A!5;rkLz2eLzs`H1au$*^Vc<3BH z{AF}yI==4X-&mSSyJQjPMpV!*P!gm-z|V`L9>=4~UN*wxOgkR6!^rQqEB~A3>VLK_ z>xp({z@+wQ>ba-yVIq9DpW$|y*P_Upp2@|o$>%89SPxf(wVs*mU9J!yfTY+9=$j$S zdLuo#C)W`9-pvEg)n6m73g$yrnj*-4k5bi(dq+WQeS6{w0-&6ZANJ_J*x}=HH*sOR z@`OBIGBgjjXJG3F|3Y(m1+Pv#5ZP@}yBJL(LG|*a1#;1RT+i0fgtb6+gX8%mOp|lm zk$dL@A7=Zx9;l{mcHF9k{1pEn;hg%r+*2OR40)XgccujG#`7z0>*qtc=Ss_Zgf# z)k@pZM+Zdns5**ldF7`>8iCXs?ga{1Xbv*W(1)1?;D*-P?6HAOI3xBEJ-VH!Ox!_4 z4bLsW+1&M{?S&(BK{EOqSd$6EIgF18H+1nF3lndAX)W#II+gSwAkd2`)| z>eQcX!q1Q~^HluN(GTJ^#Lv0b2#S^JVc_q0OKW`fANlJFcMH?~{8pI7*jF*ysRsIU zkZ>-?F6%zN9hX5M%@DMXULve?&{4oEa@(T$y+}?8RSBbtIxT?3$wAAGzck@^aCy^f zQR@kg`cF2jRGQCO`hsGEF75UU;V|rq<;RFFNQh0W*?mPYjOua25T`39=kekAWfK_x zVd0uQz}vaG(yKqoGVUxdS6_n_t{-)l(+Mm>N2`5ZEG`$-*nTZG=DuWsG;h#q(Bd{P zNc;Mn^LgGGi!&Bw?cvs|i{hsnLC)%(J94~yZMa)tq~^UO6c_-Cs_VDp`fhxK0?{Vu zPS#pdnFKB9R3pTbs-v5@`Mnf;&D9GVgZD~EK!H8L&|6WpAny<90Fk0h$f154EUXmP}&^E^qOP+?PF2B}xQQan;4N zNkKIOeZBweY2Z{5tx(_`w`1gv!^uf{W(WPTm}Fz zP}(Pw^#JKH%sJzV*p@uKYy!cFU6iQn%+{J6!M0p6o!v;j2L>Zt>G zoD*(%0m53F@F~s+Bll(PXgQRyVnd~W4D2Kf25=r>kW^J6o`&o7_2%a%o_X0>j&$0Q zj&%0i)hiz=mfh(rdUPO%@gddP$kZDN;ae8u1|rzdvp8lhoa&ahJ?1l{u{a6895skK zZVk8$2!BT_?d7pZY=8?G*2PBJ+?Y+ms3ztg=mVU8h60g|nGz$6!Gy|7$#}NFJwk&k zc0zaJV)4s@Rsn!H_$$LqW7x!DVRr6~^V;QVp9`CVf6g?KS~O3qQ$1fUNzs9}QW(2g zmFk)Fk2zdzy6YX`FuyGxjQLwlyhDxi9_*1O|7g{JEDHw22rp0qU6a9arz=YzqT9}X zHr62(Gf8U~YQ(`=PXic*?2bG>i1<&AcYg~ufcR)-;p|DwHrBEY9a^L3_OKp|ttWr< z_udANeqa%KTaXv8RSZHgtsI^bHjjr+VRF+U&pNUooiR=d7`m(Fdv^u+rd zrq@~%h&!7{ozDWneRJCztla-m%ejI`OzjIJFz_;CE02E7m*&%;1N)njvF}HV3u+bb z^?~^j#W8vlm*Gb1u()SAS~ZfH$q1x7BHVT!EU63)rsenxH)~sFy-9smv*Rd*8XpgI z!*1)XJ%!6ZI|fLjr|#~)+cGV1pDy$2V!#zRwO9uxIm`u(Hz@b@^R8TGod71Rhf4TvAfwMtwTq&ARys1Dp~AmUzD&F0TmpK3cfr*fWI- z?EK|hq)o`0;PNl!dyg?(k>MICE_gpwoo$k9!Ca1>$cIXZs_r-z4M)ZJVa=^d#tQSb zaMmZS$9c<0HBI!AeYxdpa~<~Gi6rnEst>OH z)l8$``p+VL-r-}^(W(Bhhm_Uc?T_lZtKbohS`yc51q&X+&#zJ;$RLrDrRA!z->o zyr1nA*>=g#T>D|5EbSq;8CET^059wu09&z|!RLL&gY{8a0p>2X=ypO?}CR|Is%|d6Z zc7k{*?Xd1|&Cq49V0#+veOOLn<-1X_hgA$jv11oTpAGW(bN%OED9~$kqqUQgm z`BCW$*DOcXo2n=U#R&^yb#qSU{Y&IxBJ&xSXcd6+6Qk2A%kDlOSmUa9vW)VyEpXDE zz7c;vze(#RQasY!17aV%9mwDWf*-)vRaVH3lX=sF_^3Ap#0wnQS^dW)c-KM2gCKp+ z?Z8XxV^fY5!);gA;>N~a!P>_iTgVi*i*tG7+Ma z3NRBBUs3UUvNMLM55$^<+FANoW3vxNnEC_?6d@sKWN_S#Ns5}2ZYuBh+M6hr5f|@l zNMslOvEXOgku zSgmEcUKY5Ub-u>mHN930nQxJS)}42eA_A`i+EN%me_x9N(^f%v!R#gS+>_1UE$#@6(pv%hi(cLafHV19JJ61rNbBU{bz`-+4o zor9y!SpqpP*JM5LzOk4BNJN3uZDl4G<7tSQtvPo4_0?a=N$Qb}nWK=!-4y#B60pcQ zBV?g5!PoL&xl#zFG5MPQ>FqQO5m+h(>x7iF5upcahP9I}y(olUJ`}Q;xO$J+6yZ@W z=$C8LuXDJ0?gEBhn79mkiDP~#YRm9K&3X_qg{x!uZqWPe1Jj7QSP3FX_tW7Xr_Y!e ztY=QxFwwS?_6aAu{mB`#VBpQ$ykU5%{s^CDlRym=Xg9u5D};dFa!5@x)7eHzuQ4Ysk(;eOKrrJ)38U={f0c8FT2J% z<#G!+StnM&lGlhTwdpbES3OrFgGR~BhnP+TW)E;#?z$1?nwSF7~K{fy#se{5Jh ze4<2+)F5OfOj=42LG6<1-TeF{igU1UUMnvj9{i9QW09t8a!dM4x#x`n@Kw9l6cKMZ zq(mXws|{z}K<@s^_jk(P_Jc9Dd;b>?B{<%iK%dLkbk~%9@Jw=S1t?w-{C?d8$H_vabp0JTGm{0d() zX90IXLBaL`=B_E=s1D|7JfVX?1(znY6K+imxm2|vjvX@`hVjF%fWL$(K)r$hGEo=a zUm==xXJQ7@a%9D_hXzh~TU6rD zGJg1){$y>kYct@4BBS0~HlBE;joT#JG&auNr~5-&%*LkrBlg}B6N)7>(PN@1jtFvk z0XGhXX9=YTMbF*mto(W3Ch_gqo!Q<}e9^FLw2Wby*HwN0aSqwv>#;t$B6@-}t; z=(kJeJTEqcjKAFm;d1&p@*Atwcg;G&Z}B0pNL24aUz$;(%FpF&F{WuYRG}6undPQm z_O`&-w9&_p=K6qNBcI#R{*O6{Qed;XKN8@nj{R^y()L4vR$0LJZ!z3xviD?H4!z0YPE%;$Tyf$&Y||MsHUy=x)K5Tjrrya42h?FgUTJN3}N$w@J~^b@fp% zd~tnezKjoeal9vZalx8th;SphYMhH8JTx7=Ui(pe#LjfiAU!?uFR$=O)#Aac$JWbU zvIv&ST7PIZ+`nex@g-s+dC%QwT`~9ElX79U-+9MUBt$l()L3j7(isznDmG=utiLey zowp>hTd~S%nCWhG;=M4+g<6H1R7{+vC@8Z@QC-G{1O#jAOjk=?U60Ln+tc=f(^DQX zj@xGzous(fik?&BdNc_2-icdjM6=`W<{~~TUL->0VWH|ggP5z!&aTxtH*m5U$?z3_ zvYKMIDb|2&;RR|O^1*F=rZ#Z{ue#NR_0WWS{=$XpX{f_#9d>(2g`R5LunYp8J$vm9 z*OFn=yi2J>HP%Uvao0f1GA;b*Gdk-cNkvTVP2xh!#nDH#g49+_lRZ)}mPN?>oYTYF ztd6_r5EpdItA^##l5+@#4ebkSXVYYCR5m@xk|cm^apqMvDY2l?AmHe+h0Mffw0ohk zNZAPw1eeq#UbcffmCY? z3^DMiP8=T|6faLZoaRA>V-%Cb6B0dk%)aQspBKdgByrw@tNLv#a)f=2ZX*0B?4r_n zMuK8nYFzUV@2iiSLO6P%S9dpEc1ts3wJ4g+xk=7SiSW`Q^S(sAffSLLEBfqSC;Mi2 zt*(TMC@8Xw3E~pxp0lE#dP1^*f{B=XW0Ye}hNnDF?@_JzSjaGMZrvMc?_Fn8SkbUZ zF6@Ff1tSV$5sWya@o_q6lUM~knJE3~9FwkL&C$r^u@n;Wz?L?2h~q^K+&r3V%m+aM zXSVD+>PJzpG$(U(r?v?MT0My{DcHF}b`7V0e21hUqFKgryV~uNShIyzC3$##VdyX; z_8XoQx=gh2#2s%>w|7T)Zs@etjfStHJKBAjat5tKBd{XK0hHf=z*AN<=Tc;|Owvn; zAilUKs3YzvHY|#0vDPhj$A6Y(DVi746l$nm$7Fz7AYF4gol)+KjjL^NpYw+MKD1#F z&u3=EbGY<0AGpE#^qHh}lyjje9xgmID6V1gj9z`G5UenSvT)L>=>^HqRCr}1uEh{bU1-uu9yT%Gp z5m$unR@O*6e@kfP-0NwWQ}@HZ=MJ z?LAZFxt*73ODJfK;FP=1{iDj+5Rr~uqN}L+r4k4VjMiHfqdtH1UZBdrH;UryroKgQ z(A92ri){LSJPZA3S=4g56gc4b0Z$}3Aj?QaPRsiM*{Ah2g((-P{@83)Mn1;!udYWK(k z3V0w)l1#goQTH&^+ImgGetE6V&kv1x@e5RBtFcL=b~7!SZ8s@|-;m{;rByBzpDeNE zrwoy)`81EDusC-4h)$`o4=(64G1tM)!oybRzXBcJNxoZhI3JxMgh5L{qon8ALhH5y7p#fwGmjdk=(Uo}R_9ZLL#*N_ z_I2s}evn`TNFDeQoU#?2P@Y*89>@-EaX>GkqSA>07JtX^eT`dthz+Cn3GBABJ@Y%s zMSTyd6&W)3Llp*e?>xq0WX(vl_&faFlxknX64%u#*>@d&8ZPqUH(DxL3-t zUiR_5`kA^<{k^&M!%yj|RBI~9OZ6K_?z!(+&TrRyzOFw>(#t>m;?a*J*hvP*K@|Y! zzzu*%3+bf8Io8E*cYA)y)LZ0fLOmevueJBWL!Z-Oy&1-ilZP-E;W|RzPqjQgSR^YV z(ZW<+@rixdh%wb|5hH24;LVb1^>Bh|9YZWAfV07N42oocA)w*mX2baJn+We zJ#4Qb1FreL9wS$`o5TwtZw_5JlK)dx|1~=zSCb3g+$eL+Nb;!RQ3JMInJ1zo4{DxB z?#XLze7`}`X=iNv5ncNHNgdOri4f=a5XW<#CS zR~r{M51m>WI|=(3%+XoWg4V5U{L0z3Re-WJuFVS69Bi`k9OVAc2sI;WOI5Mf#Oi)e zXumk^+ft-;P}?u`J?7=2?Fyu06YrA^iI zzaC6~&mCTW5fbu0?AX7R;@?N;pP8bEA27Z7FuBLf)myZ&Zy5r~omB{hEMX6KnynD7 zmP8(wS@;8&-^2RPlm6qF``3Hm?}_2b51+=EE_|J;e**%B=JJy>33O>dj~$R8VYmr- zW~bK}$*JLA8VeLX$y-d4etA!{r&{P1o?1j*#?GW@>pbvA|W*_XxK+?aWzrpl|& zp^UTgp=wMO>|ho+bEDkXD%=0mbuJj#tEssJpbNz2nsCa}TCt&4TfCOVJt86>pW$zJ z_a6G~?qKO_5X|elr3XZ(rA3?TA6T5Qa2GgmQl%T!iyNEser*KvUzu%aQ$Z0`M#_CT zI#)03m)6Q1Z0pX53O#BL?GpEJ>+D={-&wjYUJ)F*?2_CraBfa=RxD+`PWgdY+;!e$ z_0l>)A>(}!VUf8zZ+CBdkmVZM*SgtUT)V$nD>XaRhPfTumWtX6ac>HpWn7DL`6JEs z8}p^fHaaiJWvsjLbkFVL+EaH*-MCxqtjZ|bhnw6X!&cfnl#}o|3QY@-<~#5zzY_cj z@S<-_`F1z{)2Fi1R~=8`lH|&<6z(nl<}N!Ar`=`WE}Z{hbBS*{-+WfY^Es1u3R`GM z8?O!(BkWbxDgUIt&qfr-Cl<`7-r|72_PLU+6BUX=M|-nogV|jzp4IB&8w^ntGxB$D zUumW>K5TELe+Qjx1bVTY=nEH!cJEEtcNV;}%G%%h(J4=6_r0=ijc#U^$ZeDldtG-) zcE!(AFbYT)cTgArG3>Wah9W>ZLU)?c3}u5z(_j=Qy1w@9i7n4zVa@SnBAkRay>TV_ z14R7fPBoarpRPu@ZJs1@tK_1hIK1RC>`jmdrjU?t9la zABo70SA~cfY_J@NdtJCDi_|eAuVD(j z4?^CCM%{)&J79??Uu)U1Q^ZsDTIf@-a@T*rvK<>RJn%;P5%mJiVc-%4`4~B5hi5#M z#3R(>1ijxFWJzKWM`FEC`vcp8W`&=-0Ha}a2r}#-)_|5;n@8eI+1JOmm#-9t{)n=? zfG)Bnll1wp#_a;5x*TCGuvAHL%AC%9#`msXufoj7IKnVIw%<+O2485+1iG7gA zIbnx_cT_0}^eG<_CB6)QYe=I}vk6ydC8yavedHBB!pAzotWq^sCx|#+@ zh}ZI3d+w$Jz*8rQKu`Sr65F6g17)hUyT%?@J6%GfMFfTVcnz8#s|d)5uU|$`VNGt9 z`<_%06}&Ke!%q;Piuc7+a?)%;E=wWiA&t(q9U)q9ZjLCi-Wq0C(ctONGrr`lg^wl@BK1J#?~*b#(~(VyZ+#mm z?ovtN+{Z~wmeOy`I$xUT?PU|!zub<$tdAah>C12ga|d|y4!eonH*46qllO=XSnk}D zKATSbkg|n{oKs7yowTqr`7%;Y=7{>}8nWoJfFR|3S{gI%F)42SdAJmlEa?FCwUehM zPfRRa6idc+dCxlANE^LUH&#nu` zhGY)6MLo=7O1PLdz`x<{d+8{5qbqch1lR4)5#_V$yR72O?mk#ON_r(UTVwvTQ~Lxx z+(vG?XK?-MJon6CE&Jii?DjEA-W;)yoa(1yR#*EFIgGR{zrgT)&&-{oc3F8teO9nnM<5FDnAbn`q`7DRNYVD-t%!4{V+>z^v?FOU#o;KUbp=%w zBvgu%1!wA-A1tgFcZ!GA-j&i%6($vS{U8`Ud*Wm~1SXyoww~^2DZOybNL^&GP2;_j z;lv4}OHA*$D0E9}kJ~L5bgt0Ax7*EzI!tQP>%$+1nIALb-TPyfJY!c0XRp!#J|KtSl4FxC_ExM!o$r!XM9uO_vGeZO}~ll^1OH0v(M@O^5sj6PNi+bxSreM ztpTyFkUI3}aP>=uv->f}iZkR{p!JlOZ6NN~iJXLWa5sm4bU9;^?~d29zq#`|#UN{z zhht|L-CEAq7Ju&eS#;Zko_S~|+kGRLv=GCk$tN69dqiUlH$)`fLM%DniB{+tNAXHA`stlns;24?SfYBR;tjg`m-& z&X;`CIIq|KHi5+rs>I+~v7GZHKmRuFt+)0jLN?k~xI^p!-M90Qc)2vsqd~yYc)eLK z)^;}&qnfFV=J|Rf)|hOp<)MMYo~f_I7XzhLM$C@cUX`dM$#F9G#rWKftmzod2ZdcDa;KnuTIBkh4TV2~&i3Ri7gJE; zAEmwtf2JX|H@$0+c9>>GbG?TzQ0$Xl(?(>9YDB}i1709W=F^Z&G@azW>S_U@gp^DN z(hNQQuDJHKbnTH_OvG^DQJX=zn#ZxB7KPs)rPSncrOv={rI5sN+Auo{2KI&{e#nK9 z_h>6BO!vD4CSm{<`aWYr)zRc4U-v|{-bg7kANTraLw074AL<(nrRSC!x|^adN*l}Y zHhBj1u-#-RKpf*8|;k zh7CI<9WQAhjCXgC+BTYLVf=eB-Om(s+*%r&*SDIpd}q;KrUtqLHdN^+jqj#oES|c$ z&jt%}TlLGR zEP~!w+W8&_F&r>+^=n=9*pf?f*dJ@k)2(ZBljKP0)^Qru9$6IKnt$pA^%{wtx*i%@ z1)+;r^iXbIuPMDHnmcXY$lSxtb1NbC{Ct2-G2O>;rp|O_GbNABH;nlWlNVrWPtQ|^ zIzPN@+tt9w8fiP!S4!@fG11)p^@*NKu8AP$;>2We#CM>7`}3Q}CK`{U$e>6a zri9WbnvXPPbp7N{M{Y{0J#0yMBi~dPD`;v#wkf^Jgi!x<3wl2*=q^vgar!Wm5z|59 zqr(i*INWSvrb=tL%+Btfcx~ci&5qq(ftu^p%iPOrus*xc_jgB}()FeRG^DJYsrTf5 zmkspp$mK3+)_Gs1%QhlgsVtqFPmldq+Mai-?V2Vdyt@aJfOG+cRXz}1!!+50%yk7#>an2l zNEu2QZ>B~n3f%qAN_1DE6doG~*<8r9n?|GgW>$&~2JWr;GB=`T(0i?d%jEZFOlC8{ zF3%+6H#?5V3+%eROj>7n8i|56iPPo#DHp@OUJY*f17k#aTM_2?;k!%rMVb<310$-( zZK4Zr^r&DX?7`*92a)nT%(dUr-Og)26Vk&y&(JkrIc?xt; zL_238QdR=g^V<1f}wTGhlzQ>KD?^zzNiF!g%!O?sH5%-W4%5m{I=m}qpo4t6faD+DT0G z5bon$(Q7kyVD+x3qMb5!)kb%_PyusLl8UbDVtLrY(p4kTSS(vzU6*o!f+iC_!^jRV z(+uG`Lr+16q?i*P@+6+Q9z6MF%SVUgcy`qpi7o6EsyLQ>b(|rel$dzjaeU)Z#ywF% zm)k3=%SIyqr?c-2XliQ~Jsv!OM~c`G5F$tsL{PdAh=NiD>`GVZHS`uBDov$#ktWhq znuID4qV#5hgceGWP9P-I1W3CZ&-w1V_q~5_|A6eW*4lg4%&ci^X6C9LA{s69shreR zL4J?*(i()9=SG9NCp9-P6RgOos`@&gCI&P}b2WSWp6xlk$Sx1K&udsXi*Cx~Cy*Yn zz)NdE2~B%GcMU?L(D>oBw1LNFTeaJdLaRwhREq+R=C6Rdc3xU5!}o$nHSdiO*Qj)x0ObR#=Z z%M@SHTb7{YCe`z4{YvKXP~2QAON4s6bYl2#XEt$e`@0X8st3N{8<*Imhklf99D)uj z_;gpO&M=Z#V`^F8F7I2u%#;xomC;*{b!f*3MG(a=8qt?~x zuL7(GqrgDj$H1Tg>DM;+UY@F<&J69Z#<&m~g`aZQe4E!dB#gOt$)Z}T<)<+Dd~nwG zR<=L#BDRH>Kz+oqY1*&Dw-1ssre;qZJ)Iw~tMOu=Tb&U*4+Pai&9eE(@aCtXiQAA_ z)gR=fG1hWcjZJM>w~(sG_;dDf-VKqvDviav?jZ{cDlxy`Nn)w4 z)8oRKyR1Zfg3$?|f&hE-(Y(KMa7XjP_N$6YISU5dxY}x>rcI!nUSTf2JlpHz-FMgv{fT3r_S18f1`dlM_XtK^;siQg_zfD zMiD*(4vuEfrh`M*E$dK!&9!AXlTkfrZ+4El7WMl3y8%&t@E0%Rv9+~nZa%hcc-=RO zW1Ul`qB&m7EWeVnxXtMY@>uJHnF1r5Dd`$7=ETZ^x=W1;Eicyu`P>#dI_~}u4!nuTlk%{#`x-`Bt%?)hCSB9QMK{m!y45%F-C4K(?JJmSI34 zZJMJrz<#jqo9t>fb~=%?rnlGWE!S*sYVz%4UyVEufoz;HL^C?60Qz zF&jwnH$y^qHg{rQ{79$>R+~BbbdVSFX$yY0(NAGP9_<;Q5or1(Zm}KGwe73H4Y%Z( zkizb94HfiFOS5qjW4<_r-DQ13E8OgV{N5vyHHnLN326(Cy|@xtP6+m8AK-b9U!*L< zw|AZ&;@t#OU90QE^9A8%@~u7%)=Q9DpZPVu>fyZ%ImUN_mBHLQDqDqBlZ$X7A7#xJ zb-4HanB(`o{e9h*>oq#C&Do9^f9p6!iAI=kG5xfk+r7^WwcN%A-~RC=*4ra1@F6e3 zc)4v6r?-wOsvrcrPCE!O1^NT~68(JFvywKWQT*4Hu0)5=tFD`#yD_NU7$R(%hQZ|l z4%{D1I)>FhPi>*vARr7Zq!wM;jYiiQm&6ogX>*F2@D6c&q{Gz&L*>xUUPYD`8zh_@{RMno_;nOu zHZpcR+jraVQ&S2?z;1GUGqesoU7zp@({Ay`>mhdgPR^ZIW|5n*JUylmhIoLN*4}&y zF@d=Zv4?L;!QI^T;>mDULN$cm#(EnH2^7$$Emd9wulsBs$B_(q zn_i*(6rF|y2-8^_uda(LpqV9wa#lS~)4scDXV;F2TBGWDFWxA3gI>Jqv$7_6$@DZc zc7P=KI;8FG?czDSI!2dp2dt z2)Uh)()l1lbqN_JqFMBvl%zlvYj2garVwY?^D|CgxwvaTqbd-~ZOT99)mS$jd8vHN zsOjdFO5|C8+k%D0=1#-HPbg>ol0;*sWSUoslT;EnYHG9Bu&x`=p?meL|KOpZM275` z(5y%w_m_FXNIcom=U9s(ZAmm+jH#0B`UTo{ItzlIs0$Qm|E9U`8ztfVENH>f*4*=N zvsyjEwAl>i@fnJgbdb5-qm>oW?pPjqe@Cb&u(WWr^n7jJU%0fo4WnF- z9%AmP3V|)kzDS{Z8cavA#CO2mef@k;^@7=j_%PDS*kt!`vW>z zMYZhY$*(Eykx@<1<5O}Xl%PN|65h)sk(nyAJ`^2_;|*JfC{k=L(7Eq{Yy`r#gW)Ni z8Z-oGtx~ZxdAqk$i-0h&dQxsYG9N=g<<2%f=$u+=?g@(s6qhi)rTbw-WpcadUbiHC zt`O^1-+Q;>CJUUGMNdff?O$+Q9G{m@JAnO7kckCrCmBP`3L)E1xCIOGID8f!+dP~< z`YGGZI~j=dEbR&cn0a5LY9&9iP=Vs~DOL(S|y1OU@|2SIt>l+AY9rpyx3c4kBCNI$Xz@zSr-DdXvDjLqy>y%49d`J zDtLtq4YPkV-YFksE@67dLFqmXgyZ<0TVmU)XJGRKumWdMAxtU}C`brWp;Zwpdp*Hz z^E(-DP!6mCqK$X@{Jg9tBL~g`sqGa-H^p5A*Dv$tJr2s@HIQOzcP|U!7Wy8!-8dGg z@k;p!D0KUdP*3=sjbj{rX8;c{DB=rK^Nwfp?yS+nPfL0Q-+NMT{LQxu)Jb~g`hMfd zqSha%Tjh&!-gwz15kT|q@Z`1ucE_yVZFoXkF5q3u%>=@+`YOj5Lwk9CL4Hyy8UjLZA+F`*!Kvu$+)t) z%&u_PF9R7%+&LbYyI#zN0Zo3=NR%SHMewNj(kwtC#rBZ;>`HqPG?sP-TtbBU1d8W` zG#j5?y*97eE33SMH1E_&^ED-KkuGeqTE;&EykWFvzh>ryicfHeZpWt7$mLHw$WT@we_6I&%<%t1dDc7*@u1bnJ%4kgBwNdK(pSX0WlGb#}svhsOr5OGkKKyf zz=kDA<%KBJT+CBKSu=$lL1D`be(>C~qM4al?UJ6Xp6(PC+#Mr4k>Dt5g|07T*?r&N zd+aT{2Df9K*avN3&*CLaZPG1VR^SmXT6X6H*wr4(#JMK&3ykU0f*a&1lx-Z>yxvju zM5dTa5**tiib0V~y;bZpygyAWYrlk?Tr`cU9G2;-L{i4j-TO1MF0d5l3$`n}_(-d7 zRU%beL7vTTv4Se<(qSZDq`Mm`;ga3l3XId$cB6gG9QA zKW*!(!%YXTmQpUivHa?d6A>{;|0rRN>TRIqsN&MjG|QYvjP|_(;5RrglBq(a*i4eMJTka+GoOOBQaABw}$?s@^SaH3i8>KC8#ZEBg}G#$E}v*mU* zs8i?OuKwpo3@*I6->^8YqVc=q0XA_sm&BjsVCNuF1U9#>`BF0_7S_2II}W{G&K=KR z$*og-?;=mXGzO%q+Y1xojSNY!`=wYU4IZ=R;p&XQ+;fb+Gn0=t8LyU?8O=8mFcK6y zJAE;kEQxM@9s4)$@2_Q?b4NE7@&Xx{Tt}Apf&gz;HIQe{Z9uoIPPjlQoC5>ix+Nk5 zZ0{r4k5<}LZ(RHTEg%(ApMOQpi;qa3V&|rh*K=)%M8wO{Jj) z{K30c19TKo`>VsmA%zH4u|=c1PaWRR>@DTh^R;stNiml7SoL1W>I*OYxUt4bfhT?e z^|vIm_bjG=!VT|*r0kb&f$XaB?!$AgVfvl9Do`?^}Zi^*-W9Dia1x`^J;L z_{OW+M>A9n@V>=^!y~9ZPjPi~oR+!va87W9pUM*S7}iIdt#z6%ENmkag#8+aQa|EO zk4qltoR&3Q^{m(na|VxFpW&YAG{A=}1ynX#AcxfxSKB&}$h!f9+`>&4OE1RF2->HNl862%b@e4jPV8-CV?^}UuVowETOs4oarNHBd@|A9$*n9D_J5|&Z^PQ`RXQMs5jehf>CqJP1m9;A80Lax{Juzx@tfZJ`ga^_vIlIcVl<_XYTx&pG(;4qP zbGki2ICAlcI>|S7kRY@}7w5O{ITwy%SV5sY)N=l4*O6VJFc-NRxF{(P!+}5J7d1H8o_#>&aC7|D!EPku zzxmD&{iyX3+@dg`;#6??En;Ehb)kaJTtoIN&2yEWUG2wBij=M_?hkSQFq)lK@$nF7 z=^?S19ehsVr#gGta4xMF6))b6JN~@Bke-|2sha$V(OxI=E#=(3WZBHt82fsUDFxw? zkr9MrZjee1AK6T(s$y+m|q;Et9-eY>Ps6MbfbtO~{|NZ8RyS11mqT$4@ zglVZb@}8sM6f00MK!6A1Jqi?}V~PA^y^tv!jxop$8ENv z9NX82qYQfs_3KnMNkYlRS6YAGhNzA8X)%T}+@6W&+PCXtfyfbg6+_b^zg$9!oK4V2*ke)M z>qWyOw@o>Xzg{=kWa7J?C;4|-d#T2hC&^&yjCKVKySRv z*P^)kt2`p^m@3s;Z*Hkc5b|%=5B$PSJRYeGt{bu8$^#kbw6<#YedhPD z2GvToo5Yqfwz~I(7Tqg70atj}zq$qGyz|xJkR>EJE;e8iP-$rkAxQeXw5~4CTLVbR?ge52~aL+C^O1F1>cLZgy?;=0<+4DtU9tU7j=5dc%MvU-` zDy|VFxYUN~$FRKAo3d0TlFyMV(vYvC<=ko*cfI$rd%JT9?t5w7M)Js1Bt=kBkhHhy z8YJ*2AdzK8W^7@g5p9m&@2OOofQ@9TzWX-nwVg0M3E+!-<>TqU`xN>3b4vT)KdF2* zQ4cjkbvI*c8ERz0rtGmipZV)MkT=*H|HuQ8kMpxtdzSGeQf~RB?qWUE=0()q&y)Ag zJh7dsL9u8oTaKKMcH=eL^zQRZ)j*EW3DIy52jXs62$B0mU=Cnkm&Kz2*@+%4R&$?lsDhOHaT5@fU&msU){| zDx}<4CTzI#$)OFAiRGZPx8DC5#Mt)}ij*==X(=THc~U}o(2WY`MPG->-8wiD1RK~qj_2`OjP=F?A5r^g=K)bbE^ zLk#9bHAjn9C3~J9&dSh3inkpZoe8$gSS_K3$HLe=%Q)aFF_ICbogI$F6?gm~1_r{& zec|}z`MqeB(X}Qj?poW%rq$0QHUXNOF%N>gg}ZG_MM=d7UX2_^*33If)*`8G(DCB^ zDIDv?p@PpERMgX~3yPO7TRy~p(ofxU5nwQ(RUL@eM(*@?6`FXujmfp11`1HO!)q<>egd5HDE zxi!;LRuZ$L!Ia-K=ME#GscC}ELYTlPM!c3}C09#G+5gSP-9>rwR;Kutb$c;O8*?5OUaa6}O0y_b9&f<*robaJu+bpEW2e4*dl%YBTHpB_xiWof z^dd8yBS5v}DXao})hWC)U)G64E~il&g~Ccg%mh@^#4igKy#sQ8cjp<;1oDtc#PMoDy#P=sWRe3~=Vjxe zicOqvv_xg+;UWZ$OeAil`l7MYr&NU(G2+u^uqhLcWUwWJN6)}QJ=WCxwUlAYMU3rU zGTV%2lMU<1G!^+VYEEd@T}xg^yXEKtr~MH&)%oiV&r>T`{VJ419(}M538SwmKEA(^ zFi)Lr)Vg+RtA+RPD;Cc&S^Ii}lKJ-vn6$XY97%)=5Po*MrSnCl(%JQ#M}3c5629L` zZigiMY9ekW%OMl+nc&>3so#u%${mhRPOB^OHS>leF2mE6+jXKP_tFossU*aIIeWsW ziAzUKY~9QhMejpd{>`7CJw86(!=dB(3B@G#0jh<~rjpUVd*Ig@JhG{d3qYM_Y!fSq zzvT63Wm|v29DpHsHzM3Fv-*yFs>&2x^9NJH(ZB@ViV0=uo!+MAUDEB9oXJRkBm85D zPeBPfw(dY_B8{xWQsjr|Tu`-!i+xQ=-Lrb?M0cl~PeQ)YBQWrehF0-(s-Y z+_{9T`gehC^q+c|2?xViljN^?!7Bz9N0X!@wCrIJz~%r)7^+6H3!?~Ge@Qosb_gB5 zrDzv)mX!0It97tP0ZM1g=!U6W1=dW>DLH!(oL>3Rtgt#y8VW@*jPjG~-1V%+KWUHG z>v}tJGUp&n9nN}tUYX){CK1DQqX3CQA+Wv(rJhvtL7}u86%4@egv)5zzA?b-c2A7* z=3KerAK#IQVc5)5Te^T7+rpGj1^(?kQ6t$ypIlU(t_me*tcAJUGII>dDTk$2pYcwb z=3VHWz3bV{xObWu(fb8ura_$kxLoRbal!uD%PniCUw7+nAmzY)=QikmQ?lqYIhzT# z>*>}WOTqp>z+n)t>r!)1z9}zraS@3T7y|*z4I3(LK(rZ&)EFq;P!x)6d|3Rl(i8uaCf-;6 z0u%@32xHY4MTwk7^`P0r`akq0d5w(Ai%_mQA#5`03nIc!%^^>PNw0JEA&R$GDok@N zxlwtS`jo%#+?~?0eFeXtIiZZX+c}Of3b}NN+|}JiCS%P6v|tr91G&N_pt?YA-u#Cm zX2v6OCbqEOXPRS8)!{r)dz|*L8s9SY~v;9X2F9hb@qzFlhQ$ z_ATRRIe~2SV+C2^lhWV;f}3bH_KMN@@CHuPw}1zYS78-M73;w3p zPR#V3nZ)K{w=9$-b>MK0D~E4Lq(Y3qp(59)-Nz!1&;jYw@i$C1uL8oJ%rZV7l=_Bs z;nOdRt42BEYPFFs&f$ASWXafL@KM@lL;N$jQ2v?y5ohO|uix|S!PT-sSvd>kZ@&-x zwRy77AqhQU3C$K~RGZ1~<-2~pCZeXURRcpXu6J7c2qNC47vG!!CmDtrv1?{*X1;TO zPts{RXB~YVG`;%a)${$K5q}?%x%w@IGKSv^*DZ}TQiS@MB<1!5Vv1waB#4lOzBRbp zuqz=!>qa$>m)rX1(zKl92kQ~x(cBqUr*ynr3V&8D{@G$?X3uo{9KA_d1 zYi&AFbj^yLRRh{+D|_6_vm#V;1;U~`tY$1Yq*bhSRS!r7q@TmA6Cbb&)VO`6Gin5U zjXtKr7N;<8|HL?{Cv%+luzOYrxl!*H{3}PpWdBuL#GES67|4+CS;5 z9_D7XP8aYRZ1;Xo3j3Vn0?r{`J*7dFVXkgJo-vupbjf*Q+lqbKiQL}4L zXs!)zoa&YRh;+EnM|{U8)^lEPKU?&f`ra$pH4+d{^YqC}_4Z$#=cu46%yIfU?)%Fu zi3xBym4nbEt2T%6&!^*)7ZkWk10L>tAhXJr~Miuml7ueUzk z`IB^UG9_{;AoiFnx4M0f>gImBEybV}u2nzmsLeLjGJQHoY#5o%iE?H(jRl;xk6%D~ zUh0G8gJnW?A@&vnKYGD4}nOl3mnuzaK{Aj4F+DlR|mUTrRmDn#qhzJ&&lN3j%=sQePkvC<-5}EWL?LAazSsH z{DAn+aWli)IiDOGRVhDNL~=S3-+ohDFn!CGL*4VL<9vK{Re;*B#W=avz~arMj$`8@ zHO3n>wyDuH2@l^^zTCjmr&~L8=ym-%&l@h>=Um-LB}4Fe#%3z2^7>!A;KQpNeDjPw zrb#O^p^Fzs9gGYzK^02z2v#H(XL+li5r*H&E0jWqo5FT)Slp^?2nv?c;>BENuKObG zMmtWo(L%HPm*4{wEyAXSX@%5U{xO?fDNQk}{qSMjAFAo4%f5$6k#8UvoZN;%hE|jM zEe#W3hqX}xpfEogt($VzUi=E^;>zP8T*3QCPYt;{RsQrB;@7G@fw$>jXC9wj_kWLS zelCtyTNY?zql~HkIo7;?w5Y<5~=cHc%uv;(`i_x`Zo*&kj< zF~7}HlyZj zO~rSVq617&3{ZSyz%m-PFM({Yxo4u9MA?7^BkslYy^g$XHTi31PV>fip^c;e8YA80 zS);cgbVnV4gM0%D2<$Zfc!S?hQf59}lRuVVZQ8hvEpMxtOO>+@-aULH1g4w0X=qc6QqUfG**+@71#nvHuW$3AVK=pW zV1ioX#~M_1-2-<6;k%cnVDnS&Q7hHpWmXxG4(!$+i#1I0Z^h{J=y6UbaL(+^X)mvwuqJW}a`*Q${xRl|vU!d)G1NEdXe8 z5p6u*=sK@t|BHsMSm?8fvtduYu2@*?WFB)4Jn5i#RwRx`-fEvtxV)xTWCXa*nafs= zN*~uQm?T%M=@l7?wj2B`vV7MY8}*DKXV3%Wj2on=Cnu+LTSr{j93w(s)qLoagM~fQ zrl?Tb!b29ne?wnudsf#{m0n(1ewrr7MHIElRw zQm7Il!Qmkh=({Z`BXGF+9HNdyGs$1ur5& zm+~{)Un83WOFbAGIO}f=Jv+C;{Kr3mke{1P`)33`+^W4De$DD_Yb<*?hm?pc!$Ii+ z<4sCFu-XM_;@+nxYY9J02dJsyu;kFyiRo!fe0+R$QBmX*9?J1$gWWf1Yo4Yi8V-&2 zc%{-nZ3Ynr9nGViyMXYZZObG2kSmM=cWd>xXKRH!3c1H?St#C zAE7+`Mn*PS;P80-*e(zQ2MZPS($65h^Ci%~VuC@>0u6dn5)ah+f2LjG0Mqvar64il zQ0_B>efsiP8x-P8dY);~7AtBNi4RJm|9O&2B#=QAw z5jjN(XPm~SC+h9f&fFNo;rjf;C%KR32yk(5aMVeK|7Fyg#kpA%rgZ|*m)rLd5V9M` zpJsz_R^4(ixdIX(Z!=zuHKCnuPuvO4B&=9XBp7BKyaW($X%`GEPk$>4o@ST-t07fx zYKT@$wcV$lpBhrEq>8mC=`GEBAFC%KmIf22B8hviiHIg8lWq@}SqHJ7_5se_By9@) z2IbyUa{u=D--BzF+sXJe=jmu)La|{6{|0C;OcH4~@3eAmafr0`$X3cc<$c8XD$0{0=iP^#31}rLa%_ z=~=k*t5;v%XLCQTLj(q3(V~JF@>T#6z@$5h|Bm@qeQ1PLI~U7dD_oS3S%LqJ5y;qW zg~7gC#R1Y8z)X#S-h5D>6+O7f*q+%|6);2rH}$4L-g&W%g4+#CceqA6Qb^jtVaZ1c zd;dqHIk*s`6)Xhd{C}>V7^HG&=$gil#{)f?lCfd;8&j=yg9QloKH9|EF$XnsT?>{_lzbJih1U1?TL6U)^#1s!!Q^EaJD{Q4cSn_Gw>M?KvaMyTW zf}AiRbh~2VE?Iz^V}?CfZJgV2v=3(vC8aill702|R{^Y=uUSwUTp0Q3d+PDtAn{bK<JH(!5_9)_4DGj%6-53y|u?w><%fAh{nMxsdLJx*;6+1V@ zqzsf~$^}iVFmggF*_(6`*1141Bmj8kA3N%Ra9U&p`LU031KCe#Iw;;4@>e?O1h$e< zJOp6X?~|e>{d&}imC(MTPyJ5Mb0U4}lCe5nv>AETCEg8NAs%Vp3`8G(DojFrUns`) ztCnzTn0-LwM5S!GsiqZP6O2CN66p3Z)|4!jcEFtv)~J7%gWt^Bns^zVK(zm#*9!5> zpQJnfUh-DyH6Ry_Ueb28jhT6t%K;+#>-poFCQ9zeU7}A?;dWIFW;HhGD7C6!in!NS zZh7Ka<7Gp*kC*ajal&Bba;rf}pW~y`)uSV)%Xj(zkrZO1<9Qr7;VK>1qfXWe-+W|( z_|3+bTWflYKJhAj>)m)t8Jh9;XFACT@O=Q)^FKnA8m;2+sp&-mk%N^^eT-Wft1)Jj z+1_WAAw-nWKiua`$1r1#SOSyHNY%(b=A!Y&puy(1uyDho*h>R{n8PunG-g%gGtmn=joX|A2bkB@rc;9hMLt=$A4RpF+`de(7uo3Te=!LjGY9hz zF1S!|p(Yt_mI0ddufd7-v|G@l)ao-HUaui90#OG92H4s!P3$HCnA2>NtSZHeh$NzC zy!<7G(lR?dgIEpJPK^8QiJwWCSoZ%g_kVBv6yR3+&)t7sG+x3>=RHaKvwICyX5nEffc_?X$6JkQNYg9E* z6uzzuGDfFSPC4MOwx7KU)HtZQnT#h*!Pah86C^k!ND|y#gEK&IXRyKD z_3-GwO`zi4tEZB(n}6^8>`zz?moEdxF0x`w_bj> zi`b>|nxDw7yQ`MEt40i`^P}t^9_~(SKJBa)Cl8rIAUwD!%5w>RJn;@0h~mt+V2_s1 zh=vpNsIyK;=J{I1Df&ZyW51761SSqLVDrW20byr2`GH#_sVLj%AzY1B1-G;ICt43t z)+wdeu69n--956MAyd?yeP8joy1F`bS`*k_+eoS`^OHwhJd;+0^*eI840;*U{b69- zw2{uhtXb~FK}AQcE^mqyei!LzLa%mb>RCUMO5nTVZ&6(D;O?}!&QeWn`Aw_&z%+^$ zpM4!IulFc-WfjCi_?g^(Qs!t@biK|-9n&9L?f**w#NyafYwu}6aFd9yv>#6afn%c1 zG^?GbaNG1XK4><0gz#TEWmk948@bkO;f@M#MqOquoS+}HeOmv{VvSsoL|WMx6L$zT zo2emT5Pn~_sHxq|J%rwTnbSi^v&~tgrhncs z0tAoV=JALMQr6WE%^`ej%IEkaoG%lW4xy;gV}FS>Y=T)(*^XKX_LIbB@Nn}D_JtbZ zj;?M!^}1#Gi{DG=`hz7ATyjBu9VY(0x?H73bM%ugl`F}vvBk>jk$5)dZ?k>TfQ`R8 zo4dWOS?*#Xb<}fx;$ROv+zly?`=?wR_$SW;Ci?FiC9@ZW z-~IEx(A*d#j`q)>-=lHGCd0DR0GO*$;>q?$DlSDGT_0X>u zZXMpX3;#xMoe4g;%{6AhIC7K(*Cdz*g!e4p9J-pk-DVYxdgXsz#o4jjNZJB#%>?$G zesUV{JTuhF?ce_5p+ngpo6@aq7ujp!%g{FM&dA-_%P_j-(vw{`q`k?uQaVp2St1$V z#AJ@jpj6nN7_qR}pYol27N=%W&AF8pLBE(02;%-YCdf)NuB2^eVU=^BEn$%TrFpjB zU6)=1K0Byj7jqMA@P1)+_nQ&q182#9UmZ@pjC}9zsn;_o7<{H^X#w|6`r`0th8` zuFOR5TGyjarm>|oXhRLXGj*e3gH$K7@c=nDfYY?TIoyc)p|TP+8Yog65|;eA>R|l(=|w zZgl8Bd}pe}d~JM99E#xBPkeCc^qBI?nBx;O&7e9(v^Gbp66U-Xg*|q8>TP_5t-=Zg zM}tGwxO>PQqekS5#8KYoynaZg@7MVry}bn1A)uX&oW<~b3CJTUFyriH>FpjquQ3qI z$C$^%kEs#Z{~ki_sz9@3^-*J&q?S^~&R=Q#zD*Qu zD7>Lm@CR7!;0h197gqR%iUarnr+9}G(Az67SEt?O{eFS^mU`R) z%pV)z?0X0h1$OT3QJZ>O%AKdySxKx*_(^}O-mYevW{&*|S5u3L*eMZlW&%pP;5}u^ zYtujrjDM$o_nVO`Bc(597i*}gI8RdNu5lgP?fK=MS6qZ9HVjjoRg!0Q z5?1dj(B>wLXsoIEqfb+tYR%n1e=s)Bn6*(^>Ad;%V6%E|Wim~Vjr-`j9u{`>5T z4r1s#(dn8W4&|LGukTu!F6)Ka`f0?Mkf0 zlI|w^i|K(a75#Q2fl=n>=4KfbA1f~Zu`c+dGQ1QG)h;UR#*I~T?46<9ou<}&*J`{h z2Y_iPj>_Po5N(8GJ)HiOb7sfV3|%1vbYdd#@$kMfs)ye+ve|mU3VB2m1W=#%C-!_o zHA~Hxk|yH1y3<`hqodap_fd6VtbljYt8(b7>gu6$l$sVLZ*`ko9n9r6Q8bm_v`=LL z9n64(jOHy*YinOI$TId8Tz*pHaR~>YbHe*a;A#0SOf80+a6cc%+fbR9d=`&MXbotoOV{}%x?vh zJzv-eP-`2#cPLcNdUSBVfNUHhWSUX)t;xi{_{y+Ys9@T95A270EZv`{U^fxb9*?js zEM$4JO(emyBp1=hDAYO4aG?wbO2f4B2;9=h$;hTmsaLG3h>c&ls~6cgI_jcf)BEdn zefhoT|K4bfnd(%J3_crjad81T42m}6c>k_+m+Vg9O%_bM2zhaLZR!>@RKopWbyiMC zw2fBvt@QfqH&SdExt_ZQYOC(_r#9#2brjZJGZ|Fz?VbM2%u731oMG~;ZOV2H$QhC+L*`7hurlxt)?9PLPTR5)7cPWe+CU$Ru;7nmf6X9JqAC$1kUAez+RNZS{PRu zKK7YJR%fJ|yhE*XMnt2WtZE&VE@UR&7b#r^oszZnD_U{{;Yn3i7%mI887O(G32p%# zCKHYL`E=XTADc8|wLKzU+djFR7%%y|<@m*`54fcfv5555fV5w+>m~T(iT&%ONL;m6 z4mOpaV)T!%UX0`3dCabn>hss`C7&an{FfrErtjMKGyGF2sVo-VJ7G{~59ei&(e$bY zt22FL>~H9@Sj5KFAFGrCD&ad?s%bOPJD?+)jSZDqKCHbp~|0os3idF)Qm^iNfEDOy5jaABUCQDAg zDMzq?!oX$mdw*zt4Y-6Ds0)??heKo@z=5oZDYym5g%7eOOoVXSY_`ucisI zwHf^;g%)ez7uN4-6m058J@IuiZbv4WN(z|>>-eEa# zQHMH?y-XG7z0$cDFW1-4#CaUnLs@SI;XL;>!s0LIVHqpGF{Dyva?rB#6TjHoUauE` zOx0j0L3kiB_%!rgv~tGy|D6Ao4N#~unS^^GA7F$r_|-(O%Qo;yn_ z1mF2$qBBQ$hx|7f7lw}F!~|6WQoy)#30N=rh^O}K1NHD|_V6Vf{hYr%%sl>i zI%uRn9k;jzAH{$@KZuelcfO+k0B2koPztZ5tdgTQ<7f4C*jzkZd<;CPAFviqI)VY4 zc2$z|s$N1Q4tOICDH2u{f>p-d+c>u59zD-o->Ss~mUf7^IV%T;DcPz3dp&BEG{k6K zpwNgC_28>tTpjN9+58nWXE)KN4!sJ@%o>E0{OqJM2Nki7B!JG;1l{T&4~4S&*6xSe zyE@{rQWk)5VY7~h))D-t2l^@L0*?^LA$Dhe-~P2PafSHlBR^R$wixL>~!N2A2Vl?dh z10>?##E|~&up!LaMZDgyGaeS2dSPPX7R+GtF>}5`l!zlLHG(xs1X(hGjTcUJG;<-F zGB@@b{J~1N_irArwNoEnv#5{DRQklPF#~-pYbAK9=<6{F_b+Oje-c`mFj064pdd2? zVW(djf#ruqSd8US*w`LF+f=V^+3hOq<#6Rf3NoBP}9(16d2uwxQLB2 z#By2Mt=ULi8lloJ4IjTFi8IwgG-u+6ml4mLC=;!Z&mt8DQ#=OAQyU(4Z?_+$Cmk9l z(lFalljsY)y4Bd*q5haWenE6U@{G4aEnJfypf?}jUi0oT z=jB4@WNK%dlUeN1M4B;O2_4Nzg7kT6*bN*2cO2cavVO0(;iYPw(RsEb&&R-G->svU zHH~lMCjYmOn6U7|URB%f+VD&*1{?sZt4hK1{#@mHk-~_^qUjZ0d&MDJ4lV$7+WEZ? z4sXg=wr5xVq0X#SWs*-1C85(S(ER3walP=FT};Pm<15OkT)40;zl*>{E)7Xi(%=MY z0i%We;1J16C?H}(`CylzFTpgSnF34$vOIB>14!;tSPTV=TTq^9w#pw4R(s`sg~&Tm zs{R!gdp|Aqt9gB$q^s4VOhfU4I8$t?ON=Rz8hxN4D|N0Z|A%QB{bw{h^I)4WFM&%~#bRTXIlFRVljGhqYN zvDX6oA!zg{QWgYy!dE1#AuFXJgRa&qwdt*)o^Mg=0Nx<&F$3+*A5^%SmjP%XqQN1R zRSmhy8l-_V6h~b#{nf%ys)*9&0t+-+R7_Z47Htp=Hu&cJipSi<#5nk^KwZF?V!>*1 z_m;1S^$JI@#~b5yFjR>+(PvqVf;oX3gdzu7!~sc5#KCw_4ftD($O?-_g09d_<)(;a zs+4ik|A|ojo1{M_#UePef2+mUI3tg9hsLNN&mPL3Ii``4<|p!?pOn4L;`s|2t4aT2)6jKy^$s*EPp%AiT;X`sK8g zm#=JY?NBn2mvge0v0LJlv^il%si2G;+si9!ft5#pM>VMH(UZUQu}SvkSr?^e+zq(?@787WM=i?SsNVlB_Z}7W zk4j6etJwy(yGVN2P@s#d2^WIESmJ6Ov{6OtK>^gS#f@zK?7gS|z4NDI9Q1E@c%`+DWD0Un&k9y4Fu~aW2N5zapv3-8pX9FlJ{ttwm6;U+)&-6z9f9Sdl z1AJRI8=hKt(XBGM@34q*xju@Igo~_jC;ATaZvBJlSD&6!dw6(U9&-_oY|QqTo`~Cc z{7F5&H^-0ZyH%w(3vm8AdVym-qpi?FAiUzGIu7Bor}n;}9<`#8Hh%!EEC0-22*t$w zv2_raDy=fVRO=x-rGMdC_wQ|#ybV=+vey zRI{n02jB3hdRR$GR8y+X5he$et(@cX;cA5*o+U;uub|K!BeYEMoIVp+t~RV(UV3~q z`h;_p)6R$&?5hY!!bUXhsYOhj@xSg6tfcjB9%oM-LUe`U3?BXasbcEw{j7&LhF4Zr zLZ)=|!XhNk^Zrv-2eXdw@ar1NU%Er}@U#=yd6K%PFVz|#&b$UKHO1f7z6l75($Jk$ zM1<$P8tkae`kVhb0O7Ubf5o=Kp;xwTeLXTV61G>~E-8MR5Qhr_f$~1E*KYleZ~0c; zkGkygqpF(vu;FaEqOOTKN0$6Uida4lKjQoE(NIL5mM#Y1Dg8SAK7E6ND== z%k$TJ>YL-aAcKSx1-~AJ(36uB!A!fG!>{6c)6-pDT~(6{iGExI5}xmDSwo{v5+Db) z)?Gc@kp=^;%9jEU0dH31g<0zQ&rdgp7~_0(gmm@vbf&leviSdF8F(n4vb%~{sy0|2 zuk$!L4PNxszR9@v==w7oLG9F{8>_f5F|>JI1}US8rm}7rFLZ3Zn69X-9RC;fm(L={ z!}Iohhlig(iPiz#&h=QIw6%5b@a`uUKZZ*SlbDcEU~RuC`?|v82J_~?c{^zZ0pRYq z?W$FMGddd=4=*e#D(VMT_vH<$)4$Llzt3^;#T`qD9iJVI5^z`~TuUsfJ8>yz5;G5I#C1UXDGtQpA zCEK0}>p!!RKHHsd zTJ(IyS!y5ZaKm*v{duJ{)UI5TwoKAh`A~0SA|ItaT92%&)tVbifvrG`WP}wjR6%kr zoQGF1e})uqHz*XZ<$3sB|4y4K-Y!&d9M~FewAIuwxm(TDcX0*uUDgDR8TG9QRnm9nH5aWRA@tet$fqVn&UX5M%^V2lmQzIBs7=5jURT8Z)e&i z4g4>r5FG8N9NpdYj}QsZvEHuMGb|_o?~A3S99mR;%jO$I){$Qk)ix%b7dVR^V;v-Q z3hFkeJ4-tr$hjXtm=gG=VVCQyCz*Nj1M>GFuhaZynwLqJ@3(}0Cv<-@Zt>FGwN=K$ zh&{wLm+3}2$CD`@x(&_2aA2s@O+tLfDqAq%$!j8G z`3HRC{^o2K*V#|%zFUe$a<5vF<8C^j;{Fs1nn^Eu+uVNFjM$&6o)6E+)0~d;-#70r z3fL|BHL+Elvw&mg>J0>Mp!MU-<>f#EyQ!B6A5XcTv=->^u>-8Ft-DkG22xr32<|Ef zCh)Zl!XFrz2blpbaA5lJ-@@^_)nQ2=m_$d4|6Hp7C$An5T^<}zW-lg}jS@e@;&;@v zS9UD*bS8zUE%$f0Ud5E6nEnw%s1a~m6zJo1zfNE71C@Bay&=X1U?-cT#eNX^46ry5 zyo)&(O~3Va7tjEEf@H&c#Ro*q^Zhs{UR zy%C6R?-r!Q5%$wf&Qpn67+~F8>eBr8rX9w}1nZpjKm^oGHD4=VTcYq=6-P|t%Ppi; zZQ_L&^(O|7!I+SMO%7wqfbEC?#TaUog|)SOmtdiLwh5_+2`M&XTs~+4s>7T0_2k9&xm=MmIC zVhc(TF;#C0cVfgIpGh8_O$yilmO?{fN7ggvyiwXlv-}$m#4c8zpQ`{Q*s|7zxon3 z_RoK~)a?lmsHIF|Q5&c$!E#$KN}cf9ucO8AxRjplR%sT(TE7AehcY{yo%&=Sy%re4P%rym?4&T zWR{Y%y+s}hsA4X*c#F<5gKMC&dii+OZmgi+_H@@S<<~9b7qZKD>cC zq%a<^#uD&OA(9f|J*b_XUl0I%og8G#E02TCwN3Nz9IcsZ(goC6&@tX}HlFLTf%}n_ zdsRHB?G-GSM^(YQqT9)Dow^nuYqD*xxlKhOL=>+AoDBkRbDb6}nVXMm?|1b1FZPur z<%>TZ6FlW!27_Z5&ex?L*WKGE82DoV?wHH+#SsNCfGvvLW2|!V<&jnvTr}>{N1lCZA`DmWs zW4+}G1}c?O1Ts`iJ4_9>t62|d5R zdd0BuX!ZLZ^~oN|DrVu`MTR7&HW2vz%y@`Z&)3y!e#v$Iu9@d$6jA=TTdtc8k>$qv zI<^@iEEfM9njs9d51~mzmAvCan1ArhCrL3!B6(4^+W4mZ;v`Wwz}bIpZl;VMbiPr8 zl7SYJA_ZE&r2cQvk(sj97Rp!eSVUzcLEsu{Q7Ir8C=8TbIiX!4YCBhHulX{xsserw zjk8bZir@}%DPqVGe-5KMT>4H{9=mUCTXt>oA%dvx!oCbWi9mVWoqdGR*t*)8A_%;M zegR1)Vn9tjsT_xF4YzEs*J`n>o3RYHYjF2~-CDSen~3Xv%B+O|e>3L%{b_kY+nw*b zA;Q4-*~kcwoC#d+T%u4-lF312r$$20E_%!i)PX(c=VAvj9%#b+7RpdH z4f&4niE4Sr7D(>#PjR^pcM`gO&J2;6lw*a5N6TK2X8m< zzJt+;#dBY%`}V{V4o@J=7wkHs+5Apf0OmlFh0RV9BxUJ+jrv{9vAgk=`)2~!=R7Gn z6l$;pzZlpgBh1h`5b6WJwbkFNms4YRh$Onc zM)8~#{+8cK^)h_Z__~YyOGikOl?6NgDltC(wCk$u*bs}vj?(Tb)x~N9Aflh~BdRFs zDE(a}{e&i9=ECS(L`y$OI-dbtGKdgFEfZ26osA-qDGisVWPJ4bXjBld14c`O|Ir6eMs;&tK;{S^XyY-E~uNcbu(!p={vMRe<{Dz)MyfmvN%O z&f14u5_qROYWmuTG_G9h5gv(xkI4fUAs>LAGbl9N6DH?}C9aZBeS!B1&l~hL&H-=r z>MVImZ)Wt`5|%K7Ix*-C5DcrTf;_oOB3<3ycDpatx1y@0-&1CRof7tro*s{WOXgxi z6zaX3Nc&)=XJJip&;+B6S*#gSFeKC-o3nykJV6f_PkW(yjAo5WFFbyj$sIKc1W%%C z-*H|dedSP=OXpRaU0Z=Z;8s3?SnlhL_M41Yl8K@}q%zYt-@@()Yd$mfn|>O377p=? z)JK#fOvUwe5%Ch|0>7UIb_R~)BaG<7nZ``n2G;(4o?V{D(=+sU7j_S~^{<@SR=IS@ zb=IhBr*|QMn)M9g-bzb@hdH*8P?jL{L8ulFF#45+Pn7bGz-Q;bkwm!<4=Yct?8h9& zH_GnQfAmaZ;>$}|QTqwkd+#OezIdUc7xl&qYGZKq1&l{g^izO>C(JtqqvRTsLoRgA zGj|+(8OHbc8tlh4>&}DYx$jp8yB7cB_mh9e|KONbN;T2MnVh2;cmOkiU$$RtnvU~N zG{S!M+%9u;V5k4v`i~@iEb2?=YuZfF|IoJG(SASFZewN%-5HHTJS?x-wVNCDBVqz7MvFWh93ee{7 zOrLyZ~WAQ9r_4m!$|=#bzSLr*ecf zJ?!K>+Fn01`kP~zwYW?OLt6+a&#!f@g??4KVju~e9AYbOF&qij1h+8-tn7G?`er{) zlXT)mUj=Si2Na6dj*^L?7+*S1%K<3)9>V<@(|Yg;a|?#bCYap9&i2!L~oPJ!e~j4KtO%_y0%XUSp$v$kIc?%O|m zUYNArEHR{CJ0PSJRg(Cbr=ulo%up`*`dRbCc>{z!Q|vEj&mgyC|ZH zegTcgX|XZxPc=z&*S#mh+xv6PhFj>Io`TRz@kYf(N;iW#avfW;eb7%WvY4?OU#Xx9 zpt@h~K#zT`XR$?9{^-Api~d*+G^3S;1BEIVsVtEwz6DF$0;_VXiVJJjK&)V;m7A=U zlAPzdqxG!6LSZvihlUENFU+^OyI)^ zUU6MjdLjS%KGl_=VC>~(aa?C#B*%C8feM~MD8fV)U48o4hF6_+Ok=@$T0ADvKgI6M z2e*xq$3xt?Z;~disY)I@qU)Gt)5HNwTGP%tF~M?{XNb<3=7QHN-=h$N;^9?bU=8Wd zKHJq6Z$q^3bX)Q1sFMXIR{mbcCzftb&^qh`&u68z)ER`zXe>iy3DrFP=J_PP zwo&wF(W^1j~QC>6DS@Y2Vaulbe~! zBk4~kB1Z*T>>b4HP-PN&SW4X_dKyWEDuQJUll=S%TCm4H*2})L-VV*>w`arA_RI?A z+dQEVzg1!AB-r>DTVXuey1-UHuo%rUHHOzuWW_cd3^B}De1D7iuo5-5JYGnTbU`3XV?2ge zJuH%%n~_}W71(gBc&zCg6rI747%=x&fY077PDN|!F7;i9B2AWd+0k2ueT-EsJ&Opu zTx|uj9DG*&;K=;xAe8IzX>6Lxr}ts*-~EE5svLFbz0I^ycT~v9&m-(pnc^8ue$w1y zG1`8#=a#a#i>EHbA!t6qzz*(#tHwl7)4Mo$75f#^t#$11SY7vEg0bR4S9!fC1d=04 zn8TZQvIqry;wPPW!b;va{z#2W=(Q!eAEWTWLjt!qD=#CA0dXYS%0S8Y)D`g=ec9gc zvyFcr$gPWE87T1BQ;7JC3QJ@%skP`q8rQHOX2*HU&V;3INp|DtG?<+P(kvKdHXY>V z(c_lN;hLO*ehZ_`_!q=RGj7nd-5&wA>OgXuD^Z47CRQtd(je+4Xc@^lXwOLW3sP1? zIwEov#>RcklQ{B$OWl<3;inz8c)U(ZY3i0GgwI;b5LMO%`Pl6ZBe<=G zSyW!#e^=YRDSd~F`0jBGg_bEe&!~HI)2^eU@!sWTL}+DEbM15CqxXv>e2%MKK@7~B zpSMdD5KA_{RkZr&da5ODt?5SkeaRR3WA*4(%hzAM(#M}+nk8Wh94%YdFC;%5smSne zC)uC_Bvi6Q90{>k90?h%aKy9Vr@b;=R=o&({@_n7|08%@CDpM2e)n{Kn^Mv~$Dg(a3E+^E=tt~ljpYfpZjkE9> z+v<%frrC}l6I^UC)kQuzgH*7Kd{LU<1~xklI@FFvyuwlz-@ijzOUQ3!^on?62U~>i z-=LX8A^1~wZ)E6D)eN6|2j0yqJ!8dv5CN}{Bq)$T*47g!J&Crm!)*4c^V=$}8jup0 zJSmd%$pZdeFqk3R-uygYk;f$p*SVp8QJU5(J)ZdhPeh1%bDz|}sl;=ht}2FvuQ#PL zj*k>&MnzcTsDGaU`=%@Fu1D1UEhJ|vN)&m)&Pjs6#6N00G7$F6o&gc1j0LTVPS~y| zOSBOEG)y$mCX;xj#5_>1n3cx?0+(?zt)e=J(;ZzAXS2x13Sh||ohSR{fubYRb>Bs; z9*_bk5@V?CxK~|*>9NfhScN3J@z#4=q}1ZV!3FyQ+jG1RT^UcG#Nqb==4Q&Bc)7+y zw*)>Fa)6t0-?ahJ96=^q(6{ivDeJ=a(|SBFHl$`&I2!O#H{_jOb`MRGWv(KjVg(<7 z-NG(jE)u;>tPOY_2;Q!)&jRwSlsX_2dHROeYH~py-GpNJVYZ*Nsyzq-H`E{lw*>Q< zd#c=sDn=*FzD1A9?5G5k{j73Ii<$=3jwrpT4iws-OQy{&ttf@**z9a*pito8q(VZZ ze^9}RYXX=6+cCZKy3pyiFqUM9C2ijFMV#*j&PKIR-me;BI;Ryby{^r$pOBR~9K@k7 zUA&v_{Ne+GZf@E4=+n}&>*#||rh|iVnYnRUqs!lb>CSigK2NhR3@K6aJ&|xK=3Yuy zn!cD$aLF9mxIU^Q6U7aJ*K_%*TSGiNP3M8atihEI*_9Fs$`k6k@-02zh#<0xBrXGr zoNuoV)L<++HXqdOiqOzvWEQs-V|2uvN(! zkE0Q!+^A9%N_`}G2l%JbbGo5Jw9SbhdZDHRuXC9@OteCzt2p9#KrrH?_B<1 ziv~Wrc&*$y;T(CFUsqi%y%v>jGORyZuP$8J{Jx*|<4XB;kg=v9HE$WrjptcEX2__E(u&@K2)ESFFI_ua?1c=Jun??swbqb`zhMIFKl@3M#apZ;+_B)W80ywXFZ zCnGyc@gj3z1T7nl4ly}TmL6p#jNGtQs6q3#gzR{{{>ZIbMjCP7b(aOnWvd67LUQgF zk-O!r)nrk*GkCl~<8SI0^P6C8d^&wCA}AWxO)70SZMff_H4=1VR9YG={5bO#>aQ2r z??u-Bc)w3g5Tdt4xf^KGf9{I@+MhXCSzh0}>FX=6>;1kG=5srRz!$^r@v&&JP<-M8 zT*KV%&Pa3*+{4U*XDO36|6Q|%10GV0Lq$?OXnc7fnkAvw)1Iu8yA#a=mbz)yz8!h` zlEE$rlDK^!y%A%7>h)sSayXK*6V%D9jy*BGEzY0co762H)JK+O>HmVyW6mQu>6-6@ z1>Menx-iS@L8e|&6!e{Y-x!D0V`N2E(C=bC6AF31K zt3n5Y&rjneBy?cBE*Ik+4;F}0&8er9=F|4CD_Lx=w0!f1G?U;5cox>o z1~q^vlK-DVRzdTm6wdXh4{)(stXYv!-4l#74rbo%WD9*-J}qXPWxz$UpiA-u1b5JzyXjWSVz>_`{;gVL(E z2Kx31ksSt39#A$fF0*Jgvr~sn) zgE$lc98A4F4$R)z@# z9lzGFre6qOCT`)U-9?IVD@dXcdcTsAzx8{8+X@xZhHbyGJH(pw8d0SAK?~eSPylSq zFmTM1(V%1+1|nidO`2lyX^{qXS!+xf;0OnWfCuTezFKcguwTxd7QQ_6%T=jDt14#g zeTE^ycXTkC(8_)ClC>oAIYZeFrD*;-i|Pt-t)_Tn6BvB6FQa`8`9t2t|0TS4@ZY<7 z6r^+JP(H(deuMD-7h<`t0b*u~>Jbz9tczT_x$+&n7*oPQKAUhq0ldT3mZM38d^jic7yS4tLc10Vg9% z>Hfx{a+==a@#Bn$34+us9u1AsbXFT2kD*<;@~y$#(;maVF2LMIYhhdH%#7I7<2tg@ zZ}#$*rir3>>!7`8t`M9v09lWj86>jx^=YI*st)UzSEjm}`}?BO#7WWPPH(N&v-|kY zEM2Lj|38&~_q2?R!RyW-zaQf1kM+TE%J~F9iftf`#40Q#J0wN=tw5%jCtGGaMD9}6 z!{*|+-=tw{(mpK#jz>H8uB3x}2`M5?$7DH?cw&$Akpbw`sBTlNU*FEZ zp17>_)~(@on5_|suo%bdI9mG_205C;>C!xxF8Kt$?^jqPe2ukw2k6fUHCl4N@;9~h zHvIVA!9>H%a6^rOOQ(sztht4}KV%Y@#-Y@9vD(9UhJ2nA)Wm$!Sf-NYHGmd^t7$Wu zHcUlwyvM_5?~8p35?G(+Lhle5|xEyw*(asY-8MxsY58yE)AvbG!pU?9arfnYkn}2=t$P@$j>?b8eI+Q{1M=O2bV|WnMF{ z8Xh3f(OFodd+L4oWrY*Cy?} z+8}PUHigw?m_Gufhw<9_Q%v}`jv@~rT_GrwZ|ZWr%>=*jDCaYOpRGTlGmLB0E`x+! zPU2@7r3&@OVJL{Q-uucOJ7OTmVJhtqdrTz7P%V})CUU)maz1O1*^I7@KG37*P7bs+ z$9l95wGv;idKva$v5iE`IYErzD^lcdCPE!UnjEsuo$BTO*~P{_+Ts0Qo0g&c{~tE3 zGEk0Z3X?d+iHU!uxsR#kv$5-`fDB+-9hiv!?WMMr2g9)yCNf8USpjB#hR z1al4YBUQEd`1WT={$PE&r110TCBIMkJ!rl_peHz(x>p$YHkS@*Q6RA(8h0i(>b6d7 zK6thE%_+aOF-1I}=I{7X`MBEPVn{+`%VQ*P=1*u3C6+P!!Ph6%yd z{&g^9j_Z3Rw%|ik6DEDrjFh!Rb&npc;qzY3OOCazQ@cNrv!wXHx&d@4$ot2Mq;&(+a~NI;eam86c9Sf25uE#c%7OEWGZ)WWEcgcvu@;=#5rcvX`I*vg zv*smzwMQdp#xtd%ZtmiQcL8}whN(D0fE(V~nP@)_omHD9okFvUl>62=aHv-NAvAZX zq>n+Hr0H;PT3FY^Lx$4m7W>*;$}H?qqCZD@G+FLiYh+VdPFQb)Kg!jGS*d&rt5`?T z3E={wDM^f}ClDsBZHI8%qH`ZMS#^iWOl4mtL_YujL9;9v|l zy*-1yEFe9CEs%7dQna&HM`AU}c*d7i#e$>dkDR6G8#i`K(>F0Oe3Y{TiN=%K6k@wH zT2%L}PJ&51>!}ncz{b&;#UrcAro6IgQz7%oHP=ycXJrI@S<~a;UgL_}CM`L-u>576= zLPDvjGhAW>)E~bFZT!B6@dt*m3ia{r%HCT#GbCF=Ds;)6y?xNjtu1g;{}V!AiFR5G zcp3b-v*%^!omoE9>5viD8T?jJ*Txm(BqD|)%z|ji?3UCBrd1k#fiEkN~D1CDt= zIXQiM<^a)OHqPJn>BOQjE|gZ()G*#L>Wd(+ikFI-BdMvwQ~Y=-w$UbPq$7lw4S$X``x(f1(w|x^778X{~ zQe#06d~J>sIc|85g_+48xtG_>LzzU{`F$Sap1kcH+BwznUl|#hrlWhG?n;cRYVkKt z!ETAuYU?Y2S1k%kyAM+#u6UCkAbSf)>w2T&^c8GlX2!XWsV;VOwO?n1=GdSi8%Hwt}@?z*upY;slpMaS85PinlrUibIPOE70NuhZJ`$ z1a}DT@}~RjbN;}4J|`cNHCdT8GtYfJo=vRCJ&3ZdGvSo8d}dJ$(7~gsvg%cIU%EE2 zlqEF9v+)wihi-m`%oRe;WAgGoE};FwlOBj=Z%&vs@BNm((IF~H6xUq z`(uB42endEI^nucIZf!Ttqj&ww6yO`wA!O87oA?~^h?^Zw{!6%pGtZk2Q)Ev{Y=dJ zBdU@8aM-NoY{ z#{G@z-rS6EnRr9`8ik(W^`uSA{dymcIlGP*5AKo^M=TaK)4&&f#TU(OZIvhk^hpVc zk!mHoAz^1#o`^f5kDV!ir_KEseT-tfu#PgVlVXab{rON-Qn(ELy%qHR(@p-ymya2R zZ}~97}Yd89onB1tLQft18=(* zNG|u8LgKs6Lov7`tWz%MGl7^wzec-gmVZz<`so2B!bFZkkNqq+-9@&B)ALvZc;f3@ z532nYsx3N|l(x8T#mE;j?Dd(ESnMo8y6+kex5uW|0#b-tkYMLKJZeiFm31sWKLm6P6fj33@E|qRC3&?PA;y;aH#&`;<9B;KOy{2>r0aJb@ z_FWZakaHX3Uc-XlJHX4lqBb5D*nB#CPK)O8KTDp`kphb5_P*aX3Kc>fD{}S@D^&^m z?fyu52rDEF^s{Xi-32rU1v%mAVj>@@fvP$r_hobIm*ws`yKaXQG~(=>#$v4rGO97UO=D(_4?v>VC+~qg zl4-4Q#CDUnMswmX3dbQ5Q)eIn>1{aRL96L}wAHi4$?ekzRCN^LdK{gx1#cu+D4Zo> zIT_D0m0ferL-zPUGOpehu7A7YdY@~qVkIOX$)^9sV^OKu=3RFbeT;V3ze;rrtLm~8 zI!an?%AUsTyEnx>3z9BZp@`zHHj%dHM*yyf)Wuq=bh~d_8S};}7X6$*yx9nRJIy(>ZrE2w^35qiXN`Is8)4kEV8xjiXFRtTKIu1!iE7aF#OZt3Gx8RQ*njvk z!NvPcHDZIzv1;q<{EE0jFpPv7WQaKjdL|Tw1z6=;GU>npcjJy9*nq=CSQjS2Ciu7A zThs~!je;=+x$SFs&N?8z;Qe357DwpG(y{PWPA@OcwZp(`H8byy#ovfx%pWGZFPj>N zu2VgD5q0wNsZP2}n!K_n$H>X9LXZSIp15PFlTO2}AyK8Uzv-SN^Y3#R2=7lq2`E5f zG;_v*Rl6s4CY{@LmT%g5;x)UXb!~iR55t%nAo==}t@V&Zp^5{Gf%IQah_d(YECJgu z8GFbyEXx7sx?cGR!{U>r)kT<5*=p>Hbv|40>^F?gUF@DH(%#Yex41L8IY*r3+p0 zGyB4kG)18&?VV2GU=>9!+2^18W13I*hzEqltmIBk{8%%OHQgQQd_1Z?U(l} ztm;LBb_t~q*Y1%noeM>!-_}z2TYPE}j&f+#|w za&uN*yoTQ3;_Q2twIvFq0;`f%U-yv$-#7I1u>qK~0|Ttx(}EB=k5Ht-S0ErJ$xY0| zPwU;D{knPn1rf7*{_K+Ht+6E(nhS4{1aN!}g)k^Iuz;(;u-XHK5kD1+y>GP)4T3R)Cg`U0ir%W@SxO5kwd)@d={Ia8WE9k>0$nF_4}8t{+m=l$wb$ z=zSG*bdrp#J;|UQW4?E!uEy)SJ^apZI4%6pVaz;k-5|v-Z8ymj_kmDi=T?JT425ig zonS3O&XS9_)BXIM@g(chFZ)#-)+#E8{1sZ{7gNk!>{dipj;y}mhdXT-?C9K(b1%L%dxRoGoYMbroqeeP5zg<5B&5R7x8rRo zJfUCFx_7(2P*{r5c={E@NDYaih-?m!IN;#uf7>v>LjvLb#h3j;^C4(Nw4RgJ>=6Ft zS7Wp8`HumK{pua6kG3b;vWxTGWT#}4r=7xjv>ti{%`!fA2PsSZVoIF?uS0u>hbwn6 z*go3V;tAsmH4l+TQU_%8f+|(aWR2t@&F-Emv(QWpq9Z)%P|2ypx(8K|B|$>{kw9JT zD`dWaJqaez42Zh`XtD}Eo?KZCyc_;F5&LmV!?5o8s?*wmDfWO$oUpUJ25M#eT8}QL z!t+%NeO+${(TUGV51-pdt0iWnMH~Sup=fimFt>%H76y;8^Pji9FqSNx?3}app}>uR z2MA-N%Yet;~mCP?JimY#V~*iJ2kr#HG2>dg+q z>s)*Sy|8z1TS{|JolT+&<@Jgog?CtEO@8}Bv|XFz1ewqDhc`dFLsW1b6vj3 zfQ?I@@}Hr>N`F6|41W=itb5cNSdZKFJ;n9cc3>P0&1t*wOYp6ryfU&@07;R^m82(i zOq4OSf<*RK2!lv2k3PRi)-&$LzhEgqk|*Qy&RlFls3}jZX@1~$asI2jcxuytN)i{x zgyX?<|2YrtQU8vBjkAT{zxc#4sD>s8Vut1oR&H*zCk(vy^DLuBdO8LIsdAO*0%VyQ z4Wv$=WV^1<*5@&ubw}|QXqao7)K9Nl{)mo#HmTbai zui+MkGeV;kqPwI4Xnb(fF6+rrfcK{CI!_DJC$D;^PWL@MpV1*s+>1C)`mvtP9oYG_ zqu_S&+2ECU=wQPu*zq6W_TD9jGQpR87!ySQTC2t#0RDuZREN$o+*CyH@lHu;YK!e8J(+~Ij?4FbFgrBVc&~9_T+%J1c z521^bnwfKKO0awcV&b3Y78j-49(XMql8c4m6y;A4JS2uET)9XTq+Y3&Q~RFP!nU%L z_jiHmFj`|G{DU%?m9KSUkBP;DO>A(Z?ZCCBT))71apje@9Y}*r!erT zsk>$o{;6Y@7<%?G)mdC{h2@E6XD9eHYg>Q%>1*y7s?f`k)MxnZ%vJWIr`yp45p3iM zzbD19!hXZOA=u|8cOPzhU-cx`EG#wW^HwSbZty&p>HQ%3WZzc34AUlp#dq|#8EpXo z&Ys|BAya?S>0|9ySWqx{uJK-D!}mEraQb*|pJ!BL#raBK9PWR~K``xB@#u>WfgRUe z{toIVJ~?`_yWmXyk>oQ2TfSa;Jo0wL!}EQw%a(j#5uADCpEz;`eqKMXs@`hKuV5G) zJFgl1(Q0@4W?WM4cd}uj^`Bwmt-ZJ4M`II1g>h<)Z8E5XrbNM`O}6#|zlG#?<-t zZT(V!#M(d+n>O;C(|QQ(aKHcHs%P!88x9)!?o}DoL3Dchehx@A1~6p{QJsf3gH{So z@4R3iC7kbhr6hK88$_wr12!IQex9Fv9R1VbZ_r=T=TF(&c9mD9d~Sd3hKR}M)#P|8 zuOwf*-9oW#7lCc>9)2kIy>xtgW;6BDO%`X=9I48Vb<3}J$H-*pbg@}o-)NgNo4a_G zh@Qs*l`-^Zw*8N7)lW#|g5r6yoEjSN=2F(C?XgC(nec*zz}Bx&0iE;kB5F5>{LK!g zqT9gM?9Jejd){%ePi|vQ-#@iZ{3QriuPE}rVx)a>_ZW45$w>S1gUH+CxsmDoD@VY+ zd|vt`!?@&1()Bf}wp+szu3z2d zizD}smBT%5e{ntvFRXM;P};)ir1Gh_h9z(pg9S7b@sIyJo~<8V+eh|%DZG_TDj^xQ zl!oNebL-yU)27!44xNkQitSJ^0VuuWdR!e8yhR7v@VjdtJ@2;`@%=>s>6T0%f@>r} zqD$Si2eg-Z0q|lM4}+lBfks9h>8_4_&3;X^1L5iB0BPK-(>~vVaiW6dpO%qdHt!!4 zngi3T(m`lTf_*!SCUcpai(Ec#K&PIo* zX$MFCemCeuvs2IZEYFIpiAQr0n|he-NAO&+tgo@vKXF!jZ+pE3Wl##gQ36*4*nQ1s z8-;tnwLCkpe#8CHQguu%wpFQ_pfHE8axOBe{MM~L)6zqu!ZcM)`JB}gedkBVMpqzz zwU_1+T;i1W+4KOOEwR}qbA^w5|B~ilaP*Y*c80AL(g5>;y#2A|CMekIZ4y_rx9O*f z;$YLh{H2$#`HwkD!`HVTQ(@-7e$_5`_ROL9eQRr5%ojJSr*f9zBq7#-1gBdklRTO@ zX#lJ1{RcX5Ijvs$g172BP-Xqc1<~6%36SP}uCw|=`yaM9ca(;lHR3UygiXuYRa@nNH2H&oEyh=G8b<5y7=faF;-B|BhMvqt#nic@L;s|p zb5eIG)4mv_gFXDDkp-6yrNYYWu9@_zv_Ryh_%5VD{%d|1zqqaEE(=MfeeNVHE04_Q z=qhOf*dReQ8WcNMEjn9SkG8N_xIZayK&jd*q3!55n(O^B&2P95GJ#*xjX#(syJyRj z@W%UauJ*Q)dadU9AjrPAO>6@bzo(w;swTU~#RFpppon2**~YT>S_~c!ufgG~@p(pq z=D6ZcnBC@YI0%U)Ph$s}1g?zq`Ku&){`8;LD?H7cA@SGx%m%CJ7#;onv5&xDA5=`Dc+9iuB)dJSdB8SXV=lmK+sto6sk;7tzdjV03tzNSR}!d4er zn&HK~-N=>No_mT9?ha_mDdl^pb9a~bJqMwH1X?N!SfYK__12Q;z^e=Xi@A$VF`6uX zFC?GlqZtsXjaA8OD(hNM7C&^(SlX8W;1zn^m(mgY-F-B~`{M!+y}SJ&%|wLG)g#VLD~# zJpq=LzHei{`QU0m)ziZ41MkCHSQ|q41dvi8t?jb&qGx6BoK4o9p7NC=Q56fu2EGV( zp@-G&Zuj@UH!v}=_hDeXC5qT{A~{s~3nB{YF?Vy51N}mGzMX7U%-3kbAD`l&DFi9>SUhNJ8l6NUFvZ)9X-^yO8(5pJ9I35Gz)A$MW# zKRWN8?5c=(G_p#gn3?YWI5RPxCU58eT30{jrxm@23PA}(#Cg+K-$K5MZzTxa#Y^qt z=w_sIxqKF8|5{!yT4skMqoh0#vC{;x@(BoF#wBv-7P0LX#3*Drt32)NsH$-;3zqAz z`i4ec@3|fCyC(Sb76g2Kwtc{|7qAJY{iy#66f2&dailo&R0leXbbiD|gzY{eMIO)0b6gD^!!iqQSgVkuVVwxPyB!HM$ z?P__8VVmART?oBVFPGMtxm3ll{Nh<+Ev}tOc6@ub1h|hE*m`_6_#;nVPEBY7N3dZf z5*`Be6dWEK+0S0_4TqncXn9qc+Rbf;w6sDoaF_d86P*$NP*rgWbEvsQgBB9s6FHC$ zP=3)9-(U{x?P0xj=~GQdud-cyErZb>0l)H6yhI$C^Hs*K%@aQsWRPFyshhs?Tob0) zR%jpr;=2yJ2-~vx73=TdR5;@dkAoHu5SwXeSqH>sySv!FII#Wf+jpU0o|X_xI_i3v zZZWEUeV&=;^GNZ9x&{%Pzwdi_Yhs>eJ&?T^EqxZ17hqVH#5aU`8u9K*&L4xJe{Z+( zz8425k~5d}QaC#}#7k91;O&KIr7x?K|K%^I9h$Af6#8g?POK6WNI^-I{pu{T;_(1` z)q&~N(x(m=pZGUzLJ%(g9c+F!?{?zu!PvyHvfZwSha5NBbdB8o@Jz_D%kNgTD;xi{ z_+lmU-Y2KHs!oO<#no4LDHY95O-Zp&7XA}ha~KZt*Tdn{uLAm9(pX}YA=Hc@2l&@{ zbFm?D@qR6%HZRtR1X?VQFmys)UEP* z)v3~?+3mF2n2Z~>E^4^w6MXGD?sTIhmqUQR)Zs$R=0JpfQS?n=&-y5~;G|n0t8*^% zL|Xg)+ePyBw#~O|2}kUzE-HMTYKARnmPCcBlZGTdj{XgPIy6?P`L*X58M{#32vt4} zRjU1Xc=N(X+FNbND^N9@F2`9lf%{Iz1*uf+d!^E%XBY7^lfd3WEOK6o3?Ah3WDhkF z+vLb9hFva$(T$qPI+_X;tD52yuG;XNu()~Hs;%Fv;Zco`n!yIq%_CIG`aAejh;#A& z45HH1X(5fD!kdn`db4K)A9n96pkvAZBwE_h)<6)VI>55Ugph}5!dnNyprK8|7arWE(l`U{@_C=`3=DE7mf1QWtv zVkp!8LlhLH18N%gro&+TX7SwtWG!v+fn0GdH&J5DZVK~h@Zen#PLm1#9BO>56 zh48Hx$*BHTMJ|*fr5sJcBAC;{A8YaEi1vutnxF3FV;%+hZJaZc0X2E{Is^~0Tu|wj zya@?=Q2N!57fWYG-CIILtJrLG5-yoy_7-R{WD_YsOW?q;)6z%2+smRH`esS`AlbM>A;7N=3pcE37l+3!6Z)@aQUwE z043ivoQux`w_YGkEB(rdXh7MlvbYQivf^r8yV&!^i&AD;Ej4A2U6Fr=vk{#nCR1T@=UoM7BF>FG_xSHsq@Yn}*AZlzdBPdd=$}yNSm-A2# zd^r`H-ixwe1(oO(B6TTi%U~H$3zYP~?1NJ2mmss_q{*FZjE<&#o1@n!^|!Fl0V{LP z-(?Z4ac@nPwOrFXR~^XaKvg_77QzZ}-H7mAHE{X2I8-X5%1j5oXZ%^jyr>h_F*jS( z^t*2V)k2{RrODV1B{|Z*2~b@nM2hw3^{mlcG**d~ z0vl#b9GbD7^!Gf?e5op0mh8J2-$Iz|A#L%eKDR5cQPPQsdHv_VDzO?V2dLKNJeqJs zp;zOvEv*X^1DxZuXI}iO!ul2AE*hkWyvtHkvX~P^qqxCf8qM_E>e>tPY>W)dj!+!3 z&@SE`bG5DVYeJ{)G10D8N|&e^q;g=kIpH9hV?vP-x~SF$O)*7_*LRib)W+G0!%0p> zLfY6;;&!z z3}?SNC`Gj@_g{HfDPAC(LdP8CINf%Wb$tw>pH$Cd)JUEP|OdPrY7;M-nRvgd(a zvfo{TOccgY>4~wwxgXS)kfYs%{3wcHD(47u+}o=-+bvxW4J~H-A*)5g5-Q!!;T$1} z5jGgH#b4pxOT>01YHM5{9@({^R-;Q}5*s47=@4MQ>7k&A8&&926#~$RNRa|)Pq4jH zXuM5u=P1u3RL3ld6%5^xqC*A)>Pg|7ix;6&kbN8jR7jl`Nre% zip9Ao=q`NW+R_%^as0Mu4x}9J=*6{ple4cb6ad3Fvz>gzyVMZF)y@m;s!_)~q#k`x z)VgXFKR0RxyPd_nCRi;wU$5i&REP0ppx21hmo4oN0lynmsVY>{nBva2upb%OlbJmwpjuoHe7Uqp zrtRy8Z&{{={Uoa4riPvDnTD+d)|I6FTv&gRh&65^niRixHpGY-{p>xu6 zMa$|Ac9agU#wTjMS;N(0WGyBbBhZ#+zivAdFi^eV)FHDJh>kN{Fq%|HI4?ObpsF zGZW&L7Tj1_`umF;w|H>09hkteodXYy4knx3cj_wQUR>eOvMhToIr{r_BN#1b0%~gN zKmg`=>yGC~b9;Nv);fcNdgcqV>fqaq;BuPhb)F~2ha=ci z6&=XPXsG%a^pDOf9Pn8U#pp(eKpjzY?Z=*oS{L|8B5RHw;UO0fPc%8?Byx>I(^u{0 zAAa?-t}ZqAEl{<|=hVXI9~KpKE)p#8FzfvI{-zzl!kqlWroKMicRY(5H@mU4)&X(x z@uPIgzZK6R6q#q8EsVL0woR5bM6$b?P8we<;1GpANrDIh_dhci)eLHzvrBUp=N^G< z3@ipzah7cv4P_z%k;J=cWRA9thhfDoD3V+bJL4Y7LCk>75js%T99hkuU zN1q$tjONB>M#7yXXjdtv=!#D@JA`jlW{i#!p?*gqSUX4#m8W4d&4$AAz$J+JS;-VU z6&FR2t7zANt834YqqpNbB?iM~!V9pC;}Vs+x1f9*S% zbc84Jx1d=5k$ubtD2$veA~A_rU^G2H-S^~ruaw7E9XD;@(~21z8{^{O;H)7`JIN%O zau+`Y5t^Dg1n%-}a>q|pxB=rOU(yFbgyYPMP1-};BdBSPn|J7FtLT>lua{e#zNdIk z6y#BUVo8?Sc9Az7mPXXSzcBK-R!iiAl3)zHbV8G6p0h5IO6J@{2xT9hD~Vp|^lxfD z_Cz+IkJ*GU@$Y;XM2<`5D>y1fb)dE$upN}Smm7t`=5$E=M9?L-v$C>I{*Ce45@Jw# z5WrOg1Sce!0jpUXroL?9uX;GuZ>;&SXxelBU8CG`QObBN65MI~6M{Z^*ji26^99qpe~cMy;*sPynd0NGywKu`sP=Vw=;^ zV=ROEI8BL6ZwK|G5Q0R_C_5nfz!T!edy9uIpG87KvQLAIe>ZF7 zjOXk-Wb`ZGAD}0gy8W<9-z>Z>!EU{RO`UCI?w)Nn))W>RYSR4t>x4EnP_k&?I(&#y zv`%X4U!t@79})L4Yc(?EJ|^h~vl*^3Q!XM8j+JSePxtHOt%}p_yLCyMjz0v06C)ND zC`C1C-8q!AVdCfku6}Tz0dbF@9C)s%yV6)Yf-}<|%@Oy%asUS2d1U70IsIw=ns4Kn z)2L95gR?##*_a=FzS-Nf3oip!r_#8}&+J3ol+G>!5VYH~?$)1Of>89tq*Y`HSD1A^ zNAm6MZ3|pT`G|&eZdRC?=%-80FX||@@JamscjRi*S*9lUrUIQCBhEqfi8_U)CzNz_ zv+k}&a{0dd;r1zflG9#(=BqimuylBjue-ZZlB@GqRAXD4l5YB~q-y6E9#;rVuByR* zaWy({KAM9ddMHKa3Bex%^p1Z?9`-yngx=96OBj@KbzSX$D1$;=Q<+=%g+%FCSzN1V zFWu|*2v2-2D?qe}s-n4rDXA}^ox57&0T?|k^U-N(LY8T+9IA#pHl;J@`b#Bw!#bDq zrdlu$uAg{_n=H5t%S6dLg+rKplzZ&T&9PSoflt0)s(5t!&IFNLoNtbmkgw|EF+_&f8V{Z!!VOy=EskYy-CL`b!2W0$2TiQq$7uEb+2F zt@C#F2c3ii^u)W$2LBlrwzi2;RaK6cj0R{z0GbI+m~!iIL1ZT}-)5{ddG+<@g)_P`dhhSz4j~^?xM9Z$3B4 zu88XkUM|Gv3NFG{V7fuX&Wk=FSv^p@kMbae;b=s3CXhW)2*0c?gys}yjEQdET{U({ z{_B`z>^>s&u5>{=xhzo^Hzfd~)=Vx7` zeY=F7O;v*3O_2%tnUVJaZ0c}Q2oN8|Gz_2k?j%N8g3;J}+4BSBs>Mh=!xjmx6v5a$ z>qLigGm4<7z$1_b!y)yFSfcKU3@4+&rQ0?XdKv*7r8Q*l#h}A!BwFUdUa=P_EeM>G z&)EOyH|@#yl@@BG<{-1VU3!K$vpO_>q$=klY>035*G~Ue;32i+Q6StufAC8R*#&vF zlJXaPOsu7!piZ5nVhkC4U_CoIwM;YxC=^U@VEg5=y7hQ+!vnZb1e-@RxFP?9crb9M zX++wkr}_Z&aog5>zR;XWCYq5xc1^+oJ@kPpqppjk_KQ6{c2NO0A;L;1*dko*A=Em4 z&Om;jUS9#y`+p;F=R^O%frH*F%8$|;^8(g4KmPd)9X7(~^W@S+PZ&Y;fRw=7a|*iq z4x*yFpC8ySLqjIUr$MF2;8}sQxcH!TU&uWpm=jgNKrfL+CS`l)AHKoKR|W@U#!|aS z@_;+7t?YebRcs~QYh`|FhWDf1iXy9u?<%o`DYx9wY_`-C^!GW$PcVa;Xi}1*a!v~k-8~X z$F<(0#3Vh=C*eKsJU`^0{QGTw&3k^>i3Z)Kfv{i~Z(-l$zbXn!;d1E8UvPa4NqBGW zvB0**Yv*!t$45_LF{|I1*6XVD$}STqi;Mlo@ALADTLH!{OoA@dV)1`D{hqOh;jxGv zi5<~3<=_kDcm0~dcT>L;a2ZHCMZI;1P6C!s8FfqAc%iU!Nf=2G!pbtfjPN9b{!-~A zfM^DtefBKm>|(BaK>P~tPS(jg3`mMO{t1acm}HC(w)TZGsfsYXFK6`awL;}t&0y1T2P(mra5wPm4bcTQe=>GAOC~VAf!p2hiT16y_?wl8?4{t zyLe0&9tuBwSES-muE<;ODDzJ#KMmM{5FOB@se|@1f>Z-vFug;|MU$EDi1-{0!4GLe z=Br7vv_WQSw+iA6r-%9v8b`a@fTPC_uBj-nX%^WKM&7;$a$=|{W`DSn3X;OuXY;p8 z?=geeGcZ(v6eVXaVwK-lgT92PdQ4R%6NJ9(>80TII~()q7wG;c?CgtbLenO&b8>5b z7a4QgSMLc?oks{L-M--Q2|W(}I}n(Yh+C&95;q6%*U5uYO=cp-o1 zQA(0BN&4m|KbImG{gndC{7B3sE$bEJrlOI>MJ5Etbw-Q2;bQhjtU%cUy4iMJUph^; z+9uEiUoxNHy%fk8`au6u?z2Jb*+2ABXB*iE5+%m~4O=c=tIbtx?xP*!v5#?_G zk)gp!Iv}QJleh_?tMkd((^wq;C$#Qc*gDi4u+vH_felk-T)Oy?9I$d*8AItvlFgH9 z?T?vO6N4-(u=aN|uZHYdiT&a&`Ccf6gy`B(C6uFv(TCA_zx>8X8-=QI5oH)KVux=Z zNU_xw!b=eNcsUoH^Z-qoCZeN3*HuN60+QmQBfrok_#1xalhuOd{fTSRCIUGfD?W2TJQZTPrWAlvs4i0j z#T4fe?-ncG_3Hj357P`yu~R`K<#H<_51Z`ArY)X1bwbTUlrYjnMNqO7&Z)bE^A%w9 zLCK~pfiHt(;uOackj!}v^wg8E2Bs=N_Yng4U>S7Eo`uq5OlZJ<_-03L*Y7W(o5ipG zvaOl1t7(ddy7y#FR19bn(zNPYT7Blw^_x-OI}>CQ3kg^EaS6G*@B*6@xJL!{NSOyy zFG)0X=0C0bg<(6qNtv$!yVB)ep0S8~osBml6AtdhDn<5uUu!N#Ur{lcc)Vj=^_?nM zRpW_WjV=I}i3}SKx9M z$jq@D0Z;!{H?*eQI@<$8V6h>o#IP!+6&{pP43o!n=i8ULXRCkmGTINV#i%-CSj9$k zg^n+p@)``8z0aJ!u-JKV6-u_5SW=gP9LU_PzC|Q{UBboi)ZB@6pMR0g?t;+B@lEN7 zw+fhcVn4byT4S-{3|L^}Zdr|{o4-N9%Ks5d#Oad~r@n$qA^=uI>YYZmXTjt)$nW08 z*9iZJnt;vpIsuKZcR0+1Zt0kXmyp?quN~9HhbwGLTR(@!UUqe~j4WTZ@?BWRP>V_y zK!o1eZ}>Pfg?4E^l>F%DnnG)Fo}rOqX}G74dJ_NFKV^jRrW4kKJ(r66NG&mMLu@TO zdrtc;u@L9Tq}jc29R}suA+tFuS!H~q0VqLk2h(G+rA7f{?Qf-Itsrvt8;qHJA9bKF z@Fg;#{3#F=1q%EXAp=dzUcr#m4FWe9ZXA;RMP$5xb|(IQ!{uR)=hViK?YPZQEusQarwrKX7G1J?~8q68ruT!(@*}iOhy%v00`v9<>^ae`9+kszf-Z$L*N(`_23zM7LboBr+|Xi552CLBPyDZ+kJm0Lu*K#M#Y=1JtTF{i?ZEg^{v zM3)XL_=n+s$~4pr?dqSna6`kSW5z{ELd@(o>W*zEkvzDFMPqQa+Y6wu-@NgVZ%Nlp zSA9e{>La~f=ju8==Dh2C5VzO3;+`uLria0ydh)28PZ+L}6(!}X#XrbaQQ(5Nr8^72^x}tP$SAa0n@|FVGZ~C~Xv(>I{3+9q2bI^f+OtuG8}ndB zWN8#1A0NZj5q2`o<}>>VnjK}+4K`;I4g5q!Bt%e0BMV?uY%7bp8GU?{n_6?o35izHhW$6d;A=JiH(n*p0Zi>Y{+Pt~FRIE)C^vzKPiDt2Mqyt%D7K@?q3lu>g zVqX%U)BVJMkG(Tvjep(ZtDjfBrT?S22JaqHcbrmt4lUBZ?7bohxG02yDeh!XWR{Cj zfp{4_(!AII0GzvschaHSs!9Q?I5!*^DBGrcdqD-q9qXJBxg`pm%i9zP{3a2OsTr_N zG9y(mpuRj|&N%Na={hh^5EAWP^mrLg*P0W6Mkh)vgV^ujnSjmuZVTj7LazNg^e;02 zZxtc1$7NWRSC|_q9*Tfcbj(-?xsjTl} zV!nE(fxugNnZsQSjFAgse3abpuUjBtru&~bJ3}XQm409j8^F3+#Adlp54K%cffl4V zv~2UruzQXh1|o`j;pEp1h`uTgwWhJ5q7P8}FV2#yT1)j{qVXx$C?4ABqB%|$(s0Xje!T<=U9*HtvrbHYgQot!f}uoA zax@#RjwNYMklXEjzponSz`-FcYT3Mm54Fe9DP$5 z6JidUsNGFlp<^-tVgW5qcn7&6Y)J8YPP6iFvtE}}aw;xqU#O z(?}Irj!_Vgd?YIW_o+2|(PTirVP}%%cKbUB_X|ncv6SYj z838flS!}FtS3!J)#EmQd>Co(d4PWc?9{=+4i*d{CcN6Hp%Z*m`7SZdz=|$9pXJeP{ zi1Epwlj8REQ=EUpNRhk`L63HOUdVqm^g--+6xt&hko02W?CRBG1#ufgh|}NC$}1{_ zsu9GPf6dNLjvBQWX8o`bE!hbKY9>@`1|uiXS{EJyovXX%edW>ox4K>V$0nUrakt%? z7?mtPI+`RlyOXf-|0JP%`gx$pT3k0)IBJEvs%QbsMiaT|#(6sF#nLHx?Hq zJ*a=+%=_0J-u$!a7o)OW2$^cD`TLw@dFM9S(TrxU&$35!RY*KHT_h$l{k1s+XggeF zxVGQg7)NhM#o?dLGTq<52ZB7ezwE*j(483hBv-It6fV&Me+^?|A@rJ7Zz$*4e$Sam zv)wVbB2tD}GU}}Srjaw>ua^>J+OQ^@`NhhB z`GI4jGC?Pd^C?%X*3suhXnih=3*{=yr{g`Dz$N?cWQtGjoI%gCITNTC=~W#;=mj-E zXOA$;U#ch?#5>8({*?7L&N5=kX+K}xopd5FTZ(!l;08;J+sMrM+I|HlHggEM-(Z$- zX}8m;NYoOl1F{%04~RL~rJy5$J+0fimcVw*6jQuA($Y);x4Q@67nn&wzI@q`H52RV zw2T$S^f0cUx&*R{m+VAu^t+Y-hfZFgmcuj$WN3z~lYWdEorR-j&iAC>yo-_JrYCv|k^ z@57p@-LP}@DT+l2sbRdT(GV&pXT@5a$2K=lbxaj|dE58C$gX8IpLy_Hbk-gRN6%Bs zB0lsAu^Wt-%}uWn1p3yF9;O6AbSOfSieH=D>O*W(j5kNU#Epm#D{4znX2fgJ(K)(Ri^T6v>^e!sssR0!G#55s`G9FxMwV#E~GeDYs>YKz?BFI(>hYk&K3m zq8F4<6!7YX1Ia}>ahG4$8=6_pHz=27EFFjBI6yMm3kr%4$Uli-+f~7Sh(oZl-rX(= znyx;~RzrN!12HdJMr@m|QGZ#su5oTej*m#C|~ek^%Sm%UUaL0G(h zm3~Tn@m9R^XR0MZQz`&#Eyh@qBMF7$d@V=yW4zFaIhI8L*;rTuSjVIYBlK=`8uutp z=+nxSrpm5uK`Daa;SVrYibOW1ERPT;C}_Ls8AiBUA;CGT%?a!}X9lT6-)^qQq!(H$U%C6+DDKKqcOod_etz;rAPz zT_0#`;y?ZU+?jd zIWtBjC3s~F{0kr@Pb#z+Juf{x=cB@u0eJn$EBqtd;4 zp#F7%)THrL1B@((fGdq2B0S7Z|Nd{W7r zMn6|cTdNx0(Gq+`!tBMNU)J(Rv>n=|`9+!V8po6}(bknaU)M+tadq<(t^_W(2*_@F zSO$5eN`%JzEic&;wb2JB;cmfN|F3}&RxSc_{V%ogzi4JeibQKmbDwXe z+QH#2=y5evH9(>&ayH;Po3T+$K(PJ()=ZuNm42GBT*(P~DC-_er@xbuv(lCFF$6Nm z^ce=JF`I`6Ot?tKTo&d7mFteh1y9cO+j{L3+d=Wu9lc)+pX&}t2RhKA6|Yh06I^YQ zy)WBUuU@hT!rlO|@~$%t2Jx*zga)XR$X}!t#o(!)DKV~mu!b+4UEk5a3wjjuPtp-U zowqh{oU5~G4M&;~UQkBm!rS*!)`>j7t0-*WS)zH>w;zN%hoRZWw1G{&_2tOwMk z_V9h)75&EkpG__?1_^I(t#ozsAJ%)4Ud%?CS{}JG5h`2sEpOLr00n2^YW;@Z(>i*a z!KsI;MoSZQO$oBD4`5sLQl?ejt+f{$;uKOdYrA16GLrht+B>|Iq#7(NabLjh9bF!? z4_%%3aHRU{Sq3A;TE=D6l|38b!d97kehtJFJYTvxLC?dwk zrpS^LpIgk68(ep5VEsT-W|P@$&YMoe^A0;PJILyJue?Zhb(Lpgxfp%H_PY^9&X?pE zpA#KF-J0=YBxs0Rw*1=2>LU?n>(7~F)x|XEd{vrl{vcpkphWz?e?y* zN*^JpMZ*Q=bhcRvRC>$At+&2$s~<-A z?Jbc+oiZBhHPKVPopEMVse`d$_Q~Q{+z2q@)rQ|;+=F-bte0Wq7m`uMlSKO&D+B!O z?Cb#EjcjvAN6E_Ss*hRYv^#(O4f0$Rty4gX2eh^%;l5o#=*^ac2HtHS`lxIc zHwZ$Lo}pjG)xQ14>+APFDbIXPJ7f9!qO+U!1vH2ZI;J&N7}5@P&EAV2I;oZVy#~f@ z9@^Hi59?y3T)QZBjb=R_WpjRO3v1Kq8R-HGE#bnH=`1RyA57mvfcCF7-}5LU;{$gt z!Jc^Q=BWBgffSxSzMvKl)r%qUG4Tex7PkBa<)D8__*M%Sr*|IK=H{|eg=}7J z8N3S=&^&(Q<~qXk^z>h-JA__-N7kazkE`p94u(u+JNL(}ny9qE{v59#5Q{g~&Rg~T z16#*0a^?^Py@Sq19`ldU2dv0T+uKoMF820)UDgWJOQ~jI^tzmqC_CiU#@hF5bD#ZU zn?{f~qofUt$Y_uF)kKy(rq1ck=LaGu$A4aRw!}6SQ0(Uprqfw|?TSwI4+R3K$gsnZ zjfh$1xi?NC;(Mb6m7Z$!8ibBis9uVS&Y7ORJ5)18T_2Bte+9P0lh>#)k(RPfh>KN4 zh10eI9jXQ7v?o3$Po$)*xQ+NEv(a#6HqlgbajCZB49OZH@oXE^$Tt9;9WIk|sHv#- z`9QMi`F1u2CPsJ}%pno*&XC=bZ=bR@+cYB0Zmi<cYHROv3N^1OM`_ScX;;06XD*N*BCv`rok#HQ*$S&(2YEqhMtT07W%9^Y8 z8RT&^y#_{~KhWU@J(^bR*{=pgJxd(TVaBmt1$67gwGB8XG!&Ao_f$6ikuUtG+I#PfnDL0^z@N!5Ozp9~< zY%JE^LH4m7CkhMATGr9Jdf!vRYik9rLvj0WkO2mI>0BGw__;Wuo!wo;c6<3G;*Ls2 zEjngx{_f|BCc^{Xs!%kjf?fEmO))klWH7=S<=;1dh=)wj$j_gMYR|i%#~G&N<_p)# zFC5D!a81Gw6^c}DgW2vOz*Rr*v}{qtAeH!X-yA^b8Ei4(x$G zoHYpO?rW|khj0TiZks9}RVf6n99&)BWeNY2NJ}I7?AxXA#G6OIe;O!Z>**=ua@SE! z)$Us(O$i9_i9z;pg!X$3rkI8<{-}Mmf!I6jqLo?&MbuhR0vgvI^Evp$s8^&ZHT9x_ zm)giQNS>}1>Fl8g2TX!yEmMjc5?VzJ|JLr>+4Xf8de56}J`Vkb2Z~^wwx4xyh;V(uV4F0Mh1(PXus5F`FFv`_MY!>CnsoGx ztVK1*Vh#~ff}jzC-@@&`ef!cx!|y>QC4gA(3EjMjGZRvInW5A&@Q5~BxSsfZcXfR` z?tm;qbY7Q`BtaS{S9DdA)2@12cBTgLUC-;6)ycg{6%Wmxx0J-StDL)#hX;)wGtJ;F zd((}*%-ou%aw~EE=;+ue+$G`cAN=~*9Bav3lm9F#0{)i$1${&neYc!|9bF(nYS$q# z*V-CfOjgi$EfNt~(szLKjQ$<|LQcx$n_UzI!1?9K#BsAm;6ObsCmk9wk()9gkgqIU z8y@5nEbon=371B9|Gj+aCUcMTSF!L*Q^5eb88q{qc77(Vm=Vp<>u@xcfESB|garL+3d?HWvOgk@ zk4N@NS&Sq7pmgbdOH=8zi`jOe$p^B<`}-n1g`G@6tKc10pM-EPJuG&2?r^~`37tLH)_!Va3B&RUHuf>|@OGXDOmBZ!7h zeSY&HR#;nFOSQRB-#ps<^aa%i_DChi4Dy=%E-pbmkm=+}zw=Y^{u@$HtrV&a(vzrjW3Aze*Zo zxH&8JY1%nnc=HQ;NfYhf0S}1tRYVTBsYQL^WKT9xG*U6O2QFoRpeem&C4cltPRk-V zc*+rt@5`syFe+my6-C*oj}ld1X-6YqRpA*Pt%m?wfeE!#0I3dxHN5uK*(2Z54!r8R9)5H2sKOuX6C}guX5D zW0z;sXISk7^7-ZKY5YHE?=apkXt^~yZ7cwmGCt>AVEf_`=f`btFK`_|B9uLZ_cKV2 ziMWwmUejJnRyUc`zVw72%Ug|Cji6b&*WOb5x5(?k$xu*o}Yzlo@d3$VOBpdfy2)K86(~B2ZGqfp2fA`8Citr?<0?YvPgdHRkW%ujFk?o2MC9c-O_K-jqO<9V40r< zz#*dLJg)*tz5SbZ@ut+|%m80grw^_sPNrWjxmQ=J+Nt#frU!_0B?rzwKXv6!jYZY2 zB0t0$Qx;Dk+x8Wa-SBG6Rgz44#3ta|!k^grw!bRm`%pbZpeJBR5*PA8U}-Tdy}yQg z2P-1`D7`LNUb}PGTG@PK9>&iJ8B48wKv|j%K*COhDp-5?dTb=KQhsB^v+MJM68jh# z{XPi~3&z3d2K-gw z?1sX@Q$_t)UDUx!K+)yPD*Vujm_$VF?Np~tuw8yNO)O`VRDT9BY}F&f8W_Ljq~g?0 zPM{KNAOzXdnGZDCsR03IRQjJQSC&bV1g*dg!=qree~;hY%DuJtPB(Y)P~^9cCvQIJ zK+{mowsUP09KFd)yLZ96!-<<1qB~$V2O@1(f**mGtcx^?LfC#C_}^T605~ck>1KOI zqUG8t$dDV7clgx}!V}-4+gWDBg=}4sw%c}(YRuLzT?B#hR^NRqj5Y)P>ViiW?rbcE zqB!oTC+WG!hXe$z4#z#?pWFOzk46*bmr{?l?ykc3^%ARS*BlTl1DVgAX2g!@wP!Sb z{axI#A-jd2&piEDy$14a6cjeH4X!w`%cfo_x8lj)SM<1yAa+I z#+>`x`BW}+opyMCf-6khEw1Is4K0VTRjcvy!%1)kTODU)D@EO2;Jw(7TtAT}TgDtj ziK1ZtPSGznLw`reD6AJ_X&6;HrCkdish9U)Pv6~W?$6h{Eml zo+KRfn2jn+oo-Jguf8TZgi$uJ4++g8nU;+F-L|XP7MX zdy;y(23q0oEVGg0$lV{lg6#j;in<1AT^|3)%A7b{;oAteYvsRzTb*g2V|2razunW5 zM5tkaa|mtvkzp|6Del*YYWFw&NpWg<(35xDS(Plb)~C?|gtYz=)&|rID+Jkxi|j0- z%57%xSH0}4u|5Q8J$U8F97@%;nd$O6MPJ$7tlH-%XPI`KOz03yeCnV|S@t6Xs>U`n z7*RxhSF!J*bAjmssG+d5@mZCY*O*iY_L z_E7u07i>u(7)xJ0}T$J&bVlTPr7{nTf=jS(r9&AG567|G+eX16SKYac7ykHzHuQFM9Wyp zWh6%#yA=6`qkFu0aBHYcx#Z~m!aH)s`1j0Pr*GF*-e6M^PHxl3MIb6D0HpVBBRRue z2sOj;onXeUJM?3CwiV&VE=Ooxao=9a3C2!mqh?rnMwqKy@OWB{D9ZG#Q?x0{GObgL zC{TE6C37&NEIoGqgw_N4jnTuY|SZV)*d+Zlo;Oi>5`^@X!!JEv0 zZ#B`5`R$E2)B|dV6RvrgUK8kSnZbLcBX!!B?{W)wMs8M9YMrl>kXy!xK}Us`F`et5 zD#QEzvb-L-W<&xvS}UlKk{%(ETO4c0uBlHZ_d>aD>tmU<`}pg3c`Fb0wNE>Ur>pX1 zxVrVdCY|$4TThgq>9t6eSyQ7M|!>tzz**- zUzaEEq%$|v@j~s#6vB;@1CEGJBlAVG*NIYJ^O75t8nP!Q4rxPtk0z&%)>vk#oCK@3^?E+N#Rc&pqcc$XwNt=+%dT$;YLf^IE!i$w)OHT@3 z6nzTMAva(K^e{@o%}A-&^;=bTtrp_2FB-Vw#d~I}E~I`fyHH*WcOmK%N5hOYJuZ#E zf0Ap~7WUY6_W!}u^Ll=k;Dg%Vxy)J#9^dsz^T~2x?~0X`bm3$CXqdQKp_>Ss6&412?g)D3cH=Q*0r574al0)%!|)1p_M1;w@}=w=EwYittlHaAAu?HY~hn^f-Dc zB4=?;ncAnZFV6UEZf?H+Hd5IfM{cDO(U%fN4F^y91D2X43LU+t##NJ0+bJ`*tYQe= zqH$7VL&J<@RYhf#Dt~V=!iUE#$=ywb4l2wL4>Q{$JWH#R-Z}({0c~Y%nROX?0>&F? zg_rRr1HrCfA#<6e4$-&wPtD9f=lx5obNMbdpoa51p= z7x3HfRsdw<9I(MTB=B{usGZ5@o%A@}V#F$kP#q~f1InDocH7lShZq%bmpK-bA;?$4 z{i}DYfCxVOhu)ODF#&5dw*3jjdW^X>uY7=^zkv19BF-iL8l<)c4_wE32D(ISD5RA# z`EoxsH(|E6wJL1vJ@S6pLZPm)2C082Dle$wLKAGtOAlD-R~a3hn4|NkI{a`4t*pE5 zx3b*2`xp}{e76TlF?EZ{kj-IdN?79PPdOOGU!8;WF~%P z$)45cd~cL(6Unja>ku{N_nkBtxH-Rul`~apveSsroN>m+$HxHv!$B*}im7@=NS9I_ zhfPKM9n?r(a_iDr*-1s5B5ib&5asL)T=2AsbjSYe1als|z#r@c_U?-Y9zO3v(VB4i zlpRW1hUjtw*V(Ta0YvySLQ{%f?~JC6yiSR%(aBE8_fNv+0t0E~GjnsNVIrKIGHi|! z8y7M*xC zp~wX?);BGOwZ4fAPsQlbf(D??u z+jz?mFH#j^Pli)pXe=*VkW*{gB{+-073GH>bC5WGbaD5~nM66T9+FgPud#ykhTNmN zz%1v%((9rjQ!4N-xBl+H5awg>NvJxquM$WMKax`L=}$QibtV^~N;zp7aCwX zEK+;)2w0<6EZ82R6df#)$B^ghfhgsgX?x#U_32>QrG#N7Sr7C0SfpQi!{xqg%NmO8KD#K-Yb%2yP^6DKY%LjDln ztw|(v%4@X~4R5joh0ry6+;w7Q$&wNotIt~x54oqdb0>U^LiVpyE&?@PTj}MzYnkQ{X zqo7W)KA>-JHhxjj_b%wja)0mo%fA(7Ypo1xL4-ZpxfHtQLg(`YwT~W#&Ns8Va+PZx zE~Mr^3x#XQarA_k+)T8D#01tx8HkEFG=;OVuf3IbglX)in{R*A9(_;$v3|IO>eVS)Q}B8mRFb%<={7wil#c)aR0*a@>@_u(aqy_7OvI5IS+h1j^b2&p<=@k-Km^rb_R zPYq|06*U@c1c2_SuEB7FW<&U9iV?wq_!(~HAlU`$E{-7tJU*HI!y|p~5kh;qEN

    m?j@#04Z%Aka59f3$<$*Qe^-2SP9nf(V9>_q*hjBK+W_IA&&LtH zT$s8kqB(v7)&+5&4B4d}UY|9OiW8UP{Y{MB#6}xzQlJ{8kgOxIH}c^`;w)=7M^@&a zg)&Xe*GlGgxzYJ+Q~CReguHFbf<(6>jfYktFF{f6GCsH_a7)KE>N!nv(e&Slvjw8Z zzv+*cSVez|;Fpcp|8Nn&J`xTkEyDPuAtfC`Lyt=h<2XMi|LvgqMc(DZ)%G#JL%dRe4($gf4r4PM)zYBSJe%(WgUuxKruSZzb>0MV zw7n!MOp0!Z!zMOZ(5P&OJCdpDqNxOGu1Z9~FltUb1U#W1>a)nqDr!{c-3k-Tt2S+E zmy8y)L|IaY;6|dgbLdRa4hUJ2L{eM&_O+SOW9@p0g{q;9aKq{LAYEN!(VY}j_O2!z zp0>gz{K?Ufx5q8_mdfJAUx#36e$?Y(8ii~?lyjmM7yTs{Z~#@3n8m&R`9YmfbcuoJR`t# zW;N9XRN-IsPjy?#v<^2D$!eNds@?s7RzSfafUz+SfNw5{P=JYZoJYXO9VR8`mxTL0 zVzIzayR0{b_r5>c{%qG)iF(`gqR_`wB_w}E5$#Hf29LiV5k8#+4 zwRS$4_I(t#`#1{jru5}ly*axk(alLWltA47ZPPw8Aawj3@3NC78(xbjCj&zIQMCtL zr{4WZ%eb`mZ6DxQUYkXJrfBZ-`?60;&!DdXCgh{NMFVeX}e7OmDZ#4$yvMKF9j?k-O5$d1%hY?a9XCfOo_E zM0&AX?v**no;)dnK=R4)Q$W^lF9XK)FRL~ZEUsr?eiihEI3kdj z87!4x1&Qz;+i9R~bi`n~mhaz?%*e&RA3~jAw2LL=CCfx1z$~C*{EmVrCK6jl_*ZbT zOg8s?yh8)PBCo0tDZ;w=nwNxlnp7Cly-o7TN#A0{8?2j%YgkkDulaZbnfqy)3!*0H z$mRC%4Jb4XO!g{99!PK!JSKH3)(Tpq9x-UTIOqOT?5xI@PBR!*0EqWz{jMofcX+iU z{$j`2{xR)$=o}CchFJ3By@ZqngM#@8o|uraTs5$mlzuk|@cR>QM@zWAg(9J~>avI& z6PnM-m)ChDZLEFR<0PlQ0yd_(+isX%WPikOC9!>KSITVOCB*!aE6NoQBa# z)xFNDT0c2k2=k-FrKoUjGIJ|fo%1})aeR2J#dAWrubJgX8EDHIa)TjC%S*mZNr%__rGY8dx+)) z%$LKQ1XhIbkT2uli5D%MD#)uAO@hw`2Op7(ft>8jafj+IZGft*`2Sf{8P#Eu{$~}m z6%Y5nQcv9Q|1bC*=WS6Y`@jEc7xLSJg^-X}NoXjL6LJ_h#-Ni#)Z^s%SW{z^|21nu z(A1NHf%uWMX;ZIE^YI5iSpw7Z0tJIdrcmrk96SX}!>|$CT7>9O#L!F)sTdWMwzb`*u3U?Ru@iH~{?~KUEGA4{^>Js0=D-XF0U3 z>rgBeo$bd!H`xV|nVEU>#KGVDejdumpLYZOIE0tP^EkUN-gvkBw^Zx%H?(f^jUVlS zLS^EiBdP3G+V75$cbeMU$-z0Iq=qkt+TlQGCaZ~~Bd4&p$i_gjQF<4ww$!%gc{$Nx$&<`1pF-@773Pp$YJ!ZyNf~5A6@C5DqDHF1}R!k?xQ;Iqt2N-FPS$D&b(3&Kk>V~N?RA8T?@eOipFMT^XpMg z^#$DF0_Z@X=r2l2N+Bg8yG)zN{^!W`$o;orr1nFVEEIpRkFSqfg{!i?Px3TgQZ` zUeJYx9K5D8d-|gYYiW^!XmIR)aJd$;=9H?E!4@zMV!RlK+`*F_e6POQ8T9S6Zc+=_ zhlV5Mw;#OWq`)`UkOVqd-@z*K@K*&>#d~SG$93LdUONlcXJS>yKMor7yV*@#`9d=- z+ZBb~6?Y#I2UtJHSjQ4OyAop;dENwy6I^~0Sfqj}z#S~zxWD%ha6O#)LrQJVy5|qY z9YdO%o6prKZ`773bomD&2zK*Waduqc8NQ*Sn?+vgp?UUSA z;E*?{a>fuhEM#C#C9Jmubt8I>#>i`G5CtSVm$$xiBmu6it=)VhetR`?A7{>Yjb3+2 z(BIKr3;Q5Mjj1g9 z&ei6U%E}J*H{B|Ns1R3^DYm;R@!Ie#iy4Zv{pg3}zzYu(LL3sR0_Ftfm*&8z^E9dJ zP)){BDT>SZ^Ea`@Aq+IMAY2Qvtuy{F;UEtdUt>crx%(<TKOgpn;cPmK-#PzQ zZWUFMor9-DO=UAev7!`UmouTqGa(q$H}or7yug@q)aT|)Z=91&FfCTWU?7|7zj=M~t zeQ;v4oVeNa6XKoMu^A;P#Z}s1X+8vR*XbP#OI3(BWfPX0^cN+d>LH^_?V-i?&cPuT zIx7AG3>k@HHj#5_4r2M)KBg2M8m{jj12IrolCrwHj75ALX(5>-Ux6wqywH7?N_;bh zuW`jTafN+g*$})E`RxA4?upVG9%g z!~0LryNLbDVNEb_RSalsWVttihsOxF@=;R4w+Dyapob}S0rtmMYS(_==L_EBo>}d& z(1S9Rr!TkvB)bYO-{dQ(Z!aVrr$-%ZK6mc^?)Q+mSIDugcU~&plKL0{M#yfm>mMsc zsNV6@N9x`9OLSmz(!T4wVa3YLF#H_3U9@Y|g7Ff$8v(ekDtJ|~2~#tP_}19fPI2jI zcW97g|2KFv+@`Ae<1JI>@*Mce(SROg)dI2UytS!6{nLGZ5?yO#cA1=l4;>SW8WUu= zqZp2jw8L7zJr7^UqGyo(O;K^tda`kX);Ta8aH>cYvu~2_@Q~twVswsZl=u1|dgd7? zmOk>zopXWSe*1V-HNT4jdG)i<=u~t|Uo+mGo8zljS~h)h<6?XAoG?QUQOXPMTKo5U z_uJXBV$iN}wHPxV|B^_Up!-s~C--GBH}qHa28NcM5Y^+q1 zg8E}$py!3}DZy0VCj9JB5Wlq2CH$6w)RUmmG`4;!WKAB!+uh_py%9jL+-Ug2MJAo<`k1u)X0RYT}Dcld# zVmBJ%yl-Hpwc$-t-lp&OSmB!N~4(4TYsE8f0M0j-c5RC|b{-L0I=pBk-oYzcY5261B;ZX*OtUpvE6$03b+WYvzl`*iC`$pgSaNi7-5%4h-EiOiH=DxXQ#CQK60OB13mR;n1s} zImG!rvK$3taDKK<;&b9cN7({6*|Gnio{Kp*$lwL*0+zXo?)fws!^Hkm(#W)$8dP|b z37s+@6k|&Y3;S8{)UT_?p>SEHX&UP+pro>lRgS;->VOo|b1sD1<+G*jJF6X9^?Fz} zSB4P;$f6wX!D4~4+zBcJhRuN@vr*>KsH#Hyf2uAznt|iF0_Q^n=KmbOe_B_!DU6$j zIyRmJUB4OKhZ>b?$P(4YJvGH?fCaE)YgMTFu&hc7@pzH~10}!L@Y7A`CDVe@buq%4 z7Y{f_<3+;p>tU7G`=}%eOGY6G8Zsh6&&O8cdgR<(mQg;$U-R`5h|bRdv(HF9!-p*b zcXrc?g5a{rgnSN8F#=h0W|>GT$_!9UH;ts%pn!G~ORzW5^gBq^S z4LDq(3}Fx4V%yx;jmAV31!f-@c8s|w;(fGw9{02sk|VWsQLiSUlQ!Ive|g+tVwX^q5T zgSh!*Uwl!U{VF?Y`T}`3D^V73F9}Z>$clzQYji>>wdo zxeKE>k3QPE;BZ4>p>2JC3|1R6GsPv+j)LNU_YH!!!F7TiChLb;%mJk2LeE^}LboV< z2OQgS6Ba_#qi!6=f#l{N<81!;)=ere6&*&Ormd;c9|mx#QL-KM)}NZe6u5ca^YBC? z1u@hNs&ce%h>Ap`^7{WEj zTZ5z_bmqg1_>#n6Lc!i-*6&=PcHyjoz)}4i3c5mC&`*;;7T4jGSbMn>KZRDNm7_f#J5D@6e?`t`6dGq3hpjs(5Bn?SWr2Myb~$n z+xNpc9K)|Auqo${9R#3pUyc^^1jSbGzH-Esug2nk9gii|r-YFNl4JS>hw<78tobFG zjS}mPSSz%N6;ldMuWcyg$vSz5uXce=axcafP@Y#}_}5AsVr?d!J8~H)>R_=3di)oY zn;m7D{h(J;{^zx`mz>kuE)0g?ZnLDI$p9LBB(wf&w6=p2PX1vbpx;tfvszM!vw*F7 zf_?&NJ8e?3%npKO1s3Tk4J@+xp7NMrzmxg8h8oqqMQLgoQL#CZTDRn28%gtBun#!| z&MO+$S+{qZFujml;GCx9IAfMwe+zG<)hIwDfs_^xDm`6+aByx7lwuV!Q(X5k<#RWc zLyS4RyBOcm&c9r@8pjBLZ=%@D_T@+2uy*p6qv@yf>C;LyaA?mi#TenK(1~b;m8d5a zO?A?8P5$*my)WmPP`MNdf+tLf1WM3-tbZe5gDOp|=O7vJ+`GP@2D=mpd0m zj_d)QxTl@Ih29%<7VF6Z{Er9ylqi?STivsaPgoYKeY%D)gK=2iGi=I1jn|LAo<5MOQr}x*k|uz`R!UgKS|}K@;nM{D$Top&W>XC zR2z{{)q>2(1jxkfD(gV?071tWA75pQg*YE=_oR*3g8*eGgNPLaQ^nFFLZSAMtN`gzf}GE z8Q0Ct+{5x|%|jJQ0uU)@?->+k!V`o{0I0#rVDR;z2}Lv;WxWkH-KGM$pu=*lj}}zD zo#iKFCPyW&6#Ju*&gH38CiAF>I%%4ElZ|7(LfNhwdrOzq02ucGl&9ba#~`C1M1tn6 z75x-jQF8viKrDG7N090nLch|xEtWJt%cM+fdjk1sMP=yl%G%ry{Wv5j;$A}^&#OgO z+;Q$L;u7G0Rpu-!n2xh8Fz-nAG#}#{{NJ9xxHb1u0Hg#2m8hnT+{k4)E&-BX{6Oz> z#5E{bXefM>8@Apxb|twK(qj>LIaqtVRPjsjXA%ZRjtxa}~%wSD@v ztqTeVGqi6}JcuUy8jayQAyFOj{@Ss*Q}j0^?dB!izB}z5oCikLjvjj(Fx;fYR=PhP2ysRViKCwhd=a<(gq{Qf==*_#?cI; zi!byjqMs+8%s=6y4WocJhD6TLjP5^V2hr(l3(LTt4khNLvF4)eiAWqJlP$v%B%zZ>kyf0eHFpSz|N7hM_Dk!Mde_}E{VWhu(E)@+c|tp z?h|Zfqv1Lo8Dc{KvTz#PMq{(bLU31_ak{d6XI*rH@oGx*$8`G=EWQs8eQwYHxhIW3a72adGJzlZVpl6gQtQ!MX?a*J<1BGsu>)zS^m zL*$pcgWHDJ1%zc67Wsnuo=R);HF(s}LPR$%1~cElOBYapy;$-9|AIDRC_aFQxVADz z=0ZeJ(&76W?tH5w+b^;Tb0Xn(zcA-GSGa53JIfUaM{>O{6l0R zHSh1tf(aG<4A^F_rC~3{6jI}L7)(KG$_cdrXaLZ;*=sGE2@$HV z!NUPZnuRQ7_56bi_2tdxbC~AokN?3EAvpJdA#a19@;<-2KmxH4@EVCEtM*n5JbF^~ z_)gW19ZeqDeWtETFLt+-)go9!l^F>T_d|Gk8x691y>gbpQliN1;kB(RJJkMf$ zJuVYbL_)fNIn-Bvu&!s_K}T}pun(q$_u07vjWe{`LUahD5LDW}=V+v;{imN~O`qy6I~Ll+=NaVNsB{wG)F1o>pbrwPD!c7v@TJ{3 zn}DBV%BC@mXEaPR@M++*n_*;K+R}=TF+UzpF>%DNutMLBY^_J(Q9gW3>~ssnoQUCydGQPTc8u zV0iP;C8~I zH+MyzFrrh=0U|bj0GIno@O;N@{o@rfi@^S%sO}KZA8Pq8lqbebq8@Kzu`i&(04^ zFy&|gerY)-br^!&a1j(;g4E&@10=#9>C8_bSDDE@RgvF-cWHioLVu`^O^dMm zD(z~-=+%k*2LtDBpEZ3{{?ly!HMh=hsHU1pMeQOFfmY%f^E>jTKwn5A>=M?^r)4uo zw!(82uc<_r7O-3x4u#KuHsD-XvtwF%BC{ZB+4n?$&cCupUqK6yZ!NIyKXo(Nbz(x6t=kK*SZ1#qgFu>1aDg`qvPV07C-mz!$B2OP- z)gYcdhPqQ`Vm0{h5Wzf!FSd&c)kA_=BY~tl{7%XsjWrqDKER8k4?*l%Ea_iyluANP zab!JD`R9xN-3n+vnI~(|Dfy)yLQGad#lIoC8Z$^XuZhSiWV&f1&&hSC86c!>99Jjb zu7}`@ckP7DbJPh4(FMv1Z!4&Q1jw-}zhb+X2uw!h;o`*7u1swC=xX<06Lg;SSOeLI z{_{B+*n(AhuK?n)8E0f*iCo)r0YUM^KwE`2mWNugqgt0SxvF_;x@%;JarNsDS630w zOqY%BxVJ9VH8xT9c|xAR!17fK)U*;`63m22M#UtS6CZ!RAp>m?;XDE;&Uug| zUl+;i#6_WAwk9Q5C#54{Xq$>&eFQ2qkm5n&|1+&DKw>ILpH5GgrT=C+{%_gr`+wV{ zdoNG|rf@q^P#&l&UOvgomlkLsFCVvTA7#Z&0wx@*7eGom@ACfz{-t>r^QlzMUyyr# zn&_p!8u!{8&F0;t>;Zr4>HVy1v=~N!bm?R5{*RiNZv3+Os-y)pKSeuauZ-x8u7Hl` zpmr9=EQEDafq6d_`X^h`Q0{H*UU&IL&KLX(mK)q8tA?27Kfe`*2rsyIXAIstrSV;Rs$6fbtqS{hFCkI1Ce%#eoIDouu1%0 zKW9?DoYl9GtDh|^y_?|nMRZ9wHWViPQ9W`x3Vnp1&jpfrR}@xD_tD4R}wWg79DwUbo4%{Q8;Iq|eA15Spdk{^oqjM+(? z==cxoBo&kyng{wC1%dS%m?P-2?BbBW@D4)tfLIQn845@?bP|S5JqxRa9}VemVexM4 zW)?k{=Tz~mGGA-HX<1_M9H;SjnF=&~Xojl5@y+#n!Qe`YbzCBRgjrZ~hO(Y(rQm?i zzdk?Qq9n25>|l)7&wqpD+U73-vwUaJbA*M}_la}6m2$gd>w0UTPt4{r&aqc=DKU8h ztp)55^!=B|0zu}_^;SxMWdl;kkcSQKB16@2z`HdEQqLr~g?fo)DHT*a75*w0OdhEF zs6tuo`&EE=_J-La>wrkdezpZ(NR?BPKQ!v+#NWJU(6BG*i3f&D3LQ$qFD$K~L+8qV zW9K{Ie@4%mpSyK~hFo#8xt0FvIyyRXvY*A19iJJVwxOztL_i-IVK(u#6V-qKoVur` zYCvm@nw6L~=9X>m)$fv#3d^00uoo@o<0GX%tH=zTtM3#1O81>i(*}(nWM%zEOeRy$J5IQ^i+cM} ze9pwxj+Lc~MSCP~msxdSC+2wAf(#UcoWwXdr=@Fq)^I47AYy}s*#rM#ppp6ci0Z2_ zZsmFXcK`6~A11qhmp_>gd*dCY1u_`GMb1Qu(n0m1S8_S8?sUn??=lD1?>W}na(dwPN{xy{3r*mU%aG=9o% z0QA7-^VcMMEE}!Wpm*ivmF9ys65WLT*f@2w!|E(h{Xh@2%smV0E9h-kB?#gT;=9fV zXooAUc5PnINxOYn?->Ihl)V>-d&L=jx{HMI#N9EDaHK*w@LNHQ!DL}!8*Wbi&@5E` z;t(>TT{%O#R=(9JQ#?fR;`%@^M!IO&1~O6c4kBo2ZEGvP4OU~mE-4Mbp!z+M+Rq2r zZ)u=Ux{vVHN$4^hzk{tVTi{%pX;=tfNT(jJs2BrXY`t^c3Wa+>$^En`HE8Xb4o*Nm z;FT-{Y7?*ouzz&;%Ln#SxW;|@VrLGw-mA?L#nxw6LA69KMf5GR)oHipGUleuW%?7p z=ox36uRbFN#_yUtH2qSd@EU;@XsbN*`}YeD5uT!YPJtn3=61v$DYfrG>;{Hdg>8&Z z!9b;mcj?MhTkBYeid71FsXhihA=UGsp^ z#W?rILvKyK^YhZIZWPjz)zyzWhAjo{2T)1;;qrde1oDoevGeY55JG(F&lApFYP&Kz zA<15xeeJTO{zbcx9}`kQB*moO;VDHh=qIb4y?vPX6-5lLUseFmK z`f=6Khck0UF_7DGD+yQ;1ns@D-u8f*D4CNDop&#HIcO}1@t=+!muaPI?0k6+ zt>z$>z3(xrPji@S!Km7OCB;z-Z!^A8!+-?~A)* z_OJhtuvRDe&8R`|5*=)jozsNZ9iv4${-n(ZST1=H45^*QlW`>eflMCg28jJd%I#&`9~@d`WCA0YG^Q9nc)zD+=sXWs5T4} zo@V~fh2sgR)Z`D^mC7XYb>NM{$P}&&rI^byIZZDWrs)STwV5-8#B$QJS>Nt!EimLl z;j2wSCy5K_gP^ksp?X81I62kBL}KSrrT5$52PJ)RaX;iE>6C1e0h9h$e}of4c7vG& z=D9E>Wfe3drqrx$E#1W94_p;=pQYL7q0=J5YY)nsfAIG9RYty+nLSL;(bIvzP%EA* zyCQOA83%<0w_NrjH(SM;_&(jglV5DdAsBxOp^aq9*L_xpMCgtyMQF{M?~-FD=-Cpf z_IKF>Mcl3XcS24}7q}17;p)# z3e90ZaSyjv6IJ4V9OTc!3Xks5{2$8BGOUfL{nI$bt$6Vw#hu`8g(Ag^ySux)ySux) zJ4J(2+}+*T@V@`uZ+q>v=VPwPWRgrKXU_Bd?t77Z+PAsmj9?~q8F7}Se*PwD_k(i7 z7@&oxJ(G(nmv0JoSg1+xxaiQnG^qbf&1Y_@GTf zTV6A9yETQj*zYBD#kh~hM@1amLXHOP_VyKOb@c0D(|%_ck!5uy=bL1vsBkR`0;HmL z=_n{pawaX7Yfgl|d!N`m%;_gKQ)|O%qUGh1C@ganERd-UmhpjKV0Gt zUS)U0n;D!LVTY4qs@nQ#x+)+_$I9H6!S)%JzKGyuePog8_lkTM2LmOoPD)?ylXz7c|5uf=ZpuD4#Jli>;K8XQ& z)h^g(KYJu)niaq@B0yEYWIr6*^{`h^x2bQmpDVla zENsr3eD*4=Y4``|hqJJ2h!0v5v0i`kE#{Ys1V9`bANth}2G&sVb`pz0K~Eo{{0x9f zTU^ZTJ(Dx@^JDG}*!9nE-%m3a(ZZlUb;@C4oe_OqPK&@6?cu=%Di zgWq-DhCdg>=8tQ@f=9(>u4EFS!ABcJHhXj~_!!3_2Il%nvLBzwoXHB}gxWdSWXbq) z9YZrqHhz{Sn6O@cS*4kYu^S{YW%xxUgOC#BO(W6Oi<=JBr5o1boGr2-z)?Uxn3SAy zFqND-9QnycJc-{Z2d-6--){=aI7o7lTLzZ`l@ry`G?Q}_GgzO^&8=Y+iQ4+-don?d z_HMZNaSx}b8HartIMt@H=09lU>tB`HbPWwTY3XSXM@CWeA-9R)qL9`$Ez^SNfn9J- zRxR&tj>PPAC&+Cu4yj}b_PSej#}LA|P=XHIst8i1c8gooFazusC+jUsHRe@a6y^u) zN^>SNWn2uCsrODtGorS%>UOJsE(`?PWBzOp{rk%Vmf!Kap$?9YN*O78mn&{}&pKYK z@r}1|X3IH*Xpoa@x)qoLlt?7;oQnC%tCu4~>-`(%@5KSSe> za{kyHarR@3s&<*>-CdDJ4Q1?q98pqW29XMBs!2F#dFT#?9Q`nwKJY)^nX;v=g9-Oy z6dlI7yY$F&FdmWDh7S!+)=m^K?$M7$EAI+oVV7?2$EnhY2k0d*SW4>ve&Hwzm z#@m#{5%d+8CDC^S$Q)9ksXUn)>G5^x52~lxk9Y<$LG|0V0PkiW-TQTh&Yx$#Wnltk zi59=k@u2=D1<;r9N$BW0Ja}Ck<`5puv7}M9(PV5Ph@OofGYDkrG-a$d|Y8lz1GIj#pwJK z8wwJIbX%LZGh{^~5#I_rY^h>KYWr$I0-cKnx-!ouL71#Le@QOB4m5B6 z3xE7L>a90(tJ>aHDBU=V!zFp$y5jK**6c5_hx!8bFz@_hDWODNV8+@Pijazmb6hnb zT4+Qy$PC3_R@psw1HFUPgk(QxkGMl~j zvo3Er8|zjU4;IakJ8)#IhQ^>#w5rpcn)(Yzgg^G97*=duO>6uYTwSR$4#^CwJcHL~ zh(CWpdM@L7v`eu2Kf}#$oc4f&i|$s`4Qd+G-vS2dr|WnM1k9(|bBhfKMc5a=znQ}fA-!CtJ8{&93B0P<@R| zY3O!H!Q=kUO7r)!=1ohaYqp8}07U`9JO&n8nyu&}H=;MkU^S~Y!(4DwdweyF#Na(G|B%O44${=p~NrOBtM zs$aQ}B$s&sJB(eJg7<41+@`ssb+$WrT_09MP6I<&tnCoziwA0nhh#9F4R+2RTBfNQ z>7JQKG|1N*C!+DgnD*nbevJ5i+{h;60+;}Fb_nF5>_zvvDh;E;1O z8^6kYW$7L~W91q;^2zVfzTVt(dARz<++YK7eM`q}9O?TLukQic2H^d4k=-jQ_l_ES z;9I* ziTd>(f@CPb$A7(7kE*Yn&r#QFrWrqXh3H4=Z`&+;2yr1ls7>Os&xeOSi5`u+2?w(4 z-^h*vM^ynFWB4v!kxyKIGRl#5(xnvlDy zO7Fi;1n3nrYZ!=je$J6Q*MH@69Qe&S12ZUvBH=wc^x#w2LS1Wc?E6eYLrSVc_R)GwwpQoC$gT zPY=8MlF>vL4bPQzSKS%e!Ojx4X634TqXn%oonYmEuiueu)c{rjnnM2_eN1AX%YpwH z|JM$6NIJhJZ7-f4yHkB1|M#{M;qJt@?E=r^Dvi@*m3kC{UWTUY`I|GoO}7MXEyr5I zCNE_8!mx<59T4ieYb2?=KfJjNb~v<}4{Z*i4Rr!Q#4g-bSa$|;R+ycg#dsu|H9y(i zNTclXvj+#3T1KDZUQhU1U)(M}5<(A0Ug%D992;Q^LWC0pOc4lZ;?-A_QYq0YeTvTs&iarZTJq=I&v$tH|G_2_G^ssOL zM*WAVSL?;+l+B#kc+A@_%RGbQ0P3DE6V3B4Vf8)Z5?j(Wq=zd8gS87oxWp+Yu^j|% zJV%0)b3nfBEc&5!!iXqjN59$d`Xm47%c7Yz?j-)7gWt{_{1)!B4(SieIO1MAAj{vP zc4^M*KX~WF)XTzS*gyvBTq0b8d1tVH;fy!16gZx{Zvuyq7yT@W80dYG%R!}`&)_)L zykr|U^@q$C4YLnep?o%hiz4ejEEjD;O&zw&>-_9G-F^`fECfEOnW2FC>bj)+A^c+3 zU?mFe^K{KLnilKS=C|wTwDDt|7LnExGem-(tp-M| zmV~;}@kduwM_oE_a)OL|9PdXx$PKEEQ%IRWj zzxu^f3&wA29b$eJ8KZb6Hq5V#g&CA_2(0#5tx@VYB6{1aJnV=HJgZ6=Zn+3-VxdD) zFVmCTa4)?uo_m0`n_Je+BIbC-Wp@@nP3@8qMo#O*bu4Tm>g?it83Fz(JYU!!kp%^qgIz%gSS zX2?(_O#kHPTv-x}F{qU+*3wi<0%M>)0!MyOCGUy$Yc&>{C zaD!-l;U0?%>LRibG`M6CS0$CMXMY^K@NJ z0LC~SA(X3u6n3M9b(l3F zaZ7d5*b57TNue7(qvoh{P-We5K?w|9zdWGtdp!fa==k}!fMrP^E~RXlNW1OyP1r9v zavuu>oSbPe0swdT$)qrCO-%BMbpsi)Qg1jyr8UjCC%-y*F@$ZK8vT5IUFn25KjM>V z)4cO~b68mC{t(u-)Y2Oc`+ERtiCftEfH6R{o#Evhx@g^-#3DXDMu)FCC- zr*GFh)8ES9Er11lrR@?V8&vLGQufTDvelf6z!zMen^R25%#79PgLts|>x?2YIbvk! zs_Ed&MjOhfNWFW8_^U5zP9s>-G`^l?w$J%bW^f}1=d9>t74|BTcxOikE>?2VAXWGq z#(P{n7y6XuN~Q;C%l8lv=UyK67ubNL)xpDQkyTG}7Avx~t*)kD)2~`=K$mpg$V8Q* zOvJ5pM0AkCO}(xVm;L_ft(coqR?W3~PTyHA!jdA_+?d&za-qJlwOR9NEAUSmj1@?a zw(^C-s92OpgffT?b>Hol+*N}j|VwWr>&LSx-ri)lOC#gJv{So9DInZz(D9o3eG`W^8uzGG(A^7 zD#T(v05TW0ufOTt`f=!^e%zv)8$?I|FRQwaBkr>-=Y}If{XNgqy_u=!LL-%t%F%R7 zvew~ZnGfE$R**}WwLR}r%k1}Ee!&FoKN0ZE`|Iav%p7iwDq^iJ7LdesX6*65tHnfr zBgbnyUuMAro1Q&*S$_P^Hg-``ik2cD#WKiDf{dtN+tg(>^E>Z*D@-!!Q2G&0#@Z2! zeHlx}Io9G3)Y9+be)I;6-74!D!P?lLYJ9y`~oD_yKa?&@Th zmdlHcGQX`YFIOyoYZY+mYfJ*opQ#;*Jr>2hPXBaQAH+IeyR-E9oHJkdG@Q2``pX#q z!~FNrCwU9b+kM_<-gi3}aDL+{|HL)mx|{mCKB{u7tGLWvw}$mHp_YiZI2wc&uUYF{ zKdS&rs6R21w+UY=(DiX0j;S>m+f&aOw(j;eClp@$sv5DJL}2Sfn8{6zZ$ zFc{+}ytf^DvDS4je_#bosQ~OuOhwnLaXyvvX==BIc6zKDWY1DhipC9q-$`bKPZX!- zNujUS1oj@#y(*meYZO$Y^res+1sK8B`TEvmN?s%n$scTI6Au!S0CRd$0}FqdcEkFw z`1mKOmL@^~aaLA&$S{dZ;jdx|R%q>}5ChTt+t;eDAKvZ<1Z3)V^B-yFf1iH2xjvjN zx0}~EM>6T8Uy}KUFiVL1^Z5cn5@8r8;8QE`odoI?GKAPSlsP3Me+2h*txr-6@ZCF87PTH&YlG7*X8l z(q0Pw-uk}m7a*+;s;bRe?7u*7Eq;=EJ!R=}G?tWZK5F==z444M@!DtCxkBdgM}gg> z9CE`y=W3{sGfhXO`)_`IP-=G`E;C_sA?u|zF>sO4d(EexV)z;| zelJRbf_O_kQK5nRhm)PhyCZI29$}I*nprhP<~Iu}TffGZEsO3b zvZ^Q5e(lxPz_h4dZY#P?jM0D#A|hgm-UivuuL5`HfA6&%?yfMwF0?&6RqzFdH3|fT zh)Cs0oZr|?F*>ZFy?w7zz^b30+tz%5WAdi|pmDAHoE>1Jv11*Vq`1FKKsumycs#dl zS|^WKW=k)qCf-Kn|3&Z#1aka{=TwGDl(`P4pUqGD=Tf5hyY;?sj%=;$#aVzj%!{P|n6(1{>a`Qs2es=yVcAuJ{XpkctoxjoPK+GZ6ZhLz= z`_F)VS)qElA~lBFkm;wE z;V#8ECY|~`aKiOEhA+KUFuxKrvQzVV>KGXTn<^Be)2428tb~|h0a{z+QhhEDw5`G~ zR_{r3Kkx`}Z~bLqHS7<|B6GBIvB}w4d2${)c2wai(2rm&IjQ|u1grXHBW3|qZ;>9$ zyqyf*v6{+Is;+`sPTaj`zS_8_N^X{h;zvK935y{E5wmrzMT69%<7mRR`u`p!T^S&^ z!HS_DM7~tW>0I(up6yg}2_EM>zc~j3GDY_2Hi9Yr z2J5BzjIRcyMD+FY$zHv{1|gRxzh#fQR1{dUOJk+hJY5BN^zouxbUZ0N^QE3XDdEO6 zG#=gJ$$IcE7tahwu&nui_XCeS+>nDs8QD#M%a&oKo`3_=rp%Q$gw)e5XE&4=SGDZCm|Lvd)gM!&j|a@#U#2g+XiybssV*CA(thyZ8OT)2L* zjA#`%C2rixvmCW!#o>tN*MV5tG000wu7!Yy%O(7Mrx}EjMQ+1Gu!~EGT$MZ^8PEMT z8hv~``~>;;b{6+aec4uhL$l`RE&l=)I2N;-_T3YSazCK1PRm^Qlp z18(sC>mwXNjJ}#vnr}f?0be)zK&)g;v#!^mBLmtoG5KWBBGM7?n*d1T_*Z@pB{cyb z@(q&9)QTMfwq!;%Wq_Z2Y)ICwllz;B;$iTC7L|t_17QA$ilbUu!ouSx?BNv zA)j@~%WVflwhU%aRuF4YZYYqN`c{Y+CZJIHvBiBpjQlZ!y6yUnB0d@ESms!kkO=&- zq<0$%heuO$)~U%S`=v)&R`G}P4US+?V@yHwUbf{D$Dd9+Au{Le7 zcR`G~s}SE*qU+zW+CVoqa8?1L`rpsrBz?YbJRFK|6$8T{kFD{Rg&76}Szh}OpOU$F z=w3w^w_NHLNga~nRlS#4sb+uoE}CI*?loVycpAhT+tWus@2#H$-mizXo6%!>$}r2T z-s2H5iKlq3hryW+C`mX?t>R5(ZmX7Uc<-)#gip0;B}?{-pmqZ=-RM_XnDX@e4&WV# z5jtw*Q+qg2LLo)^E3cfSzbMp6>ly{_1jRTdR9NGS2Ly2--!@92Y3&7E3MiBd*#CO2 z5HMibG^INdxN#JKh4<|(-kA9}FDscIr|yLs80h5 zvk}Z!D+)EGt&=LSXAvxi5By}kXLK!Lb2Soku8pJxNVnYn*~+g7o`nR2j#q#PrLkQF zh`6A4pO5zyZa!Ia`7KPn(rcPJiA_g4(CSN>LUBDq{=5(kI2|a2)4`q06Q>~KcCJ3EzBLDSZv=p({ckV60Vo~p)MJK%!b;fRj%1WkTIrB)=aRZ#DP5`U|0VQ zd*)o&JvL7$kw84CF_8Edr)f;_#O2(Rx7X#7KZoEA}!X@y(ca8l2+BGuNOYZzm1Ut9Dy|9HT zMG$|C5xAlh5gOVwRf^uqzpcef=cvxO@DM=M7Xn0Xl#50TU`=PI<^oElz^pEi1X&Kx zi61fOl82NuZ(1M~GhCGSTI%3PTQE8##Dvdcb<4m9IBjw;FmO1sXJ@6a-%rQD(B9bC zST_lfIgAn4VXRz71-+JZ&VXD^pwN~obz?|~JNUlIl1l>+j6e(Ej{CK-?{`9q< zWw{;ya13hk)&Ls8Qe~*Q!4|i3AAtVEHDzUGcy!LExA^Em$HCU({!rx(Qkbu@O!4IZ zqys(F$VlmL^Kx(bFeAm#da_te`PpH#1oAO{w06hmwN)omL{$oD7f{>j>{+g2N0J0RNJ z>QSm`C_g!}{PtZ^RI(j1NA*1X*?mH;Z{hr#37qLUt1A9dhdI6rx3A2jDbGrEc4+hM zOQ9us1jS>RAISH&CgT>_4JDkm&R7M4l@E2th*OjUhiL{)-($00<{t@ct^K=<*!DjC z!)v3XVeX&ycI22rM~IrgJ3Bk)`h5HPtM2PJgb$yxVk-xS+a>9|Kf7SlYE+cCJ#EFs zR9dG|jHXf@%eZjHtn*R~+V&jQYmPV0Dr@uR&Z{6=Wfga_GxlVr?Sm%I3C#1$>+%%S zG&ohw;GpPQ&(MAixAVC{5a`CvGZUDgQyvIA$i>fJT_2IoVO`c2i0t>n65@6%2XDei zk+y4|@p*jOmm*1r|I!zwg)+-Uhy$t5`;eVW9qBkA8wkFUGL1`M>edoeY{4aV67!=rWx~UJha zp*-*Ko$stJEvY7w%Ut6SktbYlN6@ynhmToFK8Nw$6eelNxOg1B+mnWP+D%p-d(lH8 z6^xx?Q*wja~4YwkRAq2Rj!n^0{m128G&hnZgJ&#x_Q`|HO2vb<^SnaUmfg zmxDl{g~RdPSaHH>@?~k9iJ4v?VzP?Jq?X%J8qFE%f$NuvSq0Mgo&2iqYL)X8@X;b{ zJX5D5Bb3_hAq%VfLSzt&E|E z1@!1 z^>ux2F2ViGT>AtR$mbI@F5X4h(`6`$27GMyrzJp6giDp%F;Ko~J3Mv7+b&$tYXHvL zL@yX&A|K{Wf>b~r&hCmyh#gor8;_PD-C z(^z0DU95IE4qIXxpc^}cR%B#xlDi!z6a{wwtdHP4!rc2CiN84S`}B!w@YL`@WL~fd zv9XKj0)bXGJV8eLx}v9g{uh=txiE}i{ed8bWtg{YP~^9q%byRd{SNv%Tt7KEbhmEK zQ~b6Z7)Mp5CI2P)ocjO<_Iq{YM1icL>|y5uq^luBM?(ZX1_{ts)d4auoKh^fpnFKE zi3?g?9h#%LhDvwPGK@!u>}F<>%-_>W&to7me1eNM2Dhi+@iP{?_Mb$XhR3{$XX1JD zKW(E2JwwC!HBD8goA7M`=e@)Y=538CMTZA%o&z!Qpu*Ko{c_JkyG5(aM0S5vr6?^4DyCF zm$p@&13Lnj{@C9f0_@ylth12c|ENRa6)ilB_ii{BXBR6cm1PpEHwxA^Hpqq=WWUNp zYb`=XFw#(eUMWtqJgy}jgZg@op;%`Blhwxk@JHc0By>9@VO!Rzjw!Bw`ZAxy6_Gxp zGN29*h3j<}CVUWHD#P|F2A&_|dIKvS!m9>A!a>aUZ~BA;biRPJoVb?ww_dm6-VHfR&q~k4yZ=RV~r6F58lu11=oz+y`n2y$>-|4Wng*D z23gkS{D+2m7rWo@BrA3m*Ao=Cu6U7_{cJ^!n97;E&PDh5zE_3%YN@Xz+}mdpBZrRM zUS9f)`tgY^%q4ov`)H76?@RN&oYo&J+C*Xm*is;s<5-M)%$I8wigj>R!sJi1`W<4K ztS8t`^1ArY1uw|khS~p4N-kVB%**!zorb@MmxK9Vbsd*u;Jy)OuzfR7_W5%8F=6dh z&o$KX7s71z^lmz8d_2; znW*TWy#EY@M#oC$Tua5pfkZ*&`f_)EwV|9jz9_*gq9(|wgw~L z`tw5bF>N;it9rK({t!+-0*Wi$`!MLFTx;KWv(h9tP|E@+v)jZh|3Cn9?Ku*au^q*6 z=Lb!?3Rz4dV38?gV1l4wao_u$PyEIDZ}R&v4*SubL4*>@hb8^!){Ez=i{D;eAhJ_? z6&S|HXL$Jh)1|u_&d_!EpXB3D?nweuRa`yhLAJAid!remX*XgPz5s*Y#q0vQBXu2YhAeyI+q0Su z$(w2+I#G*%JRf!I<`kCUA&yMX7 zrRNM~>nAE^;fDVyp5GP(!Qn3!^WSqZS{xTs3o7KL-HGQwtc0)=(5Xf#=gYX^4f~{! zOgE#^YqaFZz=}by&qRH4jTR?dD}%0}50duGUB>iLG6+~S_7Q8%e0_JW5RqY`Y`JwD z1i44CVQ+%H4ucaYcCn2Kymkii6V%|guLxmQubUu&WBD!GZ}ZwplxGNCn+UhHl+gq0 zS5eMX695N*UH{H-F2*9L$Yy0KRM_6NntZ*MJtt8#chzMPVp~LVRTssyzf>{PH z`oyJT){4<92MN^grL|LHk0QRa6-=ber?2QjYh*V^8z73$zlD#16oE%GaEU=E#PA$# zJK|}8>t^fHGR3>=M^@n-xR!@5AzjO3f+dAgCa{ zihMiSaQF^~00A`)06z8=Yqp9DHSoUL0knSbXMg@jNKNno5;6KEl)fw!Ww1>q3|}W8 zLe3%>(q%I0OuxRuvfpW+@qH=kh79ztwM(R7rd39S=q(!79o8Q6`{f2aps(=Iqp$J~ zCabKp^dVXslN$*U9i6Go{vnaO2e$2nZ|%S+d-(w1>Jyn$DPsemC&Tl{GE;?dkogLX zO2{Tkm5Y=gbfrfT?5BShCa&AyFOFvc+~b=>vHs!fbhYGS zNV030Hq{W^M6y94d)<8_ z-%Uq`=F$5ZTy+6ZX(i6dy}iJ-g%6q8hd8}X=!og$bK2px#yVOy1!}!}I1Upn`LY71 z&;*shG>Ufs(Lc0KL>OvIRG#+~F1MT&`JWfLM`}$%8 zFza|n{8*aAhBy?lflFr4cJcdi8Qtr$6Ovypg^R;> z7!J~0Bg&YobNlAi4C4*Mbs&lPM0c1D>x*UG)qeyd4f43{+LG}UMV>J(QA9T$Qy|Gi zcm6V*v~7+>Jp_Gt4bvxdL^8?-b$A-qz7Q-=9gMubaa(LSH( zD4(}>KAwuZ2IhA3E)_?5!OqdFX`7DAClvFgk0}lor;)d(!9mn081BFWAep9WTK%mZEG14 zz_?fcVFs;wx3j`WYf6R`b%6O6=214)3oX zAGe)Dx@}*Lo%<7kiWXM`v*&*)vu$NZubvy#t@QohpmV{#p@@d}?nz~N6sFjBz36JY z?=!{0vDx0^>G)^G(tG%)A1 z&o_{9k4L%W!vx;HKXhwzqzH>kVA%5X2@BpxRImA1xxb*e+4#x10MI&~`qvp1T+ZC) zOn3rdAP%6y$#kS2_1HW_g^N(wG419sqtlV$ZU8*K;=SWH2y{t(6xZ#~BNOF=&I zg7{p}B-(0kTW9JNP8M#>OeS0;d9@}t_K2lg-|)NY+8P__SRRp@+v@g{l9kuCx5K*b z2I1xM+%asXpO8_@(L6$v7BgK%m)OJV>iY5-yDIw^b>J+*nyP!6@DQmH>EI*ZK()vU znaec#XfxHu=ZL9CM7E`lzX7%TkecHKFkN^3`HX~=Z=ie0JTLx0Csa8% zDw8hD0eEHZ$8?z2KJdQMfM!4@m4Py^yc^H^@z= zVHJR7X;*y2PZ52zC`X8F^Bz~@)!NkVc>bASjl6I*%RPA(<`qfCEIlGsrT$oh6Yv#s zuEgR8_~jF@fAzGQYqdy;0R*0>fqaI0!`1Hren8N>taoQ`tuxb04|&o%zW`kzP8PM8 z2zju`bV{DKDNQ#8X?nr(W!8TRo9^!xr>nSG7=4`HOIymW=E7+ej$tiQ5z0%NSi!aX`pwyZ-s;9pmHz-vYQo#cV0I+!0n~4U_ z3NSH;5N~xDQfOIng*TQ{!b}L4Pr-cUzD!I@CcP~^o_^`zECO|SU+%l|_z3EY2CAXg zlS3dwMWfK_6 zc5EZdswHkGYIN0D@W%^n+!*S0nT*4em=xC;ImU^P%_{?A42MXF2*3ZL;jrAnsab~g zyx$haTlJ@(0VY+j0;RuMZt~Flsz+TIOfkj`tR3Ry-yYQm%Gmql{5uS~xNIWmD2E=3 zh{UJJIaD$TjMj1r>uO7$&eQhiCp6iu?ycw2ONaWW4QgvLBF2gFAV$*nkDDaSSS9mD z$9putgi`jhS;`6Ii0!LJ#fZ-97t~*v>LNh|5cQ3vNj4rYZh|*3UO+ zqV4}MPG4F-GK?K7ul%I?BvpMo4MR8^gQeLc@|_MLK@i`D4=2B1g=T7mLBEZ&8wMp) zdVlGo-@4!P69My+^oGad8SUl&aT$(jx%)t6GFRQ(FAIqwOOgEg`WNN3 z2jvg}BchmbLKn>&i4T7o93ChETXN;|p_ml_!znN!Ktqs&iesEX6qVrH_kE6i6zIear53*ct-QRiTdSQGX>F^~{1I2)ivu_N`|Pd;uX z|5e{kT7FI{vK$ML3iiupOMUbCOV`DV!`|IzG~Y_FCb8!bj147X8?+b=Tha4aeoGgLnl8MVNd8;rAwCoZ#Q@do{2C zK{$Oi68@&hqZgFDr5bL6{GVr&dhqBEmq;VSJ{t2NKEd;!@ocY)nZ&pXAALeK@7lR= zPW}1eBN=%YnOV|X`cTnpXh0)Fzug-@(GNl=UNOz1wCK-So553 z3)g$NM^0P}O^wX%ll@P1g-sVG6%%3oediaudpUDeh1fTh|Fe^Ta`b&fGyw-c(kQb3 zDc#6(2#J3ws3s$gLiqnJ<~)4g4jPCDU+;k1=qhdA*um%iEbmN%w-x&eMoa=jecn=N zN>0Q9(cu^d4hyqIpz@F#YNem}Hdt!zZk&Fegiy;rGQ z0Zde9=wYatcZCZ1bp;>yd60vg#6JoqC%Mn0>PR%_e~=ZuInZ2~#cU1RN|FA_e; zhZ@@24;bNKBfSd?NdZE3#c#lMI&O5#)_JF|Cc{O^!9Nw%b8o3jU%Qs92;>s}9xN;r z4P5NIbNeD%SYxj)Kc_88R>S6SQVO0GLB-!V^$tZ(=i2?DO1Oh4a6Gzb`5Vf-(cF98 z2uU(=30!H}C!H+|jxfh&`4d^U7-~>ZQ(L>m&Vd_nb`VH8g^!wG_2&xjj_O3__o(RB zMPFYYKoB~&wof1M2i35yttknBK5%yCuMBzMZEjD~y1aHV(zicUl%X^v$t}>R%;6Cj zefckE2U}d&AeRb8c1{X?mXOf{M;OX+ykJU6tdRh&6Ft~=s8oU*|IGJd!;;CNyuAFU zGc-Bd58Hk%o|sOA5o2&i#g1J^sM7*s%CnQXr}g;zHKiNGt;Bb+@RNI)vCg} z1acYfc@b=43EITZ2+T1(kA)ki!xtAgq^S~Xy&IWgqtLWCYo3%0l9*=g^jKoBxW(pQ% z$AsG|ahG*f98Z|`dk6?#DuavN5)molK|AKhsg>V&kv(@l4uf$3X#PTAw#yOdkGN?O35M$O4S`h&Y${ z|F|W^K7(nn1{I>bmgpaql$05B)0%n|93ZdF%W+n%VM{RIUDZkAk%qcQiX*)aNr@>( zplC#LG@m2fa4!H!_4PN*>kIKI`y?Mr`qkc3>Fcjpi?g#TgsWu{--&H*ZtSbnzmXVm zU2mYoeRt4h9nBoO0zi@QQZ|I2P#!B+xdikex=Agk+84`2hN~Px{|OX%zmk9h|AShr z_c~WHwnt8AG~(@u96!J{0{Q-pT=D(MPU@MO5vK3&sa5~y-3Te|e|JfpSL(H}@3L*{kO4L4j4p;Wwdng7^sUC(o`T1s z)n7V=d=|;FVl3qca0a@%_!d_dcZSoF$bRf5+=66DPq+5lzSaQ}U* z!`4U@^-^~2V$b5bD~OI1C-80^EXtS02_EynRhmQz7$Hth$p6{#m?S znLe|~Q-nEI;bBhEwtnB#oVITCpU=gJ$QWGs4k{C$Ntc{q2hOd{?!YF(LrZ^e zwCfTE_iaB?n1OaVc`lJy=Hz7CqY%-7g?aHzf-1_8$5L0vk8_&;CHt%Gha^8cA3el5 zbQEc$23Hd};}%p#zCr4qcDL8q8WuP%L1w}`jsvHyjPt-qATh5DaG!z(Lfy*5q$iW# zc^wG_g{G5JbI(ufI0guo))=sh;&?OSBY3xszz}X}qUe zTcjD%_wX3Vh%+HB(h9}ts~u=*-E+R$wPSREm9P#Xo2pbT(rElL z+kqSwUZ#wKy_J@Y4Cl$P6ZRKo=IandF*Cu*nH}&`3VnJaXBxL>R!?(;g!JD&ybp(* zBdeXWz6_HgTCuc}3u(XTdRZ;K(lyPFFlM4wE{a5$UJMrdlOTd=I<7C#}w&Swh4nXmBUc}PzTA&*WN zQvuWwMn;bjcYcRK=8IL~`RojJ@(yHqQ;aP}>YK^I-v(`smB8M{49-_uS@Ot+<^+|q z*af`Lg08T+VqmpD;zs%r7&@q?IXPH)NcEAP1|=^&H%YFw29zt>9jA@s;}xvj+HEye(9&oRS95JZ6Ya5mppaGdX#8hK584 z4M<17Llae7(BQ#ufO_AI9PgeR@wxU}HW+U8iW{ye^4cK3`|dep1gtb$m*@MC`hzeO zVKGkB5nY}6fYqhZCy@L>R6_i&4Z?_+cC2>VQ9L8tk%_%o zu43som(mE#D$JUFyT2auw~c`8Y-l*7u)T$K)2O~oZPHDM(TpJLQ6@-oORUgLjbBgV z0&zzSo4QFc_Z;hdZ!l+0BC93pM@}YXde<~lFftWUhsB5RCpDXKVrT2f{H}S$V#{Vg~0)Gt4Pn6B0<~ zW9SUH(AKv#(L3IUyhe=}SjkbMj!?@zh#zj@8S8m^ie|iv+IoqJ5{e}Mb&=xskMv2R z@bK3ztDb{fwv`$SZ%eLHe`K|P?kHMAm?+qZ_aw0hAw*mA(Lc@HDj5InsK4bZ{j?-T zG3tCivTJ{uz{L)5q(EV3_k{WO{>xUtsw`5#>3N{F0`L-7go_*lW`;8b92>CL_3F*! z_m=-goVo;C*N)#{DeUk!?9y4va>Zu}^c^HgG*L_=#K2}j=&a;qJ_iQ}4L-!e$;TC` zjX3xm&ixE_Gn}GE&Fluza7Gi{3rwSom!yGB^lZu%Avqya8JzLs0fxk;>C}FDlYU%+ zWhu>rB~!=foqWou!n;U({x;43tFyO^YNHL`eSrYML!o%^V#VDdKyfcEQi>Iqpuwd; zuof>~ym-+TiaQjS5Zv9RKymBN```O~JZrCW=3~}Mp3KZM&&=HSb^R`8cOSl*FM1p) z9yVW4!XAOl^k)DOX4ofhuH(}z5O}tbFz3X|S|Mho(zpQ@4)4deR@V0r{r=~rkY0nd zUyJLyj3;aJ-wLpo`tlbvx{{;xvp`gb;<&q2Vp%Hn)ePSinULX1p%&fQl?vr^IKQws zH@3xVTSqbHfp7^ND$nnFTzII7S&u?6OgG5G#=-kV(xYfnL!WdHpEa{;X*QLWQRQDJ zpI4I)?ApF_Jc&E?^7ZY4;#4=}r?sB1zS0V4SMV^*Eqt*X+;4E2K=xdpWh_gYH*T9_ zHO|V3iUHngD$+{Y)?Cl^kd5k$c)wDu)%asAy2UGUZ^x|d$ekQF;i-1)!|N9BO=0FwTcINzG=uC>6&(r z{Wa7$3a|#bZla^!gLvaMG6Z+S`bn8+QqE>@Zp*{Jb3z#NLeQPNZC>r8X5cgJHW{K* z^&h5`<^pk8*fq_rVGyUsFSMaYzUzNDj}|uwpOF_t{(La+J+;utoBt0=>N!Le!!)iE%cyL20G$;q37g*zm0 zD%)9p1q)cF$ZyNt9H|oSLB&Yu@GFz7DHS-q-Z;x#Zey@CDaz|@h zG3Q&X9#G)Ekx}~7X)Fwu_b<9pLU2(DZ8|rFiP$O1UL1TMe{w&>|Im8d-*Hr;BUnPP zqIoz0Va{(s8g8<<2cOlx9pE}D4pXI#ALoM=(;(|aLa&yE3TVRYrU`>8%IXn~ZJlmR zL=vq9gFc%B-+kDh#bSBt?``up?p7nB9}$gCUsG6rVFg)dsJhSN>Z7~^#Lr8%aICw> zTQx*}knRBsCX0vt*Z0@yVN5N}8LOPY*zz!?p2@b%f0IagPE)}|a{KYLbUYUa&O zzDRj}QPu27^6hl$4gL2~x8Q&uCViy>8TXU;Fn}lNjUi39MSg?EUpdB~?^0|y&TA?s zPRj5KznS`R4B#Zns&>7NmK7ScsyJCY4K5FQVK1)o!?p2bhYm;HB_(LrId-CepSpa$ z7WsDE-$%t-?N67z(yBhJs*of8V_ew5HXZF-RAer-=Syp0pnPRx50iCqsm6J-x(1R4-0G|7_n$NHm#JpoXqd_wi>Y3s|-n}v7HFZYPNifsWB z?ANZ=v)FZ!rBiYQ@w7k98+;2V)JiR83OZIsUB=2ut?=S&D7I2u2cF8q!9tP0Q+dT^ zY#2C*JNoqA(z;TTfDX}ov9dLPtVmn=Cl_x?;RC;kIAtRBvYFKVT)%RpkI0$eHYRb> zEIKgo4A3Ad;z_)5-xlOy-CLr4{4JR?eJM8O6S;hT!qZb?CsY{sUFs_NjsItz2_VMk zn9&0I_mfT$0PCi|@n(Lq>WluFt{XYNoELBK_y=Bf|CVOot(eIx?z-d8*RvPijnp~0 zEneRvN+2OoAcoiAh~WoPT>7u-3M7NYgZ>DOM{?~UxE2%@!%=0|&k zuJr6IvYuDG(tla1>OpA>GjbC?KW4G@?z;msKxA;y870n2-=AR5N8#5RDCobFTn)@G zJw}_j*3a7$*wajd)>s+2F?QcL*dGVs$ryPy%}Lg)*amiMVjL#`*h|zIV^(=9c-FBTzM%qciOW4F_wM_`OAtfm&E zEKq*^ZsGEAX87L@@~!MaeuJK!@T;%Ja6ju?cAPYn;M33`Hqc@zh)d?b@ys~KgU&AD zar}R#avON3qAOZQ@nSny+%ty{3z*7BY$BI&wim}H&vQI^X^bwXNf$nG`4Q1+j2-O0 zNVKRX`c7ey;}zkTkW!tUPiM95Xj=+2x?P}p7lJB7{~zu7vwqf5Rj~j#PA=SUO7fp(RV@deeUXThL>-pUT;-8!$UWP?zD+@ zxl#4K{jzKC!vEQuD}cnpzX;k6JTn;0Ayz|ua~aVy5&e$d>~%E$XRAv~B$4(CP;PYF zA*Vz;uR-q`dRuYd)1^V&RUf2<7ZF<&JtT7c4sh~`c6jF=s9Kg9+JgzrvX0Z(>ib7_%Tn!WJUg+23P5dcShf)g2`uTpg8F6?@e^Um1Tj zYAL8tlrxE82U(XSEL8^A)%}*8G1lwv2N!8U&2ScgF*Y@*$JO{hKe2HDxRJI#RtQ3Z zD|MPc$y)jUY#P1mA#}pDgg02X`T0R8Rs5QtU(1g|)fnLZ#CG!>gGl*@c*LNL=Br1Q zT8)NAC+9u+kXe-Vhh6RL9v4wp~=%>N!=H*tPq+5C=ikjDARY6-?z$9mAYvJ=fGxd7ly2 z66SkH^+pO~aT{$=ItTvqXlRpXk$Ee>rQyN;za4!=8XQMv!bzl~?Xu!o5UJ;~@*$UR zq(bYJ5Z%hd{cjp_nQqbfatX+bss@GE_e~3NYVbfwBvC@8)eq)Y)55H))DXYx^2LSS zd#-7HDyO4=>y=_zFP72BX>hZT3%VTO3ihS|@2{68g-c_-`Ot9h5Hcc3R64*jtQ&T{cP`~=|87TKvx zAdhqw&CcSx>Zk@c`A+Ord=RUP)yla8c(pVCvqM7UEuNerz{}{MD;HLSWC^!DRQaKb z{EOgVGuzZ>^>CZ{tvEbB&X6-Y<7%&t5$<*P6CtV%C-dV)LS8>LL#q6Dtn!zfCp8wb zpNWfk+yZ)6Q`HA`nGCRYp!ejnJluq2baC8xeI4&kAAjS@y>`rHky{w+kkZP1@4vpr zUc_m3#VP&YwYOmop^El;yW4m8Arp2lhL1~Pe0U7?I{o+aI80nP!>!Dm#pXAy2<)}* z7U2)?#DZ>rBv6G-s!FAK?w@vo&9G|lu0k5&cN4Cf_5U#xO$4O3FGFpIubQ0FNCVs0 zUV+J{b1n+O|BuBe%AfxKzKH*S?PvXWQKB}s|2K0IKA7P?Bncj|8H!i=u%ePSVYZOC z8FzT_#s2|=V|Tm$8GY6t8q~qi68Qd@s*AF^B-E>t$B9bJp)O2U)b@-+%Ye zd)b`jDpaBspQXNc>{iv%vUPq-i_1b^V*gu?$%P~!iKK7e zS~-oFZ4zxi)4jf%{aEOKG!gF_-+m%|GNDZGR_(im?tL|qeE8>23JJ;69-i(mglYQ5 zGH-B}&&NuAhAF7$g74Qjz9$9-`t`h9YOM0rvHYIUWl_TgKFYOzIrHtvfI0!=(P)Qb z&7M8A$;_1Tp*ksSg5|u*!iHNvc?u6tnE-bi9OD}(Q_V-_mjU)K9Ik~B%3|yY~ zm_${W(sy{?W<#M8`O zLrFSChI^sPDB7~$5-);>K-urIXuk8udt+lgYDkW?Sje(MSyvhy`O4UC^5EcmecALe z9y&KFzSjDQ1euqO0LrGOrCkmPKh!kBF{tt$ld)nN(B5f?3PtlKtJ5RX^tCIS?bzz% z1?xh%Owosy=jL29Gcy;+IVpU1WvuyAiH2L00MvQ-cM0lu-`*`sp!bOuP|5Uogl3c4 zieT3{#!v+!Vyf&|XHw`hnM%aw>wc+kRTnq$9X=$X7frobXBjFgg-#+^P zrrS9WIucq&Ki5cDdL6-AvSGiQf^%|c-Sn5!9%N85KCDU#X3)fVq%7bOl@i$EF=<}w zQvxm@9YJX|UdRu)thOJc;vTJCp(wPictdmjmXcD$Th;OL@s|ID$X#9N2G6Nozr^t7 zEnzE4*9p&{cSk|~sq?mN{b$l~UT!X$1=nIIQGC6>yL%)4r?|rx)jfla%l>OUPpSuj zK;?3qbW)Ke%*@QdVqmyR(9r%LTSb?=ZEWDz{M>e*yZsVRuB)pn2bD?rcMGU`U7>xV z!j^@r>nQ@Z>GQrlpy>$nb?S7_O&3Q&N9J#egC>vNxFH4s#g=laQrP{zEK>ha)anZ5 zczU_GrRcTx2W7598N5VO{-Ekfss~p9zbdni6I0)9vWA+PwZ6W-WE-@{Y-}H*(bG9t z)IR7gnNL!(e3N`x&e-A7MbJFJ|LiwK3i;h?pL(s2-x4iDALRhGUN6;gU4h}ntcl6! z1PF*F#B7!in1T(-M|9?$oX`;l$L-3t`v#ge ze%V-SJNCWncT*2#Ep_sru}@4V-poDB%}gk;1Ba-aLwDN)Qn;bLp5zL zJ}20m09Prl{tdo@g2Hz(*XQr{AJ7U&u|B{j&0#)Nl9cTD;da|}#W703e)({bh~sjl z_%r6wXgI_2M@D*FF&y3wR3eWGVulNW&5A#h<98P@J1?2|S-$_Gj1E0@VQsl?b&`+3D&Y1OM zvAXop+zpJ0qreD-X7|gFX*`Xy(sxlPe-XXA?U>eZ<3ZB%Y|avHw_uzKH4UvCciV7| z%}wTScCIkjs0S`j*z*!b-d%uzPDIjDHjYGX;n?`zUJW8QjcVj`W_D&8)!A1u{6~^M zZFgs9{F?onRX={{dM1d7@Xb)hW@Tm?yZ-fvb}lh=pPWppQU>>EQ3c?%aPSiJW(e9Y zp=#NJ05?57y@hxqLAXs1wk?jQ02}L@{ZLqd^uWu8X+CNq`F>sd`iGIBk`k)wO^2Ez z8KuuDQzA;?oATbh3%OqnMs5z=0X~W77tZbO)Gp*~EvwI#B zc}i|tayc+E5_3+S@y*4M&;hHvUC{tSbB-W-^aKZ+d;_tuv0ZRPoDF7jjt`?en-P&f zmY@MbLJ+F?M0Otum};_faPg=5i``aTJ!{hZueHUjdupnY-QbEeikVT3T=|2$`};9n zh~)wMZ3^+|f*Y}LVa{=xp5+Ie)Zb@DDMlmBD8%#3_UK!;u$fsA6El}wi69)Me~^w| zvZd_BmHqiSD^JBL+dmFZpY#f>b=o(p~KTC+^_5{qlf3Ncwqf#k0tJ{Z<|#VOjp$!7Rl%qA*&l_D@|JNgTS+U!Z9 zD~mAbk1N++^l#&pF0nv;Y-OK8e$4$wit{-uMtpsjx!qq#`sXvISt4|9a%tkSl(I=i z&!uMTd||LU4GQSs2Capx_?pbVYTC}Pl#DT&ogWgVv&i`u9MVQinqMQ6bFohJfY!x} zz2espa_;G&3hcdCsR_)Jj3_^#=k9o}HwDjoguhtc1t?CZ*#rT}o)NieG`mN_BI{`A z(LGT^wgunt5&8}|UPe4Ll_b`n(OnL{qFW4D?>3?mC3P6zFH$q}HEyrfo9h2_=t$Gt zJ8Y0uy$Umf#+E3@R_D#Uf-`FNj63c?*{`q;8S-K=*{2 z+1}8|;{JGo%ah6fg7%Ek%!;}{N1|dB0WrZm$ynmUjzNL$zClkT&e2+#x!3G25JU?g z%`HahYkOcoSik*>9>{GgWc4)IXGo4Up9)SWI|z?)eL=fFXe(9slTe8nT4;hm*R;rt zkvYJ%|8ey$16qhUwe>xo@Ws0~ zE`iqWc6@a31cPM7Jn%sgmyeBrc4ib%|6kDFh%}^~@F{(Yx8(GP`pwjAbduNxo$rmD zC_}w(n{E!}7%2 za=ns1MSB(h&n#|yl#QDb1Fr6$nMRtbvT(-2I8`K5t5L#Az^7%hnkKexjS0hC&0aQCRE=-Do1}hB@7BijP(;j1mH6Dqv?v9yT^=fIht4C?UZTwk^7G zos7Yq<*5sfHXH3^nU|!>H8i^{=#?&Pz<__Svb=(HevD}hwaH{s_*^oJ8#~A++#@tp z!Jats!x?;_8YAybW8|0a(l2z@QT(+&dV5oVflRD}LZ>|jLf;C)i%%(|i9gvXtTml&1I$Te5l^N+GujM8DnFi($OfX_qD^j7?3^ zrWvV0t}Y4A^RIM8>I5YK7GmEg_FF|XyEQjz(;;hr$}J~Hb1})L_M=XPkY!BlNAM@m zJ+^DS-x__0M;6DX_@f%#X45p5*e;!?F6&Pylqv2hPlKjK%)6HvfFR^O2%pf(@>^=Z=%PM?#Gn$)2!cY+0zsPSR-Di%oZ2qR&KW!WjW_( z+QcjQ;0wT$vkA7+s}QA|ezpjoWU8G2_jMRAr>PFbyBEQ)A1k5htiyLD!RhkP3M*MUkn$>tf*|dkVJ!jMf6ESn`0N=Z{b| zI!6krkdNR0eUT{Z&tkHBLA#w4DS>l}Bf-@+-J`}iJJlnG|Cga;D`ec}qEZvQ@3P0= zuD}*hBE4s+Kf>O>@EL#`C`NIKA;AHn?dIGKqcHW6ljT1jU*B>BpZc)|(y2|z~>loEI zB-eN6r~k&MlBL=-Gh&dh{__*f>mv`|X13e_B|y1pgUhlP{S!j)JWa-6G=_6g^JH@Td4LSOs>l?;12FAmt`uFZFFVInX7)Fq*uzrgw3);ZKdSgM#yJ@3Us^s{_UB^^zPn zZRy84|GWL+ld_V4wTEyD(=TrQsbRentT4W>duWUaTG$CAZg{@j>4ybtT$Vg?@@ix}^oblg)B=o~7HfO~8 zcScTWN*_VK9W-6h2$3V>A<=pC=>-$QWc460p%p1GL?#T|=Hvp`y7)FV;uk0QL~NaD+`Lx8#o^so9eP^y${J z?x!q$n?wvBi*vcnxD#^R(@z)FNJ8EUVT@sp5p5>C<+H<@8V~frlBH6p*kjZ~<-TN9 zT~Lk_Ou-8Xd0m5?rg3jAHx%ZRRhzjMVyiL7$}*qw2(b@k!Nx;Pvk*N`nxU)W)93O+k`l)SjA1`npEV{Stbpvhec`$|plW}!Hor-eHrDl* zW?0#zT?cN`1YT5czI}!*!x59qoOGrCcoKL^m;#Qm3lTin$YwE_5j08$F4C&XYWx1$ z!Hmv=sudX#vHLdW5d^AqqL}B`YdE0MGEmWKjJ#-B$uXrG39_uuFMlCO9ryH;8xs5s zmYQvJr)X3JxIP|@)manYH7$jpKT=(B?CTVFCiAYfV4ESr_AZ8kQg8{SNE{_60rn>PnowenKx1w(JV?MujGZzmM%?D^LXwDBi~P|s{(!Q_ z!dSez5C6nq(GJw`v}9pxNiichhH@)O%) zFKxt_ZX9Kq*W5F3@oFStyCH%tL+Nk<%>XtsTEKWZ`{H-F!WrN-qos4<9YI1Jql2Nw=k_%L}7Lv}Pb^Yo9UBMf?0o-OkYbn5QJe&Rb5>HNI( zfnjG^OBIZhVdv~b_TC$`Iz*KqWKzZ6oVnT?nh27<$YWRQ;Bv`-eH#?&z8F2pW;FT`H$<-ZH)3>k%MUULM)!xJL9;Bh5a2TnoWRR>?Flz!Q}10bg=# zze|ZOFIlY(ns=Y+?y`y3y9IPz*9laRa|KG{Od181vsLPF5rLKF4TA`n)YmWi^pT8(hwQ=5L)(30zoRUAY=o(xUuJ9-7~6YrQ(JwVFfv#cvlAR z7p81L$n8+)2>!KI?9*4QIDw%tt{&!dUg5@!OkenK>7HlyRF}VvuEy6Jl zscmpcc&>;=5C5a$yRFFn4+CW7&Gvo?+*ZdZ|NIOYD@-Vk&N4GaRX^Uf(BT(cEcB9_ z@9vm7Z1)dXlH%#TJ)|ir+EU6XL&1~dCE!A_%UYdlZ)Eu1lefd&q+9cPh_m6M zbl1RT_$)mDV}~$lQ@YRC zo+oJ`fOv-PeJl2wY*zu@ICO0shF@|h6Nva`V3EkX(o=Od+KQuHcAk^!e5=4YHH_cA zK~1X!YW3$lwHldk;Wf}mbl*hW13wg@tCkHCNmYVa1Dr1ec0NV9#)oxntkWo=oM1{G z0^I`TT|TX5{*%^5@9grl?w*zOtW0(7uc?^-N*3E=qE$A&4Y{f@9UEO=j4$TWDV}f; zfRlzPU{_uUa=I7dE+)LyZo4$5UQo;h9B2)52M`(Xipc||7%PwI1q_V`l=*hagGi&w zg+-zOtZeoPtHj9X$ONTy;89vCK}iKNLm-T*|H;w-|1rlZT3#w9_wTI z!=~wE;&wBB2k)MN?j2nHZtQV`z*FtfX!49s^fA~ro2_y`Skz$pK>VR!FD`0(hl1CP zalHTV96$;+9U2Sw*_qpM>l*8}SW8%8HQd7^TPG$mPMNFQOA4*G%kE@mC*x?AEjfT|30Fe zmy2`S?zUs1cN@v_oq83xE)!XR$Wby(rJ~31+&DrLgiOT?niGKnI~_8Qn>J)_^Q4b` zFcw0&z*wgd!2!Ct;#R?L85SupP*BV_hxG8@dht|t3lKhp^9AkYJO9|otq|J_UN_dm zUODD~?E&FDI{z#c+8wa5)NPY;V4)&5cNO`SdM!QuPc&Zk*&(9gyvhsNW5Icrl|`(7 z1@&U%dxk!}>G|OEB5UlYu=uofwqsV=&Df_BCm+4ajms>8FL$aBGuR-M6_TA_xSSRdI(Q3EcCbQTYQ^}3c_~UOHoW~ICJQ?VlV-V^|xMjdU(hN z?mk|kCvO-BcPf%2-hEW8)Bib>P#%}K2+8FsW4Vb}?BC#x2%fz@L&|Y(^O1~LB;E5i z={t1&`joV)-8{ahPSL$}oY)E*w=KFyMOk@JK!g&VEkyDak(NI~l9yP& zUW4FSzyMWrXhhh@$G(l*+B7Y75i6r?PiHuZ6|CPn6fx3HSR$ZyhiI4_VN zlgW@iycmn&CYfY3zZjA(Vm*WOd#jN>%Jg4)`-wFlNrX!I>|KInzNC}&7l{)Y-Cik( z$AhUKS@vKOW2x2&>u94InkdMey{OOt+Epe92#mOBQF-I zdvTc89bQ=1^X-ROsFDTWp5~8lI!??M62!Jd_z~1a!9UmNX4!=Z;?Y^G)d-44Mznlc z0_1j_eqpn~NqX$$fp~FO38{oB`k)KOk|{+av}TR`Zx3a;GNKY?@GG~iW3I8m;T-g# zNF^W0JGxz+I1Y{E7emRd?5_w6gg1X0)N^h!(xyce<&T~wG_O%XgL%R0gnfXZE@qql zR(pla{MjJ}?$!;uAnDvsG3 z$f`WOr~7yosE_<2QV5cJHg>>FdkFy?htMTiFZ`Ci!+rV!%uxV@_@Aa-)a81dZQR>$~f3gJWrSV2srr_aAS35p%d<=Bx1DlQ{b#StUv`OZUm*;AIsEW81E8pt#D zq4RJl>@3n!Af0hX`dBbU{p+4UR3+whZmb2`M|+wJ1TTUhaDdczO*rt=U+7rf860-n z)5kBB?|cqvsl=4WKjzQirv-e>C%nU*(tLNLmVIO#YJ&`iR)>#0lE6gj=zrTdQMhqU z4A&w{)SVp#+g`7T3mGUBnHgW`QQjBKXmlS)`LtQ1e^Kb6&3pZ&Dr@R5fy|i=g?x8> z7G8@r!+9WC2L-&LOC&tEw$^(&+lb%1_OG+G?=+b;gO9j8;-IwSCG{a%J~0~JSj=h= zx}qZy@k1VgUJb(9e2ut&Vk4i_oKi=gU2cqnv;dBwO!WnX6^T*M_Fj+TQcu)+B9~qL z#<@<8bX(WC^k`5$klhr+8c>i3OCAm^ct#9lACB=5G*^pgE(6@fnqeM9HZ1l3fN)IG z`RLIBF}AY(3-Nu;%`5cieC^B6$aD1QAI+g*)u&$`^hKq1vRVtb?H*WYuk*&QTnrz< zJwf?xmDdAEidBXO z(zTG_L_uA)3ZEs9q$(IkXs8@7zq&~x>d1M z8!^{2bbAakPSsciAwLQBJ&=sDTO~xHvC5%m*lZY0;k-+t^AXsG6n0F8%Uk?1uPL?@ z;+of@&u}3CUykU29fEf)YZPt>KrVay-7%fABmQ++^iy8YLT{U&+Y&fW;1waReO#mf znDZ2RnqRA%SoRq(by?rg)^-u+-L8)5@+x=xHe#!H(Zt*F1H$O!gK)taVOaD^l-1^G z%&)HgL%mjuaKybq*-Poj^9c}$ygN|TbLuy5@*Sxv(IXC*xGsSt53fdj*J$w3iOpmK zL3j2y%19Ce43j-mo_$W(0YZ^xTfY1`_!{j|nNY}88M*c;uQ3~QHJ zEh&0#M!>F;h0`5WgB~564-pf{%Mi{FTLY*K27h47p-SO+Im96S7?JQTEBzAvIdMpX zs0zHN>m~5Ig6_N^rZie$&+H(d>#oOci>_AgJVTx(r?q%bMP0%NjgXvz8snV$MaCD_-lx(%QN=fD zXCNTpOTNQmjhj~{TMa_*;Wa@>UAkNLNhGPQ6l?XR9C?NFP<{tH^U);nQmqJD679h^ zf`bh@KGVonKr(ve1@LUE;mR$S419t5DJ=2z+QkF^bAA*Boo*^ULUr`S+u2>Nz^xq|V>BOB0 zZ)N`aMK`i);_89IE#h>UEexcuBo6YGTMgh`m3Bvtp+Re}iWc`5*Az-R_m(v|1GRF` zq6x2(^q^kBS0wuup0rxTLm2Z`K$VD$txE%eHy6XR?>Rdf$02Vd8b7tLJ!l@BZz_&` zO8qFXyWW>SVF%pH3tq(>A8u1w-KF0CaIFiG`Yb<~mzQ4jOgW=a;r47kU?YQ@L`O-# znnSy#-UDE5WU?M;emNJ&$=T}StKiD(q)?DpJbW@=r+tZ8ac5T(vZ;XE?C~L?rTO>hGwZiQ!@4Idt1|BH*_?w%t|i9uE8E-e z;181D|4!ltQ?Og>;q50Vl|s1Iw&o&Ka+Wub()rh;t3+yTMKt_2D!_VbokMUs{P#3m zE1}D^brChKT!zb|^3Bo_6^Ah6o*N;gTdK_R(`il$4HKuC5A+OE!6(~uRo*b-_iX4H z-c)9MW5vw{s*WKCpNMtZ*jmH|BX75(f)5dUKN4e@bf?ze zE6^R{pC}zV?{GqECSw&}7^To1)`iK`I)?YGxK)R>Vk*M}9YmPnXf1%oCtGb+W^f0na7b{?kn|ee;d-s@F>pgTQb~ zz_^2d>`oMW5KXU4ifuaya8Cf3j59a^*HWSl{<{Qu8 zhd(oK0;V=`>_eU^<2IL??}+P9S6rYdg=p_t=z`G^)SY(1=je{RJ$OP`KUgKrO01au zxb|}qDo5#9o%ueksD(sEB`VtQKlLNG!aFwG!@XXjq8N`?wK^8=Z-I8Uw*6$@pPktX zY9(mZ{D17BPKg2g^Diwea@6vvd~~9Si1$1t{T~u{2gr_+y~2QtL-Ai0X(|5uxe2K` zOq$0-==X+lM#SPAN8B|stX0okiuqwR(UkkrmCp*s!HBG^nU>+ C0V>G= From f3224cf5238cb7db964e05b1e7ba3bb0bc6b604a Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 14 Oct 2025 11:21:16 +0200 Subject: [PATCH 33/38] docs: add Docker instructions to README.md Part of a set of README.md updates for all our major websites. Test-bot: skip --- README.md | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 42105f7..0ba5475 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,106 @@ # keymanweb.com -Home page for online web keyboard with support for over 2000 languages +This is the source for the website https://keymanweb.com/, which hosts the +KeymanWeb online keyboard supporting over 2500 different languages. This site +runs on Apache in a Docker container. + +## Other Keyman websites + +* **[api.keyman.com]** - database backend for Keyman websites +* **[help.keyman.com]** - documentation home for Keyman +* **[keyman.com]** - Keyman home +* **[keymanweb.com]** - KeymanWeb online keyboard +* **[s.keyman.com]** - static Javascript, font, and related resources +* **[website-local-proxy]** - run all Keyman sites on localhost on the same port + +## How to run keymanweb.com locally + +When run locally, this site can be accessed at http://localhost:8057 or +http://web.keyman.com.localhost:8057. Note that the site is internally called +web.keyman.com, but the public site is at keymanweb.com; web.keyman.com +automatically forwards to keymanweb.com. + +**Recommended:** Use [website-local-proxy] to run multiple keyman.com sites +all from the same port (default port 80). + +**Recommended:** Use [shared-sites] to control startup and shutdown of all +keyman.com sites together. + +### Prerequisites + +The host machine needs the following apps installed: +* [Git] +* Bash 5.x (on Windows, you can use Git Bash that comes with [Git]) +* [Docker Desktop] + +
    + Configuration of Docker on Windows + + On Windows machines, you can setup Docker in two different ways, either of + which should work: + * [Enable Hyper-V on Windows 11](https://techcommunity.microsoft.com/t5/educator-developer-blog/step-by-step-enabling-hyper-v-for-use-on-windows-11/ba-p/3745905) + * [WSL2](https://ubuntu.com/tutorials/install-ubuntu-on-wsl2-on-windows-10#1-overview) + +
    + +### Actions + +#### Build the Docker image + +The first time you want to start up the site, or if there have been Docker +configuration changes, you will need to rebuild the Docker images. Start a bash +shell, and from this folder, run: + +```sh +./build.sh build +``` + +#### Start the Docker container + +To start up the website, in bash, run: + +```sh +./build.sh start --debug +``` + +Once the container starts, you can access the web.keyman.com site at +http://localhost:8057 or http://web.keyman.com.localhost:8057. Note that the +site is internally called web.keyman.com, but the public site is at +keymanweb.com; web.keyman.com automatically forwards to keymanweb.com. + +#### Stop the Docker container + +In bash, run: + +```sh +./build.sh stop +``` + +#### Remove the Docker container and image + +In bash, run: + +```sh +./build.sh clean +``` + +#### Running tests + +To check for broken links and .php file conformance, when the site is running, +in bash, run: + +```sh +./build.sh test +``` + +[Git]: https://git-scm.com/downloads +[Docker Desktop]: https://docs.docker.com/get-docker/ +[api.keyman.com]: https://github.com/keymanapp/api.keyman.com +[help.keyman.com]: https://github.com/keymanapp/help.keyman.com +[keyman.com]: https://github.com/keymanapp/keyman.com +[keymanweb.com]: https://github.com/keymanapp/keymanweb.com +[s.keyman.com]: https://github.com/keymanapp/s.keyman.com +[website-local-proxy]: https://github.com/keymanapp/website-local-proxy +[shared-sites]: https://github.com/keymanapp/shared-sites +[enable Hyper-V]: https://techcommunity.microsoft.com/t5/educator-developer-blog/step-by-step-enabling-hyper-v-for-use-on-windows-11/ba-p/3745905 +[enable WSL2]: https://ubuntu.com/tutorials/install-ubuntu-on-wsl2-on-windows-10#1-overview From 8590fc54efc9d6990546850ebdfbafdba1d11e57 Mon Sep 17 00:00:00 2001 From: keyman-server Date: Fri, 17 Oct 2025 03:49:26 +0000 Subject: [PATCH 34/38] chore: update BOOTSTRAP_VERSION to v1.0.7 --- build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sh b/build.sh index 04c255d..c455dc2 100755 --- a/build.sh +++ b/build.sh @@ -2,7 +2,7 @@ ## START STANDARD SITE BUILD SCRIPT INCLUDE readonly THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" readonly BOOTSTRAP="$(dirname "$THIS_SCRIPT")/resources/bootstrap.inc.sh" -readonly BOOTSTRAP_VERSION=v1.0.6 +readonly BOOTSTRAP_VERSION=v1.0.7 [ -f "$BOOTSTRAP" ] && source "$BOOTSTRAP" || source <(curl -H "Cache-Control: no-cache" -fs https://raw.githubusercontent.com/keymanapp/shared-sites/$BOOTSTRAP_VERSION/bootstrap.inc.sh) ## END STANDARD SITE BUILD SCRIPT INCLUDE From 05c8dfd1c8b927d27a193dc69c81ea5271b445eb Mon Sep 17 00:00:00 2001 From: keyman-server Date: Wed, 26 Nov 2025 06:13:49 +0000 Subject: [PATCH 35/38] chore: update BOOTSTRAP_VERSION to v1.08 --- build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sh b/build.sh index c455dc2..19ea186 100755 --- a/build.sh +++ b/build.sh @@ -2,7 +2,7 @@ ## START STANDARD SITE BUILD SCRIPT INCLUDE readonly THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" readonly BOOTSTRAP="$(dirname "$THIS_SCRIPT")/resources/bootstrap.inc.sh" -readonly BOOTSTRAP_VERSION=v1.0.7 +readonly BOOTSTRAP_VERSION=v1.08 [ -f "$BOOTSTRAP" ] && source "$BOOTSTRAP" || source <(curl -H "Cache-Control: no-cache" -fs https://raw.githubusercontent.com/keymanapp/shared-sites/$BOOTSTRAP_VERSION/bootstrap.inc.sh) ## END STANDARD SITE BUILD SCRIPT INCLUDE From eea9658f06cdfd958b1f9926e76190fd77f32dcb Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Fri, 9 Jan 2026 16:56:59 +0700 Subject: [PATCH 36/38] feat: divide scripts into operation and feature folders; functions and styles include all of the new kmw design --- cdn/dev/css/footer.css | 0 cdn/dev/css/kmw-body.css | 265 +--- cdn/dev/css/kmw-desktop.css | 157 +- cdn/dev/css/{kmw.css => kmw-global.css} | 44 +- cdn/dev/css/kmw-header.css | 715 +++++---- cdn/dev/css/kmw-interaction.css | 62 + cdn/dev/css/kmw-mobile.css | 260 +++- cdn/dev/css/kmw-screen.css | 71 + cdn/dev/css/kmw-tablet.css | 475 ++---- cdn/dev/js/api.js | 6 + cdn/dev/js/feature/copy.js | 28 + cdn/dev/js/feature/eraser.js | 89 ++ cdn/dev/js/feature/expand-textarea.js | 14 + cdn/dev/js/feature/font-slider.js | 7 + cdn/dev/js/feature/hide-keyboard.js | 14 + cdn/dev/js/feature/kb-selection-menu.js | 366 +++++ cdn/dev/js/feature/pagination.js | 43 + cdn/dev/js/feature/search.js | 180 +++ cdn/dev/js/feature/tool-tray.js | 95 ++ cdn/dev/js/kmwBody.js | 118 -- cdn/dev/js/kmwElements.js | 36 - cdn/dev/js/kmwHeader.js | 1356 ----------------- cdn/dev/js/main.mjs | 133 ++ cdn/dev/js/operation/bundleKbSelectionMenu.js | 18 + cdn/dev/js/operation/confirmKeyboard.js | 19 + cdn/dev/js/operation/handleKeyboardData.js | 17 + cdn/dev/js/operation/keyboard.js | 94 ++ cdn/dev/js/operation/keyboardDetails.js | 31 + cdn/dev/js/operation/paginationLogic.js | 17 + cdn/dev/js/operation/platformSupport.js | 17 + cdn/dev/js/operation/rememberState.js | 36 + cdn/dev/js/operation/resizeKeyboard.js | 61 + cdn/dev/js/operation/resizeTextArea.js | 20 + cdn/dev/js/operation/searchAPI.js | 11 + cdn/dev/js/operation/searchCardContent.js | 136 ++ cdn/dev/js/operation/searchLogic.js | 87 ++ cdn/dev/js/operation/selectedKb.js | 26 + cdn/dev/js/operation/toggleInstruction.js | 27 + cdn/dev/js/operation/validURL.js | 13 + cdn/dev/js/operation/waitForElement.js | 12 + cdn/dev/js/state/appState.js | 65 + cdn/dev/js/state/elementSize.js | 12 + cdn/dev/js/state/elementValue.js | 7 + cdn/dev/js/state/enableKb.js | 29 + cdn/dev/js/state/fontState.js | 10 + cdn/dev/js/state/selectedKbList.js | 10 + cdn/dev/js/state/storage.js | 35 + cdn/fonts/social-logos.ttf | Bin 17356 -> 12968 bytes inc/head.php | 57 +- index.php | 190 ++- 50 files changed, 2941 insertions(+), 2650 deletions(-) delete mode 100644 cdn/dev/css/footer.css rename cdn/dev/css/{kmw.css => kmw-global.css} (58%) create mode 100644 cdn/dev/css/kmw-interaction.css create mode 100644 cdn/dev/css/kmw-screen.css create mode 100644 cdn/dev/js/api.js create mode 100644 cdn/dev/js/feature/copy.js create mode 100644 cdn/dev/js/feature/eraser.js create mode 100644 cdn/dev/js/feature/expand-textarea.js create mode 100644 cdn/dev/js/feature/font-slider.js create mode 100644 cdn/dev/js/feature/hide-keyboard.js create mode 100644 cdn/dev/js/feature/kb-selection-menu.js create mode 100644 cdn/dev/js/feature/pagination.js create mode 100644 cdn/dev/js/feature/search.js create mode 100644 cdn/dev/js/feature/tool-tray.js delete mode 100644 cdn/dev/js/kmwBody.js delete mode 100644 cdn/dev/js/kmwElements.js delete mode 100644 cdn/dev/js/kmwHeader.js create mode 100644 cdn/dev/js/main.mjs create mode 100644 cdn/dev/js/operation/bundleKbSelectionMenu.js create mode 100644 cdn/dev/js/operation/confirmKeyboard.js create mode 100644 cdn/dev/js/operation/handleKeyboardData.js create mode 100644 cdn/dev/js/operation/keyboard.js create mode 100644 cdn/dev/js/operation/keyboardDetails.js create mode 100644 cdn/dev/js/operation/paginationLogic.js create mode 100644 cdn/dev/js/operation/platformSupport.js create mode 100644 cdn/dev/js/operation/rememberState.js create mode 100644 cdn/dev/js/operation/resizeKeyboard.js create mode 100644 cdn/dev/js/operation/resizeTextArea.js create mode 100644 cdn/dev/js/operation/searchAPI.js create mode 100644 cdn/dev/js/operation/searchCardContent.js create mode 100644 cdn/dev/js/operation/searchLogic.js create mode 100644 cdn/dev/js/operation/selectedKb.js create mode 100644 cdn/dev/js/operation/toggleInstruction.js create mode 100644 cdn/dev/js/operation/validURL.js create mode 100644 cdn/dev/js/operation/waitForElement.js create mode 100644 cdn/dev/js/state/appState.js create mode 100644 cdn/dev/js/state/elementSize.js create mode 100644 cdn/dev/js/state/elementValue.js create mode 100644 cdn/dev/js/state/enableKb.js create mode 100644 cdn/dev/js/state/fontState.js create mode 100644 cdn/dev/js/state/selectedKbList.js create mode 100644 cdn/dev/js/state/storage.js diff --git a/cdn/dev/css/footer.css b/cdn/dev/css/footer.css deleted file mode 100644 index e69de29..0000000 diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css index b3652af..d447622 100644 --- a/cdn/dev/css/kmw-body.css +++ b/cdn/dev/css/kmw-body.css @@ -1,84 +1,65 @@ -* { - box-sizing: border-box; -} +/* + Name: KeymanWeb's Body Styles + Copyright: Copyright (C) 2025 SIL Global + Create Date: 5 November 2024 -:root { - --textarea-box: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset -} + Modified Date: + Authors: Meng-Heng -body { - overflow: hidden; -} + History: + Description: All of the styles for KMW's Body +*/ +/* +========= +==Icons== +========= +*/ +.fa-grip-lines:hover { + cursor: grab; +} +/* +================ +==Section Tag== +================ +*/ .container-flex { display: flex; flex-direction: column; align-items: center; width: 100%; } - -.hidden { - display: none !important; -} - -a { - margin: 0 !important; - padding: 0 !important; - text-decoration: none !important; -} - -/* Icons */ -i:hover { - transition: all 0.3s ease; -} - -.fa-grip-lines:hover { - cursor: grab; -} - -/* End of Icons */ - -/* Section Tag */ - -/* - Text area +/* +============== +==Text area== +============== */ .textarea-container { display: flex; flex-direction: column; justify-content: center; align-items: center; - width: 100%; + width: var(--textarea-width); + height: var(--textarea-height); } .text-area { padding: 10px; resize: none; width: 100%; + height: 100% !important; box-shadow: var(--textarea-box); font-size: 16px; border: none; padding: 10px; + line-height: 1.6em; + font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; } - -.text-area::highlight { - border: red; -} - -#copyTool { - color: var(--keyman-blue); - position: absolute; - right: 10px; - top: 97px; - opacity: 50%; -} - -#copyTool:hover { - cursor: pointer; - opacity: 100%; -} - -/* Divider */ +/* +============ +==Divider== +============ +*/ .divider-container i { opacity: 50%; } @@ -87,23 +68,25 @@ i:hover { color: var(--keyman-blue); opacity: 100%; } - -/* Items at the middle of the divider */ +/* +===================================== +==Items in the middle of the divider== +===================================== +*/ .middle-divider { grid-area: middle; - justify-self: center; - height: fit-content; + text-align: center; + width: 100%; + height: 100%; z-index: 1; } - -.font-size-mobile { - display: none; -} - -/* Keyboard */ +/* +============= +==Keyboard== +============= +*/ .keyboard-container { - width: 900px; - height: 500px; + width: 70vw; display: flex; flex-direction: column; align-items: center; @@ -113,26 +96,36 @@ i:hover { .keyboard-area { user-select: none; flex: 1; - width: 100%; - height: 50vh; - border: 1px solid var(--keyman-blue); -} - + width: 70vw; + height: 100%; + border: var(--keyman-blue) 1px solid !important; +} + +.phone.kmw-osk-frame, .tablet.kmw-osk-frame { + display: block !important; + position: relative !important; + height: 100% !important; + width: 100% !important; + max-width: 100vw !important; + max-height: 50vh !important; + z-index: 0 !important; +} +/* +============= +==Examples== +============= +*/ .example-box { background-color: var(--keyman-blue); color: white; - width: 100%; + width: 70vw; text-align: center; padding: 5px; border-bottom: 1px solid rgb(159, 159, 159); } -.desktop-keyboard { - width: 100%; -} - -.phone-keyboard { - display: none; +#exampleBox { + visibility: visible !important; } .example-box p { @@ -143,118 +136,4 @@ i:hover { visibility: visible !important; } -#exampleBox { - visibility: visible !important; -} - /* End of Section Tag */ - -/* ================================ - Computer and Laptop screen sizes -================================ */ -@media screen and (min-width: 940px) { - .item, .section-items { - margin: 5px - } - - /* Divider */ - .divider-container { - user-select: none; - display: grid; - grid-template-columns: repeat(5, 20%); - grid-template-rows: 100%; - align-items: center; - grid-template-areas: ". left middle right ."; - width: 100%; - height: 15px; - } -} - -/* ================================ - Most Tablet to Phone sizes -================================ */ - -@media screen and (max-width: 940px) { - /* Divider */ - .divider-container { - user-select: none; - display: grid; - grid-template-columns: 1fr 1fr 1fr; - grid-template-rows: 100%; - align-items: center; - grid-template-areas: - "left middle right" - ; - width: 100%; - padding: 10px; - border-radius: 5px; - box-shadow: var(--box-shadow); - } - - /* Keyboard */ - .keyboard-container { - width: 100%; - height: 100%; - } - - .desktop-keyboard { - display: none; - } - - .phone-keyboard { - width: 100%; - display: block; - } - - .keyboard-download-box { - display: none; - } - - .spacing-purpose { - display: none; - } -} - -/* ================================ - Smallest Phone sizes -================================ */ -@media screen and (width < 565px) { - .font-size-desktop { - display: none; - } - - .font-size-mobile { - display: flex; - flex-direction: row; - align-items: center; - border-radius: 24px; - opacity: 50%; - } - - .font-size-mobile button { - border: 0; - background-color: #fff; - border-style: none; - } - - .font-size-mobile > *{ - margin: 0 5px; - } -} - -@media screen and (max-width: 400px) { - .example-box p { - font-size: 10px; - } -} - -/* Animation */ - -.textarea-animation { - animation: highlight 3s; -} - -@keyframes highlight { - from {box-shadow:#2EADD3 0px 0px 0px 3px;} - to {box-shadow: var(--textarea-box);} -} \ No newline at end of file diff --git a/cdn/dev/css/kmw-desktop.css b/cdn/dev/css/kmw-desktop.css index f139398..0cb3f68 100644 --- a/cdn/dev/css/kmw-desktop.css +++ b/cdn/dev/css/kmw-desktop.css @@ -6,75 +6,102 @@ ====================== */ - #kmw_controls{ - border-top-left-radius: 8px; - border-top-right-radius: 8px; - -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); - } - - #kmw_btn_osk{ - border-top-right-radius: 10px; - } - - #kmw_controls_start{ - border-top-left-radius: 10px; - } - -textarea { - height:260px; - width:554px; - float:left; - margin: 0px 10px 10px; - color:black; - font-size:16px; - font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; - } +#kmw_controls{ + border-top-left-radius: 8px; + border-top-right-radius: 8px; + -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); +} + +#kmw_btn_osk{ + border-top-right-radius: 10px; +} + +#kmw_controls_start{ + border-top-left-radius: 10px; +} + +/* +====================== +==Mobile Tool Box== +====================== +*/ +.tool-menu { + display: none; +} form { padding-right:10px; float:left; - } -#messageContainer { - float:left; - width:80%; } + /* -====================== -==Keyboard Examples== -====================== +================== +==Mobile Divider== +================== */ +.left-divider { + display: none; +} -#example,#help { - margin: 5px 0px; - text-align: center; +.right-divider { + display: none; +} + +/* +================== +==Tool Container== +================== +*/ +.tool-container{ + background-color: var(--bs-body-bg); + border-radius: 15px; + border: var(--bs-border-width) solid var(--bs-border-color); + width: 400px; + height: 50px; + padding: 10px; +} + +.small-icon-tools, .large-icon-tools { + height: 40px; + padding: 0 10px; +} + +.large-icon-tools { + width: 50%; } -#example { - visibility: hidden; - width: 100%; - min-height: 10px; - max-height: 45px; +.small-icon-tools { display: flex; + flex-direction: row; justify-content: center; align-items: center; - padding-top: 5px; + width: 50%; + height: 40px; + border-left: 0.5px solid gray; } -#example a { - padding-left: 10px; +.small-icon-tools > * { + width: max-content; + height: max-content; + padding: 10px; + margin: 0 5px; } - +/* +====================== +==Keyboard Examples== +====================== +*/ .highlightKeys kbd { - border: solid 1px #808080; - border-radius: 4px; - background: #cccccf; - color: black; - font-family: Verdana; - font-weight: normal; - min-width: 16px; - display: inline-block; - box-shadow: 2px 2px 1px rgba(128, 128, 128, 0.3); - margin-right: 4px; + border: solid 1px #808080; + border-radius: 4px; + background: #cccccf; + color: black; + font-family: Verdana; + font-weight: normal; + min-width: 16px; + display: inline-block; + box-shadow: 2px 2px 1px rgba(128, 128, 128, 0.3); + margin-right: 4px; } .highlightKeys kbd.space { @@ -86,18 +113,19 @@ form { ==Keyboard Styling== ====================== */ -.desktop, .kmw-osk-frame { +.kmw-osk-frame { display: block !important; position: static !important; width: 100% !important; height: 100% !important; max-width: 100% !important; max-height: 100% !important; + font-size: 21px !important; border-radius: 0; } .kmw-help-osk-frame { - height: 100% !important; + height: 40vh !important; scroll-behavior: smooth !important; scrollbar-width: thin; overflow-x: hidden !important; @@ -108,7 +136,7 @@ form { .kmw-osk-static { height: fit-content !important; text-align: center !important; - border: solid 1px var(--keyman-blue) !important; + border: none !important; } .kmw-osk-static table { @@ -119,6 +147,14 @@ form { width: 100% !important; } +.kmw-osk-inner-frame { + font-size: 21px !important; + width: 100% !important; + height: 100% !important; + max-width: 100% !important; + max-height: 100% !important; +} + #kmw-osk-help-page > table > tbody > tr > td > .row { --bs-gutter-x: 0 !important; } @@ -201,17 +237,6 @@ form { text-align: center; } -@media all and (min-width: 1320px) { - ins.adsbygoogle { - display: inline-block !important; - height: 600px; - position: absolute; - right: 16px; - top: 120px; - width: 160px; - } -} - .desktop .kmw-keyboard-dari_clra .kmw-key-default .kmw-key-text { top: -33%; } diff --git a/cdn/dev/css/kmw.css b/cdn/dev/css/kmw-global.css similarity index 58% rename from cdn/dev/css/kmw.css rename to cdn/dev/css/kmw-global.css index 02c9c07..50c9ca1 100644 --- a/cdn/dev/css/kmw.css +++ b/cdn/dev/css/kmw-global.css @@ -1,8 +1,33 @@ /* ============= -==Reset CSS== +==Reset & Global CSS== ============= */ +:root { + --textarea-box: rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgb(209, 213, 219) 0px 0px 0px 1px inset; + --textarea-width: 100vw; + --textarea-height: calc(100vh - 55vh); + --divider-height: 5vh; + --keyboard-height: calc(97vh - (var(--textarea-height) + var(--divider-height))); + --box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + --keyman-orange: #FC7200; + --keyman-red: #B92034; + --keyman-blue: #2EADD3; + --tablet--kb-bg-color: #666; + --mobile-font-size: 12px; + --mobile-search-max-width: 100%; +} + +* { + box-sizing: border-box; + letter-spacing: .05rem; + font-weight: 400; +} + +body { + overflow: hidden; +} + html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, @@ -24,11 +49,12 @@ time, mark, audio, video { } a { - margin:0; - padding:0; + margin:0 !important; + padding:0 !important; vertical-align:baseline; background:transparent; - } + text-decoration: none !important; +} article,aside,details,figcaption,figure, section,header,footer,hgroup,menu,nav { @@ -65,6 +91,7 @@ hr { border:0; border-top:1px solid #cccccc; padding:0; + margin: 0; } button, input, select { @@ -76,3 +103,12 @@ button, input, select { ins.adsbygoogle { display: none !important; } + +.hidden { + display: none !important; +} + +/* Icons */ +i:hover { + transition: all 0.3s ease; +} diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index da9c3f9..8dbd919 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -1,18 +1,15 @@ -:root { - --box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; - --keyman-orange: #FC7200; - --keyman-red: #B92034; - --keyman-blue: #2EADD3; -} +/* + Name: KeymanWeb's Header Styles + Copyright: Copyright (C) 2025 SIL Global + Documentation: + Description: All of the styles for KMW's Header + Create Date: 5 November 2024 -* { - letter-spacing: .05rem; - font-weight: 400; -} + Modified Date: + Authors: Meng-Heng -hr { - margin: 0; -} + History: +*/ header > div > img { width: 100%; @@ -20,11 +17,6 @@ header > div > img { height: 5px; } -#searchDropdownMenu { - padding: 10px; - margin: 0; -} - .main-header { display: grid; grid-template-columns: 1fr 1fr; @@ -32,23 +24,31 @@ header > div > img { padding: 0 10px; box-shadow: var(--box-shadow); } - -/* Left side of Header: - Search - Keyboard dropdown +/* +============================================================= +==Left side of Header: Search Box, Keyboard Selection Menu== +============================================================= */ +#searchDropdownMenu { + padding: 10px; + margin: 0; +} + .left-header { display: flex; align-items: center; + width: 70vw; } .left-header img { margin-right: 10px; } -/* -Language Search box +/* +============== +==Search Box== +============== */ #searchBar { position: relative; @@ -56,6 +56,20 @@ Language Search box margin-right: 10px; } +#searchBar #searchInput { + height: 50px; + width: 100%; + text-indent: 10px; + border-radius: 15px; + text-align: left; + font-family: inherit !important; + box-shadow: none; +} + +#searchInput:hover, #searchInput:focus { + border: 1px solid var(--keyman-orange); +} + #searchIcons { position: absolute; right: 5px; @@ -83,20 +97,6 @@ Language Search box display: none; } -#searchBar #searchInput { - height: 50px; - width: 100%; - text-indent: 10px; - border-radius: 15px; - text-align: left; - font-family: inherit !important; - box-shadow: none; -} - -#searchInput:hover, #searchInput:focus { - border: 1px solid var(--keyman-orange); -} - #searchDropdownMenu { width: 100%; max-height: 600px; @@ -107,132 +107,103 @@ Language Search box #searchDropdownMenu hr { margin: 15px 0; } +/* +============================ +==Instruction on dropdown== +============================ +*/ +.instruction-title { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} -/* Enable keyboard Animation */ -.kb-icon-plus-animate { - animation: plustoTickToMinus 2s forwards; -} - -@keyframes plustoTickToMinus { - 0% { - content: "+"; - transform: scale(1); - } - 30% { - color: lime; - content: "โœ“"; - transform: scale(1.5); - } - 60% { - color: lime; - content: "โœ“"; - transform: scale(1.3); - } - 100% { - content: "-"; - transform: scale(1); - } -} - -/* Instruction on dropdown */ .instruction-title, .keyboard-title { width: 100%; } .instruction-title p, .keyboard-title { font-weight: 500; - font-size: 16px; + font-size: 18px; text-align: center; } -/* Map and Most download */ -.left-header .dropdown-menu .top-row #worldMap { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin: 10px 10px !important; -} - -#worldMap span { - opacity: 50%; -} - -#worldMap span:hover { - opacity: 100%; - cursor: pointer; -} - -#KeymanWebControl #kmw_controls -{ - display: flex !important; - flex-direction: row; - justify-content: space-evenly; +#closeInstruction { + position: absolute; + right: 20px; + top: 10px; + border: 1px solid black; border-radius: 20px; - box-shadow: var(--box-shadow); - height: 35px; - padding: 5px; + text-align: center; + width: 30px; + cursor: pointer; } -#KeymanWebControl .kmw_button, -#keymanWebControl .kmw_button_disabled, -#KeymanWebControl .kmw_button_selected -{ - width: fit-content !important; - background: none !important; - height: 0 !important; +/* +================ +==Search cards== +================ +*/ +.card-wrap { + box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;; + padding: 10px; + border-radius: 10px; + letter-spacing: .05rem; + overflow: hidden; + margin-bottom: 5px; } -#KeymanWebControl #kmw_controls_start, -#KeymanWebControl #kmw_btn_osk, -.kmw_bar, #kmw_controls_end { - display: none; +.card-wrap.disabled { + opacity: 0.5; + pointer-events: none; + position: relative; } - -#KeymanWebControl .kmw_language { - padding: 3px; +.card-wrap .monthly-download { + opacity: 75%; } -#kmw_control_keyboards { - width: fit-content; +.card-header { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; } -#kmw_selector_regions { - height: 100%; - overflow: hidden; - position: relative; +.card-header > * { + margin-right: 0 10px 0 0; } -.kmw_selector_region { - overflow-y: scroll; - overflow-x: hidden; - scrollbar-width: thin; - height: 600px; +.card-header .card-header-title { + display: flex; + flex-direction: row; + justify-content: left; + align-items: center; } -/* Search Dropdown cards */ -#languageSearchList > * { - margin-bottom: 5px; +.card-header h4 { + color: var(--keyman-orange); + font-weight: 400; + font-size: large; + margin: 0 5px; } -#languageSearchList > div:hover { - border: 1px solid var(--keyman-orange); - margin: 3px; +.card-header h4 span { + color: black; } -.card-wrap { - box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;; - padding: 10px; - border-radius: 10px; - letter-spacing: .05rem; - overflow: hidden; - margin-bottom: 5px; +.card-header p { + position: relative; + float: right; + font-weight: 200; + font-size: medium; + margin: 0; } -.card-wrap.disabled { - opacity: 0.5; - pointer-events: none; - position: relative; +.card-header p, .card-header .help-icon-span { + color: var(--keyman-red); + cursor: pointer; } .card-wrap.disabled .kb-icon-plus { @@ -286,40 +257,11 @@ Language Search box height: 20px; margin: 0; } - -.card-wrap .monthly-download { - opacity: 75%; -} - -.card-header { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin-bottom: 8px; -} - -.card-header h4 { - color: #0000EE; - font-weight: 400; - font-size: large; - margin: 0; -} - -.card-header h4 span { - color: black; -} - -.card-header p { - margin: 0; - position: relative; - float: right; - font-weight: 200; - font-size: medium; - color: var(--keyman-red); -} - -/* Pagination */ +/* +============== +==Pagination== +============== +*/ #searchDropdownMenu .bottom-row-search { background-color: white; align-items: center; @@ -337,12 +279,19 @@ Language Search box cursor: pointer; } -/* Selected Keyboard Menu */ +#paginationControls { + display: none; +} +/* +=========================== +==Selected Keyboard Menu== +=========================== +*/ #keyboardSelectionButton { z-index: 3; } -.scroll-wrapper-keyboard-tab { +.keyboard-selection-menu { width: 350px; height: 35px; position: relative; @@ -359,7 +308,6 @@ Language Search box box-shadow: var(--box-shadow); overflow-y: scroll; scrollbar-width: none; - transition: all 1s ease-in-out; margin-left: -10px; border-radius: 10px; z-index: 0; @@ -381,6 +329,14 @@ Language Search box width: 100%; } +.kb-selection.open { + display: block; +} + +.kb-selection { + display: none; +} + .kb-item-header, .kb-item-footer { display: flex; align-items: center; @@ -399,35 +355,67 @@ Language Search box cursor: pointer; } -.kb-item { - width: 100%; - max-height: fit-content; - height: 38px; +.kb-item-keyboard { display: flex; flex-direction: row; justify-content: space-between; + align-items: center; + width: 100%; + height: fit-content; padding: 5px; + opacity: 50%; } -.kb-item:hover { +.kb-item-keyboard:hover { cursor: pointer; - background-color: var(--keyman-orange); - color: white; + color: black; + padding: 5px; + opacity: 100%; } -.kb-item span { +.kb-item-keyboard span { width: 50%; - text-wrap: wrap; - align-self: center; + height: 30px; + text-align: center; + overflow-x: scroll; + scrollbar-width: thin; + margin: 5px; +} + +.kb-item-keyboard span:hover { + text-decoration: underline; } .keyboard-configs { - width: 50%; height: fit-content; display: grid; grid-template-columns: repeat(4, 1fr); + border-left: 1px solid black; + align-self: center; + justify-content: center; list-style-type: none; - padding: 2px 0 0; + padding-left: 15px; + margin: 5px; +} + +.keyboard-configs > li { + opacity: 50%; + margin-right: 5px; +} + +.keyboard-configs > li:hover { + opacity: 100%; + cursor: pointer !important; + font-size: 20px; +} + +.keyboard-configs li > i { + display: flex; + flex-direction: row; + align-items: center; + width: 35px; + height: 35px; + margin-right: 3px; } ::-webkit-scrollbar:horizontal { @@ -449,15 +437,16 @@ Language Search box } .keyboard-details { - position: absolute; + position: fixed; width: 400px; - height: fit-content; + height: max-content; background-color: white; color: black; box-shadow: var(--box-shadow); border-radius: 20px; padding: 10px; z-index: 2; + top: 100px; } .keyboard-content-wrapper { @@ -538,102 +527,11 @@ Language Search box .platform .platform-mobileweb { background-image: url('/cdn/dev/img/platforms/icon-mobileWeb.png'); } - -/* Limits of Keyboard Selection */ -.warning-container { - position: fixed; - height: 100vh; - width: 100%; - z-index: 1000; - top: 0; - left: 0; - display: flex; - justify-content: center; - align-items: center; -} - -.warning-content { - width: 500px; - display: flex; - flex-direction: column; - align-items: center; - background-color: white; - color: black; - text-align: center; - padding: 30px 30px 70px; - border-radius: 20px; - box-shadow: var(--box-shadow); -} - -.warning-cancel-btn { - width: 30px; - font-size: 20px; - opacity: 50%; - align-self: flex-end; - background-color: transparent; - border: none; - margin-bottom: 10px; -} - -.warning-keyman-image { - width: 82px; - margin-bottom: 15px; -} - -.warning-text { - margin-bottom: 40px; - font-size: 18px; -} - -.warning-accept-btn { - background-color: var(--keyman-orange); - border: none; - border-radius: 5px; - width: 200px; - padding: 14px; - color: white; - box-shadow: var(--box-shadow); -} - -/* Middle of the header */ -.middle-header { - display: flex; - justify-content: center; - align-items: center; -} - -.middle-header i, .right-header i { - font-size: 24px; - opacity: 50%; -} - -.middle-header i:hover { - opacity: 100%; - cursor: pointer; - color: var(--keyman-red); -} - -/* Right side of the header: - Tools - Hamburger menu +/* +========================================= +==Font size slider + Hide/show keyboard== +========================================= */ - -.right-header { - display: grid; - grid-template-columns: 80% 20%; - width: 100%; - justify-items: right; - align-items: center; - margin-right: 0; -} - -.right-header i:hover { - opacity: 100%; - cursor: pointer; - color: var(--keyman-blue); -} - -/* Font size slider + Hide/show keyboard */ .tool-container { display: flex; flex-direction: row; @@ -641,14 +539,12 @@ Language Search box align-items: center; } -.tool-container > * { - margin: 10px; -} - .font-size-container { display: flex; flex-direction: row; align-items: center; + padding: 5px 5px; + height: fit-content; } .font-size-slider { @@ -665,7 +561,6 @@ Language Search box width: 100%; } - .font-large { font-size: 20px; } @@ -712,41 +607,71 @@ input[type="range"]::-webkit-slider-thumb { margin-top: 3px; } -#burgerMenu ul { - box-shadow: var(--box-shadow); +/* +=================================================================================== +==Right side of Header: Font Resizer, Hide keyboard + Hamburger menu== +=================================================================================== +*/ +.right-header { + display: grid; + grid-template-columns: 80% 20%; + width: 100%; + justify-items: right; + align-items: center; + margin-right: 0; } -#burgerMenu ul:hover { +.right-header i { + font-size: 24px; + opacity: 50%; +} + +.right-header i:hover { + opacity: 100%; cursor: pointer; + color: var(--keyman-blue); } -.dropdown-grid-container { - display: grid; - grid-template-columns: 1fr 1fr; - grid-template-rows: 1fr; +.burger-menu-top-section > div { + display: flex; + flex-direction: row; + justify-content: space-around; + align-items: center; + border-bottom: 0.5px solid gray; + padding: 15px; } -.dropdown-item:active { - background-color: transparent !important; +.burger-menu-top-section .instruction-status .title p { + font-size: 16px; + margin: 0; +} + +#burgerMenu #burgerDropDownMenu { + box-shadow: var(--box-shadow); +} + +#burgerMenu #burgerDropDownMenu:hover { + cursor: pointer; } -#burgerMenu ul li { +#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li { align-items: center; width: 300px; border-bottom: 1px solid rgb(196, 196, 196); margin-top: 10px; + margin-left: 10px; } -#burgerMenu ul li::after { +#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li::after { background-color: orange; } -#burgerMenu ul li p:hover { +#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li p:hover { opacity: 100%; } -#burgerMenu ul li p { - width: 90%; +#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li p { + width: 80%; white-space: normal; position: relative; left: 40px; @@ -755,14 +680,14 @@ input[type="range"]::-webkit-slider-thumb { margin-top: 10px; } -#burgerMenu ul li a { +#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li a { text-decoration: none; color: black; font-style: bold; font-size: 16px; } -#burgerMenu ul li i, #burgerMenu ul li img { +#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li i, #burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li img { margin: 0 10px; font-size: 16px; width: 18px; @@ -774,6 +699,18 @@ input[type="range"]::-webkit-slider-thumb { cursor: pointer; } +.burger-menu-external-links { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + padding: 0; + list-style-type: none; +} + +.external-links-item:active { + background-color: transparent !important; +} + .kmw-socials, .kmw-version, .sil-logo { font-size: 14px; } @@ -783,7 +720,15 @@ input[type="range"]::-webkit-slider-thumb { flex-direction: column; justify-content: center; align-items: center; - padding: 10px; + padding-bottom: 15px; + line-height: 30em; + margin-bottom: 10px; + border-bottom: 0.5px solid gray; +} + +.kmw-socials h5 { + line-height: 1.5em; + font-size: 25px; } .kmw-socials-icons { @@ -792,12 +737,19 @@ input[type="range"]::-webkit-slider-thumb { justify-content: center; align-items: center; gap: 10px; + margin: 10px; +} + +.kmw-socials-icons > * { + line-height: 1.5em; } .kmw-socials-icons > a { + display: flex; text-decoration: none; color: black; opacity: 50%; + font-size: 16px; position: relative; } @@ -807,9 +759,7 @@ input[type="range"]::-webkit-slider-thumb { @font-face { font-family: "social-logos"; - src: url("../../fonts/social-logos.ttf"), - url("social-logos.woff2") format("woff2"), - url("social-logos.woff") format("woff"); + src: url("../../fonts/social-logos.ttf"); font-weight: normal; font-style: normal; } @@ -831,37 +781,140 @@ input[type="range"]::-webkit-slider-thumb { display: flex; flex-direction: column; align-items: center; + padding: 15px; +} +/* +================================ +==Limits of Keyboard Selection== +================================ +*/ +.warning-container { + background: rgba(0, 0, 0, 0.25); + position: fixed; + height: 100vh; + width: 100%; + z-index: 1000; + top: 0; + left: 0; + display: flex; + justify-content: center; + align-items: center; } -/* Animation */ +.warning-content { + width: 500px; + display: flex; + flex-direction: column; + align-items: center; + background-color: white; + color: black; + text-align: center; + padding: 30px 30px 70px; + border-radius: 20px; + box-shadow: var(--box-shadow); +} -.keyboardTab-animation { - animation: keyboardTab 1s; +.warning-cancel-btn { + width: 30px; + font-size: 20px; + opacity: 50%; + align-self: flex-end; + background-color: transparent; + border: none; + margin-bottom: 10px; } -.keyboardSelection-animation { - animation: keyboardSelection 1s ease-in; + +.warning-keyman-image { + width: 82px; + margin-bottom: 15px; } -@keyframes keyboardSelection { - 0% { - transform: translateY(-5px); - } - 50% { - transform: translateY(-3px); - } - 75% { - transform: translateY(-1px); - } - 100% { - transform: translateY(0); - } +.warning-text { + margin-bottom: 40px; + font-size: 18px; } -@keyframes keyboardTab { - from { - opacity: 50%; - } - to { - opacity: 100%; - } -} \ No newline at end of file +.warning-accept-btn { + background-color: var(--keyman-orange); + border: none; + border-radius: 5px; + width: 200px; + padding: 14px; + color: white; + box-shadow: var(--box-shadow); +} +/* +=============================== +==DELETE: Confirmation Dialog== +=============================== +*/ +.dialog-overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.25); + display: flex; + align-items: center; + justify-content: center; + z-index: 9999; +} + +.dialog-box { + background: #fff; + border-radius: 12px; + padding: 2rem; + width: 90%; + max-width: 400px; + box-shadow: 0 4px 16px rgba(0,0,0,0.1); + text-align: center; +} + +.dialog-icon { + font-size: 2rem; + color: #e74c3c; + margin-bottom: 1rem; +} + +.dialog-title { + font-size: 1.25rem; + font-weight: 600; + margin: 0.5rem 0; +} + +.dialog-message { + font-size: 0.95rem; + color: #555; + margin-bottom: 1.5rem; +} + +.dialog-buttons { + display: flex; + justify-content: space-around; + gap: 1rem; +} + +.btn-cancel, .btn-delete { + flex: 1; + padding: 0.75rem; + border-radius: 8px; + border: none; + cursor: pointer; + font-size: 1rem; +} + +.btn-cancel { + background: #f4f4f4; + color: #333; +} + +.btn-delete { + background: var(--keyman-red); + color: white; +} + +.btn-cancel:hover { + background: #eaeaea; +} + +.btn-delete:hover { + background: #d54335; +} diff --git a/cdn/dev/css/kmw-interaction.css b/cdn/dev/css/kmw-interaction.css new file mode 100644 index 0000000..d50a438 --- /dev/null +++ b/cdn/dev/css/kmw-interaction.css @@ -0,0 +1,62 @@ +/* + Name: KeymanWeb Interaction Styles + Copyright: Copyright (C) 2025 SIL Global + Documentation: + Description: Animation & Styles of every interactable components. + Create Date: 19 Nov 2025 + + Modified Date: + Authors: Meng-Heng + + History: +*/ + +/* Warning before delete */ +.warning-content { + animation: fadeIn 0.2s ease; +} + +.dialog-box { + animation: fadeIn 0.2s ease; +} + +@keyframes fadeIn { + from { opacity: 0; transform: scale(0.9); } + to { opacity: 1; transform: scale(1); } +} + +/* Enable keyboard for Keyboard Selection Animation */ +.kb-icon-plus-animate { + animation: plustoTickToMinus 2s forwards; +} + +@keyframes plustoTickToMinus { + 0% { + content: "+"; + transform: scale(1); + } + 30% { + color: lime; + content: "โœ“"; + transform: scale(1.5); + } + 60% { + color: lime; + content: "โœ“"; + transform: scale(1.3); + } + 100% { + content: "-"; + transform: scale(1); + } +} + +/* Textarea */ +.textarea-animation { + animation: highlight 3s ease; +} + +@keyframes highlight { + from {box-shadow:#2EADD3 0px 0px 0px 3px;} + to {box-shadow: var(--textarea-box);} +} \ No newline at end of file diff --git a/cdn/dev/css/kmw-mobile.css b/cdn/dev/css/kmw-mobile.css index 8d8eb6d..82666a5 100644 --- a/cdn/dev/css/kmw-mobile.css +++ b/cdn/dev/css/kmw-mobile.css @@ -6,29 +6,20 @@ ====================== */ -:root { - --mobile-font-size: 12px; - --mobile-search-max-width: 250px; - --mobile-search-min-width: 50px; -} - -html { - overflow-y: scroll; - overflow-x: hidden; -} - body { - width:100%;height:100%; + width:100%; + height:100%; font-family: Verdana, Arial, Helvetica, sans-serif; color:#2D2C2C; background-color: #eeeeee; margin:0px; - } + overflow: none; +} a { text-decoration:none; color: #AD4A28; - } +} a:hover { text-decoration:underline; @@ -42,62 +33,82 @@ p { font-size:13px; line-height:1.5em; } - /* -==================== -==Content Elements== -==================== +========== +==Header== +========== */ - -/* KMW Main App */ -#app { - width: 100%; - margin: 0px; - } - -#KeymanWebControl { - display: none; - } - -#exampleBox, #example { - display: none; -} - .main-header { width: 100%; grid-template-columns: 2fr 1fr; } -.left-header { - width: 70vw; - } - .left-header img { display: none; } .right-header { grid-template-columns: 50% 50%; + padding: 10px; } -.right-header { - width: 30vw; +.tool-container { + margin: 10px; } +.hamburger-menu-container { + overflow: scroll; + scroll-behavior: smooth; + height: 70vh; +} + +#burgereMenu ul { + width: 80vw; + scroll-behavior: smooth; + flex-direction: column; + height: 60vh; + overflow: hidden; +} + +.burger-menu-external-links{ + display: flex !important; + flex-direction: column !important; +} + +.kmw-socials-icons { + display: flex; + flex-direction: column; +} /* -Language Search box +======================= +==Language Search box== +======================= */ - #searchBar { width: 50%; } -#searchInput:focus, #searchDropdownMenu, #keyboardSelection:active { +#searchInput::placeholder { + opacity: 0; +} + +#searchIcons { + border: 0; + background-color: transparent; + z-index: 0; + user-select: none; +} + +#searchInput:focus, #keyboardSelection:active { width: var(--mobile-search-max-width) !important; } -#textArea { - height: 45vh !important; +#searchDropdownMenu { + width: 95vw !important; +} + +.textarea-container { + height: 100%; } .mobile-font-size-container { @@ -113,39 +124,87 @@ Language Search box border-radius: 10px; } - /* Additional rules for portrait orientation */ -@media only screen and (orientation: portrait) { +.large-icon-tools, .small-icon-tools { + display: none; +} + +#keyboardSelection.open { + width: 70vw !important; +} +/* +==================== +==Content Elements== +==================== +*/ + +/* KMW Main App */ +#app { + width: 100%; + margin: 0px; + } - #message { - height: 170px; - } +#KeymanWebControl { + display: none; + } - #messageContainer { - float: left; - width: 80%; - height: 40%; - } +.kmw-tools { + display: none; } - /* Additional rules for landscape orientation */ -@media only screen and (orientation: landscape) { +/* Divider */ +.divider-container { + cursor: pointer; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + grid-template-rows: 100%; + align-items: center; + grid-template-areas: "left middle right"; + width: 100%; + height: 5vh; + padding: 10px; + border-radius: 5px; + box-shadow: var(--box-shadow); +} + +.left-divider { + display: flex; + flex-direction: row; + justify-content: start; + align-items: center; + height: 100%; +} - #messageContainer { - float: left; - width: 85%; - height: 50%; - } - #message { - height: 50%; - } - #buttons { - margin: 4px 15px 4px 0; - } - #font { - display: none; - } +.left-divider > * { + margin: 0 10px; +} +/* Keyboard */ +#exampleBox { + background-color: gray; + height: 10vh; + width: 100%; +} + +.keyboard-container { + width: 100%; + height: 100% !important; +} + +.desktop-keyboard { + display: none; } +.phone-keyboard { + width: 100%; + display: block; +} + +.keyboard-download-box { + display: none; +} + +.spacing-purpose { + display: none; +} /* ====================== ==Keyboard Styling== @@ -164,3 +223,64 @@ Language Search box top: -33%; font-size: 0.8em !important; } + +.keyboard-area { + border: none; +} + +/* +============ +==Viewport== +============ +*/ +/* Additional rules for portrait orientation */ +@media only screen and (orientation: portrait) { + .keyboard-container > * { + width: 100%; + height: 100%; + } +} + + /* Additional rules for landscape orientation */ +@media only screen and (orientation: landscape) { + body { + overflow: auto; + } + + .main-header { + height: 65px; + } + + .textarea-container { + height: 15vh; + margin-bottom: 10px; + } + + .divider-container { + height: 10vh; + } + + .middle-divider { + align-content: center; + font-size: 20px; + } + + #example { + font-size: 10px; + } + + .phone.android.kmw-osk-frame > * { + height: 100% !important; + } + + .keyboard-container { + width: 100vw; + height: 100% !important; + } + + .keyboard-area { + border: none; + width: 100%; + height: 100%; + } +} diff --git a/cdn/dev/css/kmw-screen.css b/cdn/dev/css/kmw-screen.css new file mode 100644 index 0000000..61ee41d --- /dev/null +++ b/cdn/dev/css/kmw-screen.css @@ -0,0 +1,71 @@ +/* + Name: KeymanWeb Media Screen Styles + Copyright: Copyright (C) 2025 SIL Global + Documentation: + Description: Different media screens to allow components to display uniquely from the index.php. + Create Date: 19 Nov 2025 + + Modified Date: + Authors: Meng-Heng + + History: +*/ +@media only screen and (max-width: 632px) { + /* Smaller Search Box */ + #searchBar #searchInput { + min-width: 50px; + } +} + +@media only screen and (max-width: 456px) { + /* Smaller Keyboard list in Selection Menu */ + .kb-item-keyboard { + min-height: fit-content; + } + + .kb-item-keyboard span { + min-width: 112px; + } + + .kb-item-keyboard { + overflow-x: scroll; + } +} + +@media screen and (width < 565px) { + /* Show Mobile's font resizer */ + .font-size-mobile { + display: flex; + flex-direction: row; + align-items: center; + border-radius: 24px; + opacity: 50%; + } + + .font-size-mobile button { + border: 0; + background-color: #fff; + border-style: none; + } + + .font-size-mobile > *{ + margin: 0 5px; + } +} + +@media screen and (max-width: 400px) { + .example-box p { + font-size: 10px; + } +} + +@media all and (min-width: 1320px) { + ins.adsbygoogle { + display: inline-block !important; + height: 600px; + position: absolute; + right: 16px; + top: 120px; + width: 160px; + } +} diff --git a/cdn/dev/css/kmw-tablet.css b/cdn/dev/css/kmw-tablet.css index bd11ca5..a97b534 100644 --- a/cdn/dev/css/kmw-tablet.css +++ b/cdn/dev/css/kmw-tablet.css @@ -6,30 +6,23 @@ ====================== */ -html { - overflow-y: scroll; - overflow-x: hidden; -} - body { width:100%; + height:100%; font-family: Verdana, Arial, Helvetica, sans-serif; color:#2D2C2C; background-color: #eeeeee; margin:0px; - } -section { - background-color: darkred; } a { text-decoration:none; color: #AD4A28; - } +} a:hover { text-decoration:underline; - } +} h3 { font-size:18px; @@ -46,419 +39,149 @@ header, footer { /*clear: both;*/ } -hr { - display: none; - } - .box { -webkit-border-radius: 8px;-moz-border-radius: 8px; border-radius: 8px; -moz-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5); } +.container-flex { + display: flex; + flex-direction: column; + height: 100%; +} + /* -=================== -==Header Elements== -=================== +========== +==Header== +========== */ -header { - margin-top:0px; - } - -#headerLeft img { - display: block; /* default (inline) display inserts an unwanted bottom border */ - margin-top:0px; - height:60px; - /*-webkit-border-radius: 0px 0px 8px 8px; -moz-border-radius: 0px 0px 8px 8px; border-radius: 0px 0px 8px 8px;*/ - } - -header > div > img { - display: block; +.main-header { width: 100%; - height: 8px; + grid-template-columns: 3fr 1fr; } - -/* Expanding the search box */ -/* @media screen and (940px <= width <= 1045px) { - .main-header { - grid-template-columns: 2fr 1fr 1fr; - } -} */ - -.main-header { - width: 100%; - grid-template-columns: 3fr 1fr; +.right-header { + grid-template-columns: 70% 30%; } -.left-header { - width: 70vw; +#searchDropdownMenu { + width: 50vw; } -.right-header { - width: 300px; +.burger-menu-external-links { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + padding: 0; + list-style-type: none; } /* -==================== -==Content Elements== -==================== +================== +==Tool Container== +================== */ -#content { - width: 100%; /* specific for tablet and mobile */ - margin: 0px auto; - background-color: #eeeeee; - /*min-height:375px;*/ - } - - -/* KMW Main App */ -#app { - /*float:left;*/ - /*height:330px;*/ - width:100%; /*710px; */ - margin: 0px;/*30px 15px 15px;*/ - } - -#KeymanWebControl { - display: none; - } - -#exampleBox, #example { - display: none; - } - -#messageContainer { - width: 80%; - float:left; - } - -#message { - height:195px; - width: 100%;/*554px;*/ - float:left; - margin: 10px; - color:black; - font-size:17px; - font-family:SindhiWeb,Verdana,GeezWeb,LaoWeb,TibetanWeb,MyanmarWeb,SinhalaWeb,TamilWeb,KhmerWeb,LatinWeb,OriyaWeb,EgyptianWeb !important; - } - -/* KMW App Buttons */ - -#buttons { - float: right; - width:15%; - margin: 0px 20px; - margin-top: -6px; - } - -#buttons div { - width:140px; - -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - background: #fff; - border: 1px solid #888888; - margin: 0px 10px; - padding: 3px; - padding-top: 9px; - height: 41px; - line-height: 36px; - background-repeat: no-repeat; - background-position: center left; - } - -#buttons div:disabled { - cursor: default !important; - color: gray !important; - border-color: gray !important; - } - -#buttons p{ - margin-left: 41px; +.tool-menu button { + width: 120px; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + border-radius: 10px; + border: 1px solid gray; + opacity: 50%; + padding: 0 10px; } -#search.links, #search{ - background-image:url('../img/btn_google_small.png'); - +.tool-menu button:hover { + opacity: 100%; } -#search.linksOff{ - background-image:url('../img/btn_google_small_white.png'); +.tool-menu .dropdown-menu { + width: 25vw; + right: 30px; } -#copy.links, #copy{ - background-image:url('../img/btn_copy_small.png'); - +.tool-menu .dropdown-menu > * { + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; + height: 50px; + padding: 10px; } -#copy.linksOff{ - background-image:url('../img/btn_copy_small_white.png'); +.tool-menu .dropdown-menu > div:hover { + color: var(--keyman-blue); + cursor: pointer; } -#buttons div * { - display:inline; - } - -div.links { - cursor:pointer; - } - -div.linksOff { - cursor:default !important; - border: 1px solid #cccccc !important; - } - -div.linksOff * { - color: gray; - -webkit-user-select:none; - } - -/* Aside Elements */ - -aside { - display:none; - } - -#font-size{ - display: none; +#copyTool { + top: 110px; } -/* - -#font, -=================== -==Footer Elements== -=================== -*/ -.footer, footer { - display: none; - background-color: #6A2915; - height:50px; - left:0px; - bottom:0px; - position: fixed; - /* -webkit-border-radius: 8px 8px 0px 0px; -moz-border-radius: 8px 8px 0px 0px; border-radius: 8px 8px 0px 0px; */ - } - -nav ul { - list-style: none outside none; - width:90%; - margin:0px auto; - padding:15px 0px; - } - -nav li { - display:inline; - padding:20px 39px; - } - -nav a { - color:#eee; - font-family:Tahoma; - font-weight:bold; - font-size:10.7px; - } - -.messageBox { - box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - position: fixed; - left: 50%; - top: 20%; - z-index: 999 !important; - margin-left: -250px; - margin-top: -100px; - width: 500px; - height: 200px; -} - -.messageBox div { - width: 464px; - height: 134px; - left: 10px; - top: 10px; - padding: 8px; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; - background: white; +.copy-container span, .eraser-container span, .expand-container span { + display: flex; + flex-direction: row; + justify-content: space-evenly; + align-items: center; } -.messageBox button { - width:83px; - position: absolute; - right: 10px; - bottom: 4px; - background: #414141; - border-top: 1px solid #383838; - border-right: 1px solid #1F1F1F; - border-bottom: 1px solid #151515; - border-left: 1px solid #1F1F1F; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - color: white; - font: bold 12px Helvetica, Verdana, Arial, sans-serif; - text-shadow: 0px -1px 1px #1E2D4D; - text-align:center; - margin: 0 auto 6px; - padding: 3px; - } - -.messageBox button:disabled { - cursor: default !important; - color: gray !important; - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; - box-shadow: 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111 !important; +.copy-container span p, .eraser-container span p, .expand-container span p { + margin: 0; } - -.messageBox button:hover { - -webkit-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -moz-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -ms-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - -o-box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - box-shadow: inset 0 0px 20px 1px #878787, 0px 1px 0 #1D1D1D, 0 2px 0px #1F1F1F, 0 2px 4px 1px #111; - cursor: pointer; +/* +========================= +==Section/Body Elements== +========================= +*/ +.example-box { + display: block; + width: 100vw; + height: 7vh; + user-select: none; + align-items: center; + position: sticky; + background-color: var(--tablet--kb-bg-color); } -.messageBox button:active { - -webkit-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -moz-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -ms-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - -o-box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; - box-shadow: 0px 1px 0 #1D1D1D, 0 0px 0px #1F1F1F, 0 1px 4px 1px #111; +.left-divider { + display: none; } -.progressBox { - box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -o-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - -khtml-box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.5); - background: #c4c4c4; - position: fixed; - left: 50%; - top: 20%; - z-index: 999; - margin-left: -200px; - margin-top: -54px; - width: 400px; - height: 54px; +.right-divider { + display: none; } -.progressBox div { - width: 364px; - height: 18px; - left: 10px; - top: 10px; - padding: 8px; - background: url('../img/wait.gif') no-repeat 354px 8px white; - font-size: 13px; - position: absolute; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 3px; +.tablet.kmw-osk-frame { + display: block !important; + position: absolute !important; + z-index: 1 !important; + height: 100% !important; + width: 100% !important; } -/* Elements modified for tablet */ -#headerBackground { +/* Keyboard */ +.keyboard-container { + display: flex; width: 100%; - background-color:white; -} - -#headerLeft { - float: left; - margin-left: 28px; -} - -#headerRight { - text-align: right; - height: 40px; - float: right; - padding-bottom: 33px; - padding-right: 10px; -} - -#headerRight-beta { - display: block; - font-weight: bold; - color: red; - font-size: 16pt; - padding: 16px 12px 0; } -#headerRight-link { - padding: 0 12px 0; -} - - -#instructions { - margin:10px; - font:12pt Helvetica,Verdana,Arial,sans-serif; - color: white; +.keyboard-area { + border: none; + width: 100%; + height: 100%; + overflow: hidden !important; + transition: transform 0.2s ease-out !important; + transform: translateY(0) !important; } -/* Additional rules for portrait orientation */ -@media only screen and (orientation: landscape) { - #buttons{ - padding-top: 11px; - } - #buttons div { - margin: 4px 20px 10px 0px; - padding: 0px; - } - #font span:first-child{ - margin-left: 3px; - } - #font p{ - margin-left: 8px; - position: relative; - top: -5px; - } - #mobile-font{ - display: none; - width: 136px; - border-radius: 4px; - position: absolute; - left: 100%; - top: 136px; - margin-left: -170px; - text-align: center; - font-size: 24pt; - background: #fff; - } - - #mobile-increase{ - height: 40px; - line-height: 40px; - border-bottom: solid 1px #000; - } - - #mobile-decrease{ - height: 40px; - line-height: 40px; - } +.keyboard-area.hidden { + transform: translateY(100%) !important; } /* Additional rules for portrait orientation */ @media only screen and (orientation: portrait) { - #app { width: 97%; } @@ -531,6 +254,12 @@ nav a { } } +@media only screen and (orientation: landscape) { + body { + overflow: auto; + } +} + /* ====================== ==Keyboard Styling== diff --git a/cdn/dev/js/api.js b/cdn/dev/js/api.js new file mode 100644 index 0000000..e7b968f --- /dev/null +++ b/cdn/dev/js/api.js @@ -0,0 +1,6 @@ +export function getKeymanWeb() { + if(window.tavultesoft) { + return window.tavultesoft.keymanweb; + } + return window.keyman; +} \ No newline at end of file diff --git a/cdn/dev/js/feature/copy.js b/cdn/dev/js/feature/copy.js new file mode 100644 index 0000000..9e13c71 --- /dev/null +++ b/cdn/dev/js/feature/copy.js @@ -0,0 +1,28 @@ +export function copyTool() { + // Copy tool + const copyDiv = document.querySelector('#copyTool') + const copyBtn = copyDiv.children[0] + copyDiv?.addEventListener('click', async function() { + let textToCopy = textArea.value.trim() + + // Show X icon when there's no text to copy + if(!textToCopy) { + copyBtn.classList.replace('fa-copy', 'fa-xmark') + setTimeout(() => { + copyBtn.classList.replace('fa-xmark', 'fa-copy') + copyBtn.textContent = '' + }, 3000) + return; + } + + await navigator.clipboard.writeText(textToCopy) + + // Once copied, the icon shows a check mark + copyBtn.classList.replace('fa-copy', 'fa-check'); + + // After copied, the icon goes back to its default + setTimeout(() => { + copyBtn.classList.replace('fa-check', 'fa-copy'); + }, 1000); + }) +} \ No newline at end of file diff --git a/cdn/dev/js/feature/eraser.js b/cdn/dev/js/feature/eraser.js new file mode 100644 index 0000000..b4a1c87 --- /dev/null +++ b/cdn/dev/js/feature/eraser.js @@ -0,0 +1,89 @@ +export function eraserTool() { + const eraseDiv = document.querySelector('#eraseTool') + const eraseBtn = eraseDiv.children[0] + + eraseDiv?.addEventListener('click', function() { + let value = textArea.value.trim(); + + // Show X icon when there's no text to erase + if(!value) { + eraseBtn.classList.replace('fa-eraser', 'fa-xmark'); + setTimeout(() => { + eraseBtn.classList.replace('fa-xmark', 'fa-eraser'); + }, 3000); + return; + } else { + confirmAndClearText(() => { + // This function is passed as onConfirmErase + + textArea.value = ''; + // Once erased, the icon shows a check mark + eraseBtn.classList.replace('fa-eraser', 'fa-check'); + // After erased, the icon goes back to its default + setTimeout(() => { + eraseBtn.classList.replace('fa-check', 'fa-eraser'); + }, 1000); + }); + } + }) + + // Check to erase all text + function confirmAndClearText(onConfirmErase) { + if (typeof onConfirmErase !== 'function') { + console.log("Expected onConfirmErase a function, got:", typeof onConfirmErase); + alert("Click on the keyboard again to enable."); + return; + } + + const overlay = eraseTextUI(() => { + onConfirmErase(); + }); + + document.body.appendChild(overlay); + } + + // UI for Keyboard Selected Limitation + function eraseTextUI(onDelete) { + const overlay = document.createElement('div'); + overlay.classList.add('dialog-overlay'); + + // Dialog box + const dialog = document.createElement('div'); + dialog.classList.add('dialog-box'); + + const icon = document.createElement('div'); + icon.classList.add('dialog-icon'); + icon.textContent = "โš ๏ธ" + + const title = document.createElement('h2'); + title.classList.add('dialog-title'); + title.textContent = 'Clear all text?'; + + const message = document.createElement('p'); + message.classList.add('dialog-message'); + message.textContent = 'Are you sure? This action cannot be undone.'; + + const btnContainer = document.createElement('div'); + btnContainer.classList.add('dialog-buttons'); + + const cancelBtn = document.createElement('button'); + cancelBtn.classList.add('btn-cancel'); + cancelBtn.textContent = 'Cancel'; + cancelBtn.onclick = () => overlay.remove(); + + const deleteBtn = document.createElement('button'); + deleteBtn.classList.add('btn-delete'); + deleteBtn.textContent = 'Erase'; + deleteBtn.onclick = () => { + deleteBtn.disabled = true + overlay.remove(); + onDelete?.(); + }; + + btnContainer.append(cancelBtn, deleteBtn); + dialog.append(icon, title, message, btnContainer); + overlay.append(dialog); + + return overlay; + } +} \ No newline at end of file diff --git a/cdn/dev/js/feature/expand-textarea.js b/cdn/dev/js/feature/expand-textarea.js new file mode 100644 index 0000000..59a9106 --- /dev/null +++ b/cdn/dev/js/feature/expand-textarea.js @@ -0,0 +1,14 @@ +import { textAreaState } from "../state/appState.js" +import { defaultSize, fullScreenSize } from "../operation/resizeTextArea.js" + +// Identical to hide-keyboard.js but this is for Tablet & Mobile screen size +export function expandTool() { + const expandTool = document.querySelector('#expandTool') + expandTool?.addEventListener('click', () => { + if (textAreaState.isTextAreaFullHeight) { + defaultSize() + } else { + fullScreenSize() + } + }) +} \ No newline at end of file diff --git a/cdn/dev/js/feature/font-slider.js b/cdn/dev/js/feature/font-slider.js new file mode 100644 index 0000000..8f1fbf8 --- /dev/null +++ b/cdn/dev/js/feature/font-slider.js @@ -0,0 +1,7 @@ +export function fontSliderTool() { + const textArea = document.querySelector('#textArea') + const fontSliderBtn = document.querySelector('#fontSizeRange') + fontSliderBtn.addEventListener('input', function() { + textArea.style.fontSize = `${this.value}px` + }) +} \ No newline at end of file diff --git a/cdn/dev/js/feature/hide-keyboard.js b/cdn/dev/js/feature/hide-keyboard.js new file mode 100644 index 0000000..475d047 --- /dev/null +++ b/cdn/dev/js/feature/hide-keyboard.js @@ -0,0 +1,14 @@ +import { textAreaState } from "../state/appState.js" +import { defaultSize, fullScreenSize } from "../operation/resizeTextArea.js" + +// Identical to hide-keyboard.js but this is for Desktop screen size +export function hideKeyboard() { + const hideKeyboardBtn = document.querySelector('#hideKeyboard') + hideKeyboardBtn?.addEventListener('click', () => { + if (textAreaState.isTextAreaFullHeight) { + defaultSize() + } else { + fullScreenSize() + } + }) +} \ No newline at end of file diff --git a/cdn/dev/js/feature/kb-selection-menu.js b/cdn/dev/js/feature/kb-selection-menu.js new file mode 100644 index 0000000..bfaec5d --- /dev/null +++ b/cdn/dev/js/feature/kb-selection-menu.js @@ -0,0 +1,366 @@ +import { selectedKbList } from "../state/appState.js" +import { platformSupport } from "../operation/platformSupport.js" +import { setKeyboard } from "../operation/handleKeyboardData.js" +import { removeKbSelected, setKbHelpDocHamburger } from "../operation/selectedKb.js" +import { checkKbCardUI } from "./search.js" +import { setKeyboardToType } from "../operation/keyboard.js" +import { confirmAndAddKb } from "../operation/confirmKeyboard.js" +import { bundleKbDataforSelectionMenu } from "../operation/bundleKbSelectionMenu.js" +import { kbConfigMenu } from "../operation/keyboardDetails.js" + +export function addKbToSelectionMenu(kbIconPTag, element, kb, data) { + const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') + + let isSelected = selectedKbList.some(selected => selected.id == kb.id) // Check which keyboard is already in the keyboard selection menu + + // Remove keyboard + if (isSelected) { + removeKbSelected(kb.id) + kbIconPTag.textContent = '+' + generateKbUI(selectedKbList) // Generate Keyboard selection menu UI + checkKbCardUI(kbIconPTag, element, kb) // Disable or Enable Keyboard Search card UI + + return + } + + if(selectedKbList.length < 5) { // if keyboard selection menu has less than 5 keyboards + bundleKbDataforSelectionMenu(kb) // continue to add it to the menu + generateKbUI(selectedKbList) + kbIconPTag.textContent = 'โœ“' + kbIconPTag.classList.add('kb-icon-plus-animate') + + setTimeout(() => { + kbIconPTag.textContent = '-' + kbIconPTag.classList.remove('kb-icon-plus-animate') + keyboardSelectionButton.classList.remove('btn-secondary') + keyboardSelectionButton.classList.add('btn-keyman-orange') + }, 800) + + checkKbCardUI(kbIconPTag, element, kb) + return + } + // if the keyboards in the selection menu are over 5, there's a confirmation needed before adding the keyboard + confirmAndAddKb(() => { + bundleKbDataforSelectionMenu(kb) + generateKbUI(selectedKbList) + + kbIconPTag.textContent = 'โœ“' + kbIconPTag.classList.add('kb-icon-plus-animate') + + setTimeout(() => { + kbIconPTag.textContent = '-' + kbIconPTag.classList.remove('kb-icon-plus-animate') + keyboardSelectionButton.classList.remove('btn-secondary') + keyboardSelectionButton.classList.add('btn-keyman-orange') + }, 800) + checkKbCardUI(kbIconPTag, element, kb) + setKeyboardToType() + textArea.focus() + }) +} + +// UI for keyboard selection menu +export function generateKbUI(selectedKbList) { + const textArea = document.querySelector('#textArea') + const keyboardSelection = document.getElementById("keyboardSelection") + keyboardSelection.innerHTML = '' + + // Check if keyboard selection menu has less than 1 keyboard + if(selectedKbList.length < 1) { + triggerKbCount(selectedKbList) + resetKbSelectionMenu() + return + } + + const kbDivHeader = document.createElement('div') + kbDivHeader.textContent = "Keyboard Selection menu" + kbDivHeader.classList.add('kb-item-header') + + const kbDivFoot = document.createElement('div') + kbDivFoot.textContent = "US Basic Keyboard" + kbDivFoot.classList.add('kb-item-footer') + + keyboardSelection.appendChild(kbDivHeader) + + selectedKbList.forEach(data => { + const kbDiv = document.createElement('div') + kbDiv.classList.add("kb-item-keyboard") + kbDiv.setAttribute('id', `${data.id}`) + + const kbName = document.createElement('span') + kbName.textContent = data.name + + const kbConfigList = document.createElement('ul') + kbConfigList.classList.add('keyboard-configs') + kbConfigList.innerHTML = ` +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • + ` + + const kbDetails = displayKbDetails(data) + + kbDiv.appendChild(kbName) + kbDiv.appendChild(kbConfigList) + kbDiv.appendChild(kbDetails) + keyboardSelection.appendChild(kbDiv) + keyboardSelection.append(kbDivFoot) + + let kbdId = data.id + let langCode = Object.keys(data.supportedLanguage)[0] || "en" + let kbdName = data.name + + highlightKbSelected(kbdId) + + setKeyboard(kbdId, langCode, kbdName) // Set the data to display the keyboard + // Each tools on each of the keyboard in the selection menu + kbConfigList.addEventListener('click', (e) => { + const target = e.target + if (target.tagName == 'I' && target.dataset.action) { + const action = target.dataset.action + const id = target.dataset.id + const helpLink = target.dataset.helplink + kbConfigMenu(action, id, helpLink) + } + }) + + // Click on the keyboard will enable the keyboard for typing + kbName.addEventListener('click', () => { + kbdId = data.id + langCode = Object.keys(data.supportedLanguage)[0] || "en" + setKeyboard(kbdId, langCode, kbdName) + setKeyboardToType() + setKbHelpDocHamburger(kbdId, kbdName) + highlightKbSelected(kbdId) + keyboardSelection.classList.remove('open') + textArea.focus() + }) + + // Default English keyboard + kbDivFoot.onclick = () => { + setKeyboard('basic_kbdus', 'en', 'US Basic') + setKeyboardToType() + } + }) + triggerKbCount(selectedKbList) +} + +// Keyboard count for Keyboard selection menu +export function triggerKbCount(selectedKbList) { + const kbSelectedLength = selectedKbList.length + const keyboardSelectionButton = document.querySelector('#keyboardSelectionButton') + const keyboardCount = document.querySelector('#kbCount') + + if (kbSelectedLength >= 1) { + keyboardCount.classList.remove('fa-caret-right') + keyboardCount.textContent = `${kbSelectedLength}` // Show the number of keyboard in the menu + keyboardSelectionButton.classList.add('btn-keyman-orange') + keyboardSelectionButton.classList.remove('btn-secondary') + } else { + keyboardCount.classList.add('fa-caret-right') + keyboardCount.textContent = '' + keyboardSelectionButton.classList.remove('btn-keyman-orange') + keyboardSelectionButton.classList.add('btn-secondary') + } +} + +// Set the keyboard selection menu to its default UI +function resetKbSelectionMenu() { + const keyboardSelection = document.querySelector("#keyboardSelection") + + const kbDivHeader = document.createElement('div') + kbDivHeader.textContent = "Keyboard Selection menu" + kbDivHeader.classList.add('kb-item-header') + + const kbItem = document.createElement('div') + kbItem.classList.add('.kb-item-keyboard') + + const pTag = document.createElement('p') + pTag.textContent = "Open Search to get your keyboard" + + const kbDivFoot = document.createElement('div') + kbDivFoot.textContent = "US Basic Keyboard" + kbDivFoot.classList.add('kb-item-footer') + + kbItem.appendChild(pTag) + + keyboardSelection.appendChild(kbDivHeader) + keyboardSelection.appendChild(kbItem) + keyboardSelection.appendChild(kbDivFoot) +} + +// UI for Keyboard Selected Limitation +export function limitKbSelectionUI(onAccept) { + const dialogDiv = document.createElement('div') + dialogDiv.classList.add('warning-container') + + const dialogContentDiv = document.createElement('div') + dialogContentDiv.classList.add('warning-content') + + const dialogCancel = document.createElement('button') + dialogCancel.classList.add('warning-cancel-btn') + dialogCancel.setAttribute('id', 'cancelWarningBtn') + dialogCancel.textContent = 'โœ–' + dialogCancel.onclick = () => { + dialogDiv.remove() + generateKbUI(selectedKbList) + } + + const dialogImgTag = document.createElement('img') + dialogImgTag.classList.add('warning-keyman-image') + dialogImgTag.src = `/cdn/dev/img/keymanweb-mini-logo-88.png` + dialogImgTag.alt = "Keyman Logo" + + const firstKeyboard = selectedKbList[0].name + + const dialogPTag = document.createElement('p') + dialogPTag.classList.add('warning-text') + dialogPTag.innerHTML = `The keyboards selected exceeds the limitation of 5 keyboards. Click 'Allow' to remove the
    ${firstKeyboard} keyboard.` + + const dialogUlTag = document.createElement('ol') + dialogUlTag.textContent = "Your keyboards selection:" + selectedKbList.forEach((kb, index) => { + const dialogLiTag = document.createElement('li') + if (index == 0) { + const markKeyboard = document.createElement('mark') + markKeyboard.textContent = kb.name + dialogLiTag.appendChild(markKeyboard) + } else { + dialogLiTag.textContent = kb.name + } + dialogUlTag.appendChild(dialogLiTag) + + }) + + const dialogAccept = document.createElement('button') + dialogAccept.classList.add('warning-accept-btn') + dialogAccept.setAttribute('id', 'acceptWarningBtn') + dialogAccept.textContent = "Allow" + dialogAccept.onclick = () => { + dialogDiv.remove() + onAccept() + } + + dialogContentDiv.appendChild(dialogCancel) + dialogContentDiv.appendChild(dialogImgTag) + dialogContentDiv.appendChild(dialogPTag) + dialogContentDiv.appendChild(dialogUlTag) + dialogContentDiv.appendChild(dialogAccept) + + dialogDiv.appendChild(dialogContentDiv) + + return dialogDiv +} + +// Keyboard details for Keyboard selection menu +function displayKbDetails(data) { + const item = selectedKbList.find(kb => kb.id == data.id) + if (!item) return; + + const kbDetails = document.createElement('div') + kbDetails.classList.add('keyboard-details') + kbDetails.setAttribute('id', `keyboard-${data.id}-details`) + kbDetails.classList.add('hidden') + + const kbDetailsHead = document.createElement('div') + kbDetailsHead.textContent = 'Keyboard Details' + kbDetailsHead.classList.add('kb-item-header') + + const kbDetailsContent = document.createElement('div') + kbDetailsContent.classList.add('keyboard-content-wrapper') + kbDetailsContent.innerHTML = ` +
      +
    • +
      +
      Name
      +
      ${item.name || "N/A"}
      +
      +
    • +
    • +
      +
      Keyboard ID
      +
      ${item.id || "N/A"}
      +
      +
    • +
    • +
      +
      Version
      +
      ${item.version || "N/A"}
      +
      +
    • +
    • +
      +
      Total downloads
      +
      ${item.totalDownloads || 0}
      +
      +
    • +
    • +
      +
      Source Path
      + +
      +
    • +
    • +
      +
      Supported Platforms
      +
      + ${platformSupport(item.platformSupport) || 'No platforms supported'} +
      +
      +
    • +
    • +
      +
      Last Updated
      +
      ${getOnlyDates(item.lastUpdated) || 0}
      +
      +
    • +
    + ` + kbDetails.appendChild(kbDetailsHead) + kbDetails.appendChild(kbDetailsContent) + + return kbDetails +} + +// Get only the YYYY-mm-dd format +function getOnlyDates(dateData) { + const finalDateData = dateData.match(/^\d{4}-\d{2}-\d{2}/) + return finalDateData +} + +// Highlight an enabled keyboard in the Keyboard Selection Menu +export function highlightKbSelected(id) { + document.querySelectorAll('.kb-item-keyboard').forEach(el => { + el.style.backgroundColor = '' + el.style.color = '' + el.style.opacity = '' + }) + + const kbSelectedItem = document.getElementById(id) + if (kbSelectedItem) { + kbSelectedItem.style.backgroundColor = 'var(--keyman-orange)' + kbSelectedItem.style.color = 'white' + kbSelectedItem.style.opacity = '100%' + } +} \ No newline at end of file diff --git a/cdn/dev/js/feature/pagination.js b/cdn/dev/js/feature/pagination.js new file mode 100644 index 0000000..457cbee --- /dev/null +++ b/cdn/dev/js/feature/pagination.js @@ -0,0 +1,43 @@ +// UI for Pagination +import { getKeyboardList } from "../operation/searchAPI.js" +import { searchState } from "../state/appState.js" +import { searchKeyboard } from "../operation/searchLogic.js" + +/* Pagination */ +const prevBtn = document.getElementById('prevPage') +const nextBtn = document.getElementById('nextPage') +const pageInfo = document.getElementById('pageInfo') + +export function updatePaginationCtrl() { + pageInfo.textContent = `${searchState.currentPage} of ${searchState.totalPage}` // Number of Total page + nextBtn.disabled = searchState.currentPage >= searchState.totalPage // Check to disable next page + prevBtn.disabled = searchState.currentPage <= 1 // Check to disable previous page +} + +export function goPrevPage() { + if (searchState.currentPage > 1) { + searchState.currentPage-- + searchKeyboard(searchState.searchQuery, searchState.currentPage) + } +} + +export function goNextPage() { + if (searchState.currentPage < searchState.totalPage) { + searchState.currentPage++ + searchKeyboard(searchState.searchQuery, searchState.currentPage) + } +} + +// Load keyboard search info (pages) +export async function loadPageInfo(defaultQuery = "p:popular") { + const data = await getKeyboardList(defaultQuery) // depending on the query + + if (data?.context) { + searchState.totalPage = data.context.totalPages || 1; + searchState.currentPage = data.context.pageNumber || 1; + } else { + searchState.totalPage = Math.ceil(data.keyboards.length / searchState.itemPerPage); + } + + updatePaginationCtrl() +} diff --git a/cdn/dev/js/feature/search.js b/cdn/dev/js/feature/search.js new file mode 100644 index 0000000..a64fe77 --- /dev/null +++ b/cdn/dev/js/feature/search.js @@ -0,0 +1,180 @@ +// UI for Search +import { searchState, selectedKbList } from "../state/appState.js"; +import { highlightSearchContext, truncateDesc, getMarkedContext, showMarkedContext } from "../operation/searchCardContent.js"; +import { addKbToSelectionMenu } from "./kb-selection-menu.js"; +import { platformSupport } from "../operation/platformSupport.js"; +import { validateURL } from "../operation/validURL.js"; +import { setKeyboardToType } from "../operation/keyboard.js"; +import { setKbHelpDocHamburger } from "../operation/selectedKb.js"; +import { loadPageInfo } from "./pagination.js"; + +/* Search */ +const kbSearchCard = document.getElementById('kbSearchCardUI') +const searchResultCount = document.getElementById('resultCount') +const paginationCtrl = document.getElementById('paginationControls') +const magnifying = document.querySelector('#magnifyingGlassIcon') + +export function updateSearchIcon(value) { + // Base on the value given, it will display one of the icon below + magnifying.style.display = value ? 'none' : 'inline' + clearSearchIcon.style.display = value ? 'inline' : 'none' +} + +/* Display items return from search */ +export function displaySearch(keyboards, total = 0, query = '') { + const searchInstruction = document.querySelector('.search-instruction') + const kbHrTitle = document.querySelector('.keyboard-title') + + kbSearchCard.innerHTML = ''; + + // Validate the keyboards data + if (!keyboards || keyboards.length == 0) { + kbSearchCard.innerHTML = `Well, no keyboards found for ${query}.` + searchInstruction.classList.add("hidden") + kbHrTitle.textContent = "Results" + paginationCtrl.style.display = 'none' + return + } + + if (total) { + searchResultCount.innerHTML = `${total} results` + searchResultCount.classList.remove('hidden') + } + + // Getting searched Word ready for highlight + const marked = getMarkedContext(query) + + if (!query) { + // Most Download UI + searchInstruction.classList.remove("hidden") + kbHrTitle.textContent = "Most Downloads" + paginationCtrl.style.display = 'none' + } else if (total < 2) { + // Total results < 2 UI + searchInstruction.classList.add("hidden") + kbHrTitle.textContent = "Results" + paginationCtrl.style.display = 'none' + } else { + // Result of search query + searchInstruction.classList.add("hidden") + kbHrTitle.textContent = "Results" + paginationCtrl.style.display = 'flex' + } + + // UI for each keyboards + keyboards.forEach(kb => { + const card = searchKbCardUI(kb, marked, selectedKbList, keyboards) + kbSearchCard.appendChild(card) + }) +} + +// Search card UI +function searchKbCardUI(kb, marked = '', selectedKbList, data) { + const searchInput = document.querySelector('#searchInput') + const searchDropdown = new bootstrap.Dropdown(searchInput) + const textArea = document.querySelector('#textArea') + + const kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) // find a match between the keyboard from selection menu & search + // Keyboard card container + let cardWrap = document.createElement('div') + cardWrap.classList.add('card-wrap') + cardWrap.setAttribute('id', 'keyboardCardWrap') + + // Keyboard header container + let cardHeader = document.createElement('div') + cardHeader.classList.add('card-header') + + const {matchFound, matchField, matchValue} = highlightSearchContext(kb, marked) // Highlight search query + + const kbNameHeading = matchFound ? showMarkedContext(kb, matchField, matchValue) // Highlight search query UI + : (() => { + const heading = document.createElement('h4') + heading.innerHTML = kb.name + return heading + })() + + // Keyboard Plus (+) icon + const kbIconPTag = document.createElement('p') + kbIconPTag.textContent = kbFoundInList ? "-" : "+" + kbIconPTag.style.fontSize = '20px' + kbIconPTag.style.cursor = 'pointer' + kbIconPTag.classList.add('kb-icon-plus') + + // Keyboard Help (?) icon + const kbHelpIconSpan = document.createElement('span') + kbHelpIconSpan.classList.add('help-icon-span') + const kbHelpIcon = document.createElement('i') + kbHelpIcon.classList.add('fa-solid', 'fa-question') + kbHelpIconSpan.appendChild(kbHelpIcon) + + const kbHeaderTitle = document.createElement('div') + kbHeaderTitle.classList.add('card-header-title') + + // Must check if the keyboard is in the selection menu + checkKbCardUI(kbIconPTag, cardHeader, kb) + + // Keyboard ID + const kbIdPTag = document.createElement('p') + kbIdPTag.classList.add('keyboard-id') + kbIdPTag.textContent = kb.id + + // Keyboard Description + const kbDescHeading = truncateDesc(kb, matchField, marked) + + // Keyboard monthly downloads and platform support + const kbSpecs = document.createElement('div') + kbSpecs.classList.add('keyboard-specs') + + const kbDownloadHeading = document.createElement('h6') + kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` + kbDownloadHeading.classList.add('monthly-download') + + const kbPlatformSupport = document.createElement('div') + kbPlatformSupport.classList.add('platform') + kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) // Get icons for platform + + // Append children + kbHeaderTitle.appendChild(kbIconPTag) + kbHeaderTitle.appendChild(kbNameHeading) + cardHeader.appendChild(kbHeaderTitle) + cardHeader.appendChild(kbHelpIconSpan) + + kbSpecs.appendChild(kbDownloadHeading) + kbSpecs.appendChild(kbPlatformSupport) + + cardWrap.appendChild(cardHeader) + cardWrap.appendChild(kbIdPTag) + cardWrap.appendChild(kbDescHeading) + cardWrap.appendChild(kbSpecs) + + // Click on a keyboard name to enable the keyboard & add it into selection menu + kbHeaderTitle.onclick = (e) => { + e.stopPropagation() + addKbToSelectionMenu(kbIconPTag, cardHeader, kb, data) + setKeyboardToType() + setKbHelpDocHamburger(kb.id, kb.name) + searchDropdown.hide() + textArea.focus() + } + + // Click on the help icon on the search card to get to the keyboard help documentation + kbHelpIcon.addEventListener('click', () => { + const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) + const newURL = checkedURL + kb.id + window.open(newURL, '_blank') + }) + + return cardWrap +} + +// Disable or Enable UI with opacity +export function checkKbCardUI(kbIconPTag, element, kb) { + // For checking if the keyboard exists in to respond to UI + let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) + + if (kbFoundInList) { + element.style.opacity = '50%' + } else { + element.style.opacity = '100%' + } +} \ No newline at end of file diff --git a/cdn/dev/js/feature/tool-tray.js b/cdn/dev/js/feature/tool-tray.js new file mode 100644 index 0000000..c908153 --- /dev/null +++ b/cdn/dev/js/feature/tool-tray.js @@ -0,0 +1,95 @@ +const tabletToolElements = ` + + ` + +const desktopToolElements = ` +
    +
    + A + + A +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + ` + +const phoneToolElements = `
    + + + + + + +
    +
    + +
    +
    +
    + A + + A +
    +
    ` + +const phoneExpandElement = ` + + ` + +const calcScreenSize = Math.min(screen.width, screen.height) + +const toolContainer = document.querySelector('.tool-container') +const divider = document.querySelector('.divider-container') +const resizeGrip = document.querySelector('#resizeGrip') + +export function renderToolsTray() { + if (calcScreenSize < 900 && calcScreenSize >= 720) { // Tablet + toolContainer.innerHTML = tabletToolElements + divider.style.display = 'none' + } else if (calcScreenSize < 720) { // Phone + divider.innerHTML = phoneToolElements + toolContainer.innerHTML = phoneExpandElement + resizeGrip.style.display = 'none' + } else { // Desktop + toolContainer.innerHTML = desktopToolElements + } +} diff --git a/cdn/dev/js/kmwBody.js b/cdn/dev/js/kmwBody.js deleted file mode 100644 index bd9701c..0000000 --- a/cdn/dev/js/kmwBody.js +++ /dev/null @@ -1,118 +0,0 @@ -document.addEventListener('DOMContentLoaded', function() { - // Define the divider, text area and keyboard - const container = document.querySelector('.container-flex') - const divider = document.getElementById('Divider') - - const resizer = divider.querySelector('#resizeGrip') - const prevElementOfResizer = divider.previousElementSibling.querySelector('.text-area') - const nextElementOfResizer = divider.nextElementSibling - - let isResizing = false; - - let startY, startHeightTop, startHeightBottom = 0 - - const mouseDownHandler = (e) => { - e.preventDefault(); - resizer.style.cursor = 'grabbing' - isResizing = true - - startY = e.clientY - startHeightTop = prevElementOfResizer.offsetHeight - startHeightBottom = nextElementOfResizer.offsetHeight - - document.addEventListener('mousemove', mouseMoveHandler) - document.addEventListener('mouseup', mouseUpHandler) - } - - const mouseUpHandler = () => { - resizer.style.removeProperty('cursor') - isResizing = false - document.removeEventListener('mousemove', mouseMoveHandler) - } - - const mouseMoveHandler = function (e) { - if (!isResizing) return; - - let deltaY = e.clientY - startY // Get up or down direction - - let newTopHeight = startHeightTop + deltaY - let newBottomHeight = startHeightBottom - deltaY - - newTopHeight = Math.max(100, Math.min(newTopHeight, window.innerHeight * 0.8)) - newBottomHeight = Math.max(100, Math.min(newBottomHeight, window.innerHeight * 0.7)) - - prevElementOfResizer.style.height = `${newTopHeight}px` - nextElementOfResizer.style.height = `${newBottomHeight}px` - - if (newBottomHeight <= 200) { - fullScreenSize() - } - } - - /* Hide-Show Keyboard */ - const hideKeyboardBtn = document.querySelector('#hideKeyboard') - - let isTextAreaFullHeight = false - const fullHeightTextArea = window.innerHeight * 0.9 - const defaultHeightTextArea = window.innerHeight * 0.3 - - function defaultSize() { - prevElementOfResizer.style.height = `${defaultHeightTextArea}px` - nextElementOfResizer.style.height = `500px` - // nextElementOfResizer.style.width = `900px` - isTextAreaFullHeight = false - } - - function fullScreenSize() { - prevElementOfResizer.style.height = `${fullHeightTextArea}px` - isTextAreaFullHeight = true - } - - hideKeyboardBtn.addEventListener('click', () => { - if (isTextAreaFullHeight) { - defaultSize() - } else { - fullScreenSize() - } - }) - - // Copy tool - const copyBtn = document.querySelector('#copyTool') - const textArea = document.querySelector('#textArea') - copyBtn.addEventListener('click', async function() { - try { - let textToCopy = textArea.value.trim() - - if(!textToCopy) { - copyBtn.classList.replace('fa-copy', 'fa-xmark') - // copyBtn.textContent = ' No characters to copy' - setTimeout(() => { - copyBtn.classList.replace('fa-xmark', 'fa-copy') - copyBtn.textContent = '' - }, 3000) - return; - } - - await navigator.clipboard.writeText(textToCopy) - - copyBtn.classList.replace('fa-copy', 'fa-check'); - - setTimeout(() => { - copyBtn.classList.replace('fa-check', 'fa-copy'); - }, 1000); - - } catch (error) { - console.error('Failed to copy: ', error) - } - }) - - // Font slider - const fontSliderBtn = document.querySelector('#fontSizeRange') - fontSliderBtn.addEventListener('input', function() { - textArea.style.fontSize = `${this.value}px` - }) - - defaultSize() - - resizer.addEventListener('mousedown', mouseDownHandler) -}) \ No newline at end of file diff --git a/cdn/dev/js/kmwElements.js b/cdn/dev/js/kmwElements.js deleted file mode 100644 index 849f8ae..0000000 --- a/cdn/dev/js/kmwElements.js +++ /dev/null @@ -1,36 +0,0 @@ -const calcScreenSize = Math.min(screen.width, screen.height) > 720 ? 'tablet' : 'mobile' - -const searchBox = document.getElementById('searchInput') -const fontSizeContainer = document.getElementsByClassName('font-size-container') -const kbSelectionBtn = document.getElementById('keyboardSelectionButton') -const searchIcon = document.getElementById('searchIcons') - -const fontSizeElements = ` -
    - A - - A -
    ` - -if (calcScreenSize == 'tablet') { - -} - -if (calcScreenSize == 'mobile') { - const firstChild = fontSizeContainer[0].children[0] - const secondChild = fontSizeContainer[0].children[1] - firstChild.remove() - secondChild.remove() - - searchBox.addEventListener('click', () => { - kbSelectionBtn.style.display = 'none' - searchIcon.style.left = '200px' - }) -} - -const fontSizeChild = fontSizeContainer[0].children[0] -fontSizeChild.addEventListener('click', () => { - fontSizeChild.innerHTML = fontSizeElements -}) - - diff --git a/cdn/dev/js/kmwHeader.js b/cdn/dev/js/kmwHeader.js deleted file mode 100644 index f5c7941..0000000 --- a/cdn/dev/js/kmwHeader.js +++ /dev/null @@ -1,1356 +0,0 @@ -keyman = getKeymanWeb() - -function getKeymanWeb() { - if(window.tavultesoft) { - return window.tavultesoft.keymanweb; - } - return window.keyman; -} -/* Global Variables */ -let selectedKbList = [] // Main array for the search, kb selection...etc. -let kbSearchData = [] // For History search -let kmwLang = keyman.getActiveLanguage() -let kmwKb = keyman.getActiveKeyboard() - -const clearSearchIcon = document.querySelector('#clearSearchIcon') -const magnifying = document.querySelector('#magnifyingGlassIcon') - -const elements = { - worldMapBtn: document.querySelector('#worldMap'), - kmwControls: document.querySelector('#KeymanWebControl'), - - kbSelection: document.querySelector('#keyboardSelection'), - keyboardSelectionButton: document.querySelector('#keyboardSelectionButton'), - caretRightIcon: keyboardSelectionButton.querySelector('.fa-caret-right'), - - searchBar: document.querySelector('#searchBar'), - searchInput: document.querySelector('#searchInput'), - searchDropdownMenu: document.querySelector('#searchDropdownMenu'), - searchIcons: document.querySelector('#searchIcons'), -} - -const state = { - mapIsOpen: false -} - -/* - ===================================== Default keyboard ========================================= -*/ - -function defaultKeyboard(kbdname = "basic_kbdus", languageCode = "en") { - if(!exists(kbdname, languageCode)) { - if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' - return - } - setKeyboardWithDirection(kbdname, languageCode) -} - -/* - ============================= Toggle between World Map and Search ============================== -*/ -elements.worldMapBtn?.addEventListener('click', (e) => { - e.preventDefault() - state.mapIsOpen = true - if (state.mapIsOpen == true) { - openMap() - keyman.addEventListener('keyboardchange', () => { - location.replace(`#${keyman.getActiveLanguage()},${keyman.getActiveKeyboard()}`) - updateExample(keyman.getActiveKeyboard()) - setTimeout(() => { - applyClassToKb(), 0 - }) - }) - } else { - openSearch() - } -}) - -function openSearch() { - state.mapIsOpen = false - hideEls( - elements.kmwControls, - ) - showEls( - elements.searchDropdownMenu, - elements.searchIcons - ) - - if (selectedKbList.length > 0) { - elements.caretRightIcon.textContent = selectedKbList.length - removeClass(elements.caretRightIcon, 'fa-magnifying-glass') - } else { - elements.caretRightIcon.textContent = '' - elements.caretRightIcon.classList.add('fa-caret-right') - } - - elements.searchBar.replaceChildren( - elements.searchInput, - elements.searchIcons, - elements.searchDropdownMenu - ) -} - -function openMap() { - state.mapIsOpen = true - removeClass( - elements.kmwControls, 'hidden', - elements.caretRightIcon, 'fa-caret-right' - ) - hideEls( - elements.searchDropdownMenu - ) - removeTextContent( - elements.caretRightIcon - ) - elements.keyboardSelectionButton.removeAttribute('id', 'keyboardSelectionButton') - elements.keyboardSelectionButton.setAttribute('id', 'returnToSearchButton') - elements.caretRightIcon.classList.add('fa-magnifying-glass') - elements.keyboardSelectionButton.style.backgroundColor = "var(--keyman-orange)" - elements.keyboardSelectionButton.style.border = '0px' - elements.keyboardSelectionButton.classList.add('return-to-search') - elements.kbSelection.style.display = "none" - elements.searchBar.replaceChildren( - elements.kmwControls - ) -} - -function returnToSearch() { - elements.keyboardSelectionButton.removeAttribute('id', 'returnToSearchButton') - elements.keyboardSelectionButton.setAttribute('id', 'keyboardSelectionButton') - - if ((selectedKbList?.length || 0) < 1) { - elements.caretRightIcon.classList.add('fa-caret-right') - removeClass(elements.caretRightIcon, 'fa-magnifying-glass') - elements.caretRightIcon.textContent = '' - } - - elements.keyboardSelectionButton.style.backgroundColor = "" - elements.kbSelection.style.display = "block" - openSearch() -} - -function waitForElement(selector) { - return new Promise((resolve) => { - const interval = setInterval(() => { - const element = document.querySelector(selector) - if (element) { - clearInterval(interval) - resolve(element) - } - }, 100) - }) -} - -waitForElement('#returnToSearchButton').then((element) => { - element.addEventListener('click', (e) => { - e.preventDefault() - returnToSearch() - }) -}) - -waitForElement(".kmw-osk-frame").then((oskDiv) => { - document.querySelector('.keyboard-area').appendChild(oskDiv) -}) - -/* - ==================== Search Interaction =================== -*/ - -/* Search Input */ -const dropdown = new bootstrap.Dropdown(elements.searchInput, { - autoClose: 'outside' -}) - -document.addEventListener('click', (e) => { - if (!elements.searchInput.contains(e.target) && !elements.searchDropdownMenu.contains(e.target)) { - dropdown.hide() - } -}) - -elements.searchInput.addEventListener('click', (e) => { - e.stopPropagation() - // defaultKeyboard() - dropdown.show() -}) - -// Hide Dropdown Search on Mouse leave -elements.searchDropdownMenu.addEventListener('mouseleave', (e) => { - e.preventDefault() - dropdown.hide() -}) - -/* - =========================== Utility functions ============================ -*/ -function hideEls(...elements) { - return elements.every(el => el.classList.add('hidden')) -} - -function showEls(...elements) { - return elements.every(el => el.classList.remove('hidden')) -} - -function removeClass(element, className) { - return element.classList.remove(className) -} - -function removeTextContent(...elements) { - return elements.every(el => el.textContent = '') -} - -/* Elements validation */ -function exists(...elements) { - return elements.every(el => el != null) -} - -document.addEventListener('DOMContentLoaded', () => { - /* UI Behavior of the Selected Keyboard menu */ - if (exists(elements)) { - elements.keyboardSelectionButton.addEventListener('mouseenter', () => { - elements.kbSelection.classList.add('open') - }) - elements.keyboardSelectionButton.addEventListener('click', () => { - elements.kbSelection.classList.remove('open') - }) - elements.kbSelection.addEventListener('mouseleave', () => { - elements.kbSelection.classList.remove('open') - }) - } -}) - -/* - === Keyboard Execution === -*/ -const downloadBtn = document.getElementById('kbDownloadPage') -const textArea = document.getElementById('textArea') -let langExamples = []; - -function selectKb(kbdname, languageCode) { - if(!exists(kbdname, languageCode)) { - if (textArea) textArea.placeholder = 'A Keyboard name isn\'t specified. Select a keyboard and start typing' - return - } - setKeyboardWithDirection(kbdname, languageCode) -} - -function setTextDirection(targetEls, dir) { - const copyBtn = document.querySelector('#copyTool') - - targetEls.dir = dir - if (dir == 'rtl') { - copyBtn.style.right = '0' - copyBtn.style.left = '10px' - } else { - copyBtn.style.right = '' - copyBtn.style.left = '' - } -} - -// Change and type keyboard -async function setKeyboardWithDirection(kbdname, languageCode) { - const kbSpan = document.querySelector('#kbSpan') - const langTag = `#${languageCode}` - let kbTag = '' - - if (kbdname.match(/Keyboard_*/)) { - kbTag = `${kbdname}` - } else { - kbTag = `Keyboard_${kbdname}` - } - - location.replace(`${langTag},${kbTag}`) - await keyman.addKeyboards(kbdname) - const kbd = keyman.getKeyboard(kbdname, languageCode) - await keyman.setActiveKeyboard(kbdname, languageCode) - - // setTimeout(() => { - // applyClassToKb(), 0 - // }) - - if(kbd) { - textArea.placeholder = `The ${kbdname} keyboard is selected. Start typing...` - kbSpan.innerHTML = `${kbdname}` - - setTextDirection(textArea, textArea.dir) - } - updateExample(kbdname) - if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdname) -} - -/* Language Examples AJAX */ -async function updateExample(kbdname) { - const keymanExample = document.getElementById("example") - const exampleBox = document.getElementById("exampleBox") - - if (!keymanExample || !exampleBox) return false; - - if(kbdname == '') - { - keymanExample.textContent = `No example is available due to empty Keyboard name.` - return true; - } - - let activeLanguage = keyman.getActiveLanguage(); - - if(langExamples[activeLanguage + '_' + kbdname]) - { - keymanExample.innerHTML = langExamples[activeLanguage + '_' + kbdname]; - return true; - } - - langExamples[activeLanguage + '_' + kbdname] = 'Loading...'; - keymanExample.innerHTML = 'Loading...'; - - const link = `/prog/languageexample.php?keyboard=${kbdname}&language=${activeLanguage}`; - try { - const response = await fetch(link); - if(response.status == 200) { - const content = await response.text(); - - langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = content; - } else { - throw new Error(`Unable to retrieve content, status was ${response.status}: ${response.statusText}`); - } - } catch(e) { - langExamples[activeLanguage + '_' + kbdname] = keymanExample.innerHTML = 'Error retrieving example: '+e.message; - throw e; - } -} - -function applyClassToKb() { - - const kbArea = document.querySelector('.keyboard-area') - if (!kbArea) return - - const apply = () => { - const child = kbArea.children - for (const c of child) { - if (!c.classList.contains('kmw-osk-frame')) { - c.classList.add('kmw-osk-frame') - c.classList.add('kmw-help-osk-frame') - } - } - } - - apply() - - // const observer = new MutationObserver(() => { - // for (const m of mutations) { - // if (m.type === 'childlist' && m.addedNodes.length) { - // apply() - // } - // } - // }) - // observer.observe(kbArea, {childList: true}) -} - -/* Search */ -const kbSearchCard = document.getElementById('kbSearchCardUI'); -let debounceTimer - -/* Pagination */ -prevBtn = document.getElementById('prevPage') -nextBtn = document.getElementById('nextPage') -pageInfo = document.getElementById('pageInfo') - -searchResultCount = document.getElementById('resultCount') -paginationCtrl = document.getElementById('paginationControls') - -let currentPage = 1 -let currentQuery = '' -let totalPage -const itemPerPage = 10 - -prevBtn.addEventListener('click', goPrevPage) -nextBtn.addEventListener('click', goNextPage) - -function updatePaginationCtrl() { - pageInfo.textContent = `${currentPage} of ${totalPage}` - nextBtn.disabled = currentPage >= totalPage - prevBtn.disabled = currentPage <= 1 -} - -function goPrevPage() { - if (currentPage > 1) { - currentPage-- - searchKeyboard(currentQuery, currentPage) - } -} - -function goNextPage() { - if (currentPage < totalPage) { - currentPage++ - searchKeyboard(currentQuery, currentPage) - } -} - -/* Click: Open Search and Display search instructions */ -elements.searchInput.addEventListener('click', function(e) { - const query = e.target.value.trim() - - defaultKeyboard() - if (query == "") { - resetSearch() - } else { - searchKeyboard(query) - } -}) - -/* Input: Search and Display keyboards */ -elements.searchInput.addEventListener('input', function(e) { - handleSearch(e.target.value) -}) - -clearSearchIcon.addEventListener('click', () => { - elements.searchInput.value = '' - handleSearch() - elements.searchInput.focus() -}) - -function handleSearch(value = "") { - currentQuery = value.trim() - currentPage = 1 - - updateSearchIcon(value) - - if (!currentQuery) { - resetSearch() - return - } - debounceSearch(currentQuery, currentPage) -} - -function resetSearch() { - paginationCtrl.style.display = 'none' - defaultSearch() -} - -function updateSearchIcon(value) { - const hasValue = value.length > 0 - magnifying.style.display = hasValue ? 'none' : 'inline' - clearSearchIcon.style.display = hasValue ? 'inline' : 'none' -} - -function debounceSearch(query, page) { - clearTimeout(debounceTimer) - if (query.length > 1) { - debounceTimer = setTimeout(() => { - searchKeyboard(query, page) - }, 300) - } -} - -/* == Section == - Search -*/ - -/* Display top downloads with search Instruction */ -async function defaultSearch() { - kbSearchCard.innerHTML = `

    Loading...

    ` - try { - let response = await fetch(`https://api.keyman.com/search/2.0?q=p:popular`) - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}`) - } - - let data = await response.json() - - let mostDownloadkb = data.keyboards - - if (!mostDownloadkb || !Array.isArray(mostDownloadkb)) { - throw new Error(`Invalid API response structure`) - } - displaySearch(mostDownloadkb) - } - catch(error) { - console.error(`Error fetching ${error}`) - kbSearchCard.innerHTML = `
    No keyboards are found.
    ` - paginationCtrl.style.display = 'none' - } -} - -/* Get query and return search */ -async function searchKeyboard(query = null, page) { - kbSearchCard.innerHTML = `
    Searching ${query}...
    ` - kbSearchCard.style.display = 'block' - - let response = await fetch(`https://api.keyman.com/search/2.0?q=${encodeURIComponent(query)}&p=${page}`) - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}`) - } - - searchHistory(query) - let data = await response.json() - // Found with Context: Setup pagination - if (data.context) { - totalPage = data.context.totalPages || 1; - currentPage = data.context.pageNumber || 1; - } else { - totalPage = Math.ceil(data.keyboards.length / itemPerPage); - } - - // Validate data.keyboards - let keyboardData = data.keyboards - if (!keyboardData || !Array.isArray(keyboardData)) { - throw new Error("Invalid API response structure") - } - - // Get total result - let totalFound = data.context.totalRows - - updatePaginationCtrl() - displaySearch(keyboardData, totalFound, query) -} - -/* Display items return from search */ -function displaySearch(data, total = 0, query = '') { - kbSearchCard.innerHTML = ''; - - if (!data || data.length == 0) { - kbSearchCard.innerHTML = 'No keyboards are found.' - paginationCtrl.style.display = 'none' - return - } - - if (total) { - searchResultCount.innerHTML = `${total} results` - searchResultCount.classList.remove('hidden') - } - - // Getting searched Word ready for highlight - const marked = getMarkedContext(query) - - const searchInstruction = document.querySelector('.search-instruction') - const kbHrTitle = document.querySelector('.keyboard-title') - if (!query) { - searchInstruction.classList.remove("hidden") - kbHrTitle.textContent = "Most Downloads" - } else { - searchInstruction.classList.add("hidden") - kbHrTitle.textContent = "" - } - data.forEach(kb => { - const card = searchKbCardUI(kb, marked, selectedKbList, data) - kbSearchCard.appendChild(card) - }) - paginationCtrl.style.display = 'flex'; -} - -// UI Search card -function searchKbCardUI(kb, marked = '', selectedKbList, data) { - const kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) - // Keyboard card container - let cardWrap = document.createElement('div') - cardWrap.classList.add('card-wrap') - cardWrap.setAttribute('id', 'keyboardCardWrap') - - // Keyboard header container - let cardHeader = document.createElement('div') - cardHeader.classList.add('card-header') - - const {matchFound, matchField, matchValue} = highlightSearchContext(kb, marked) - - const kbNameHeading = matchFound ? showMarkedContext(kb, matchField, matchValue) - : (() => { - const heading = document.createElement('h4') - heading.innerHTML = kb.name - return heading - }) - - // Keyboard Plus (+) icon - const kbIconPTag = document.createElement('p') - kbIconPTag.textContent = kbFoundInList ? "-" : "+" - kbIconPTag.style.fontSize = '20px' - kbIconPTag.style.cursor = 'pointer' - kbIconPTag.classList.add('kb-icon-plus') - - checkKbCardUI(kbIconPTag, cardWrap, kb) - // Keyboard ID - const kbIdPTag = document.createElement('p') - kbIdPTag.classList.add('keyboard-id') - kbIdPTag.textContent = kb.id - - // Keyboard Description - const kbDescHeading = truncateDesc(kb, matchField, marked) - - // Keyboard monthly downloads and platform support - const kbSpecs = document.createElement('div') - kbSpecs.classList.add('keyboard-specs') - - const kbDownloadHeading = document.createElement('h6') - kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` - kbDownloadHeading.classList.add('monthly-download') - - const kbPlatformSupport = document.createElement('div') - kbPlatformSupport.classList.add('platform') - kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) - - // Append children - cardHeader.appendChild(kbNameHeading) - cardHeader.appendChild(kbIconPTag) - - kbSpecs.appendChild(kbDownloadHeading) - kbSpecs.appendChild(kbPlatformSupport) - - cardWrap.appendChild(cardHeader) - cardWrap.appendChild(kbIdPTag) - cardWrap.appendChild(kbDescHeading) - cardWrap.appendChild(kbSpecs) - - // Choose keyboard to selection - kbIconPTag.onclick = (e) => { - e.stopPropagation() - addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) - textArea.focus() - selectKb() - } - // console.log("Recent:", historyKbSelection.getHistory()); - - return cardWrap -} - -// Disable or Enable search card -function checkKbCardUI(kbIconPTag, cardWrap, kb) { - // For checking if the keyboard exists in selected Kbs - let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) - if (kbFoundInList) { - cardWrap.classList.add('disabled') - } else { - cardWrap.classList.remove('disabled') - } -} - -// Highlight word searched -function getMarkedContext(query) { - let escapedTerm = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - return new RegExp(escapedTerm, 'i') -} - -// Find a match between Search Context and Language, Keyboard name, Description -function highlightSearchContext(kb, marked) { - let matchFound = false - let matchField = "" - let matchValue = "" - - // Get and find language that matches the search - for (lang in kb.languages) { - let langData = kb.languages[lang] - for (key in langData) { - const value = langData[key] - if (typeof value == "string" && marked.test(value)) { - matchFound = true - matchValue = value.replace(marked, (m) => m ? `${m}` : m) - matchField = "language" - break - } - } - if (matchFound) break - } - - // Find a match for keyboard name if language is not a match - if (!matchFound && marked.test(kb.name)) { - matchFound = true - matchValue = kb.name.replace(marked, '$&') - matchField = "keyboard" - } - - // Find a match for keyboard description if name is not a match - if (!matchFound && marked.test(kb.description)) { - matchFound = true - matchField = "description" - } - - return {matchField, matchValue, matchFound} -} - -// Display Highlighted Search Context -function showMarkedContext(kb, matchField, matchValue) { - const kbNameHeading = document.createElement('h4') - - const kbHelpLink = document.createElement('a') - kbHelpLink.href = `https://help.keyman.com/keyboard/${kb.id}` - kbHelpLink.target = '_blank' - kbHelpLink.rel = 'noopener noreferrer' - - // Display matched language - const langNameSpan = document.createElement('span') - langNameSpan.style.fontSize = "14px" - if (matchField == "language") { - langNameSpan.innerHTML = matchField == "language" ? ` (${matchValue} language)` : "" - } - - // Display matched keyboard - if (matchField == "keyboard") { - kbHelpLink.innerHTML = matchValue - } else { - kbHelpLink.textContent = kb.name - } - kbNameHeading.appendChild(kbHelpLink) - kbNameHeading.appendChild(langNameSpan) - kbNameHeading.addEventListener('click', () => { - const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) - const newURL = checkedURL + kb.id - window.open(newURL, '_blank') - }) - - return kbNameHeading -} - -// Truncated Keyboard Description -function truncateDesc(kb, matchField, marked) { - const kbDescHeading = document.createElement('h6') - kbDescHeading.classList.add("keyboard-description") - const word_limits = 90 - - let temp = document.createElement('div') - temp.innerHTML = kb.description - - let fullDesc = kb.description - let plainText = temp.textContent - let shortText = "" - - let isTruncated = false - - if (plainText.length >= word_limits) { - shortText = plainText.slice(0, word_limits) + "..." - kbDescHeading.innerHTML = shortText - isTruncated = true - } else { - kbDescHeading.innerHTML = fullDesc - isTruncated = false - } - - if (isTruncated) { - const toggleBtn = document.createElement('a') - toggleBtn.href = "#" - toggleBtn.style.marginLeft = "6px" - toggleBtn.textContent = "Show more" - - toggleBtn.addEventListener('click', e => { - e.preventDefault() - const isExpanded = toggleBtn.textContent == "Show more" - kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, (m) => m ? `${m}` : m) : fullDesc - if (matchField == 'description') { - kbDescHeading.innerHTML = isExpanded ? fullDesc.replace(marked, '$&') : shortText - } - kbDescHeading.style.color = isExpanded ? 'black' : 'gray' - toggleBtn.textContent = isExpanded ? "Show less" : "Show more" - kbDescHeading.appendChild(toggleBtn) - }) - kbDescHeading.appendChild(toggleBtn) - } - - return kbDescHeading -} - -/* - == End of Search Section == -*/ - -// Platform Support -function platformSupport(data) { - const platformMap = { - android: "Android", - desktopWeb: "Web", - ios: "iPhone and iPad", - linux: "Linux", - macos: "macOS", - mobileWeb: "Mobile web", - windows: "Windows" - } - let platformSpan = Object.entries(data) - .filter(([_, supportLevel]) => supportLevel == 'full') - .map(([platform]) => `${platformMap[platform]}`).join('') - - return platformSpan -} - -/* == Section == - Keyboard Selection Menu -*/ -function addKbToSelectionMenu(kbIconPTag, cardWrap, kb, data) { - const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') - let isSelected = selectedKbList.some(selected => selected.id == kb.id) - addDataKb(data) - // Remove keyboard - if (isSelected) { - removeKbSelected(kb.id) - kbIconPTag.textContent = '+' - generateKbUI(selectedKbList) - checkKbCardUI(kbIconPTag, cardWrap, kb) - - return - } - if(selectedKbList.length < 5) { - addKbToSelection(kb) - generateKbUI(selectedKbList) - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('kb-icon-plus-animate') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('kb-icon-plus-animate') - keyboardSelectionButton.classList.remove('btn-secondary') - keyboardSelectionButton.classList.add('btn-keyman-orange') - }, 800) - - checkKbCardUI(kbIconPTag, cardWrap, kb) - return - } - confirmAndAddKb(() => { - addKbToSelection(kb) - generateKbUI(selectedKbList) - - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('kb-icon-plus-animate') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('kb-icon-plus-animate') - keyboardSelectionButton.classList.remove('btn-secondary') - keyboardSelectionButton.classList.add('btn-keyman-orange') - }, 800) - checkKbCardUI(kbIconPTag, cardWrap, kb) - }) -} - -// Add keyboard for kb search and selection UI -function addKbToSelection(kb) { - const kbInfo = { - "id": kb.id, - "name": kb.name, - "version": kb.version, - "helpLink": kb.helpLink, - "platformSupport": kb.platformSupport, - "totalDownloads": kb.match.totalDownloads, - "sourcePath": kb.sourcePath, - "supportedLanguage": kb.languages, - "lastUpdated": kb.lastModifiedDate - } - // historyKbSelection.add(kbInfo) - selectedKbList.push(kbInfo) -} - -// UI for keyboard selection menu -function generateKbUI(selectedKbList) { - const keyboardSelection = document.getElementById("keyboardSelection") - keyboardSelection.innerHTML = '' - - if(selectedKbList.length < 1) { - triggerKbCount(selectedKbList) - resetKbSelectionMenu() - return - } - - const kbDivHeader = document.createElement('div') - kbDivHeader.textContent = "Keyboard Selection menu" - kbDivHeader.classList.add('kb-item-header') - - const kbDivFoot = document.createElement('div') - kbDivFoot.textContent = "US Basic Keyboard" - kbDivFoot.classList.add('kb-item-footer') - - keyboardSelection.appendChild(kbDivHeader) - - selectedKbList.forEach(data => { - const kbDiv = document.createElement('div') - kbDiv.classList.add("kb-item") - kbDiv.setAttribute('id', `${data.id}`) - - const kbName = document.createElement('span') - kbName.textContent = data.name - - const kbConfigList = document.createElement('ul') - kbConfigList.classList.add('keyboard-configs') - kbConfigList.innerHTML = ` -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • - ` - - const kbDetails = displayKbDetails(data) - - kbDiv.appendChild(kbName) - kbDiv.appendChild(kbConfigList) - kbDiv.appendChild(kbDetails) - keyboardSelection.appendChild(kbDiv) - keyboardSelection.append(kbDivFoot) - - let kbdName = data.id - let langCode = Object.keys(data.supportedLanguage)[0] || "en" - - selectKb(kbdName, langCode) - kbConfigList.addEventListener('click', (e) => { - const target = e.target - if (target.tagName == 'I' && target.dataset.action) { - const action = target.dataset.action - const id = target.dataset.id - const helpLink = target.dataset.helplink - kbConfigMenu(action, id, helpLink) - } - }) - - kbDiv.addEventListener('click', () => { - kbdName = data.id - langCode = Object.keys(data.supportedLanguage)[0] || "en" - textArea.focus() - selectKb(kbdName, langCode) - }) - - kbDivFoot.onclick = () => { - defaultKeyboard() - } - - const kbHelpLink = document.querySelector('#kbHelpdocLink') - kbHelpLink.addEventListener('click', (e) => { - kbConfigMenu('help', '', data.helpLink) - }) - }) - triggerKbCount(selectedKbList) -} - -// Keyboard count for Keyboard selection menu -function triggerKbCount(selectedKbList) { - const kbSelectedLength = selectedKbList.length - const keyboardSelectionButton = document.querySelector('#keyboardSelectionButton') - const keyboardCount = document.querySelector('#kbCount') - - if (kbSelectedLength >= 1) { - keyboardCount.classList.remove('fa-caret-right') - keyboardCount.textContent = `${kbSelectedLength}` - keyboardSelectionButton.classList.add('btn-keyman-orange') - keyboardSelectionButton.classList.remove('btn-secondary') - } else { - keyboardCount.classList.add('fa-caret-right') - keyboardCount.textContent = '' - keyboardSelectionButton.classList.remove('btn-keyman-orange') - keyboardSelectionButton.classList.add('btn-secondary') - } -} - -// Keyboard count default for Keyboard selection menu -function resetKbSelectionMenu() { - const keyboardSelection = document.querySelector("#keyboardSelection") - - const kbDivHeader = document.createElement('div') - kbDivHeader.textContent = "Keyboard Selection menu" - kbDivHeader.classList.add('kb-item-header') - - const kbItem = document.createElement('div') - kbItem.classList.add('.kb-item') - - const pTag = document.createElement('p') - pTag.textContent = "Open Search to get your keyboard" - - const kbDivFoot = document.createElement('div') - kbDivFoot.textContent = "US Basic Keyboard" - kbDivFoot.classList.add('kb-item-footer') - - kbItem.appendChild(pTag) - - keyboardSelection.appendChild(kbDivHeader) - keyboardSelection.appendChild(kbItem) - keyboardSelection.appendChild(kbDivFoot) -} - -// Compare and remove keyboard -function removeKbSelected(kbId) { - if(kbId) { - selectedKbList = selectedKbList.filter(kb => kb.id !== kbId) - } -} - -// Check 6th keyboard -function confirmAndAddKb(onConfirmAdd) { - if (typeof onConfirmAdd != 'function') { - console.log("Expected the onConfirmAdd a function, instead got: " + typeof onConfirmAdd) - alert("Click on the keyboard again to enable.") - } - - const warningDialogUI = limitKbSelectionUI(() => { - onConfirmAdd() - selectedKbList.shift() - generateKbUI(selectedKbList) - }) - - document.body.appendChild(warningDialogUI) -} - -// UI for Keyboard Selected Limitation -function limitKbSelectionUI(onAccept) { - const dialogDiv = document.createElement('div') - dialogDiv.classList.add('warning-container') - - const dialogContentDiv = document.createElement('div') - dialogContentDiv.classList.add('warning-content') - - const dialogCancel = document.createElement('button') - dialogCancel.classList.add('warning-cancel-btn') - dialogCancel.setAttribute('id', 'cancelWarningBtn') - dialogCancel.textContent = 'โœ–' - dialogCancel.onclick = () => { - dialogDiv.remove() - generateKbUI(selectedKbList) - } - - const dialogImgTag = document.createElement('img') - dialogImgTag.classList.add('warning-keyman-image') - dialogImgTag.src = `/cdn/dev/img/keymanweb-mini-logo-88.png` - dialogImgTag.alt = "Keyman Logo" - - const firstKeyboard = selectedKbList[0].name - - const dialogPTag = document.createElement('p') - dialogPTag.classList.add('warning-text') - dialogPTag.innerHTML = `The keyboards selected exceeds the limitation of 5 keyboards. Click 'Allow' to remove the
    ${firstKeyboard} keyboard.` - - const dialogUlTag = document.createElement('ol') - dialogUlTag.textContent = "Your keyboards selection:" - selectedKbList.forEach((kb, index) => { - const dialogLiTag = document.createElement('li') - if (index == 0) { - const markKeyboard = document.createElement('mark') - markKeyboard.textContent = kb.name - dialogLiTag.appendChild(markKeyboard) - } else { - dialogLiTag.textContent = kb.name - } - dialogUlTag.appendChild(dialogLiTag) - - }) - - const dialogAccept = document.createElement('button') - dialogAccept.classList.add('warning-accept-btn') - dialogAccept.setAttribute('id', 'acceptWarningBtn') - dialogAccept.textContent = "Allow" - dialogAccept.onclick = () => { - dialogDiv.remove() - onAccept() - } - - dialogContentDiv.appendChild(dialogCancel) - dialogContentDiv.appendChild(dialogImgTag) - dialogContentDiv.appendChild(dialogPTag) - dialogContentDiv.appendChild(dialogUlTag) - dialogContentDiv.appendChild(dialogAccept) - - dialogDiv.appendChild(dialogContentDiv) - - return dialogDiv -} - -// Seperate list for History/Remember Search - -/* - ========================== To be continued ========================== -*/ -function addDataKb(data) { - let selectedKbData = [] - // console.log(data) - const kbInfo = { - "platformSupport": data.platformSupport, - // "monthlyDownloads": data.match.downloads, - "sourceFile": data.sourcePath, - } - selectedKbData.push(kbInfo) -} - -// End of History search - -// Keyboard selection menu's tools: help, download, and remove -function kbConfigMenu(action, id, helplink) { - if (action == "help") { - window.open(helplink, '_blank') - } - - if (action == "download") { - const downloadUrl = `https://keyman.com/keyboards/install/${id}` - window.open(downloadUrl, '_blank') - } - - if (action == "remove") { - removeKbSelected(id) - generateKbUI(selectedKbList) - triggerKbCount(selectedKbList) - } - - if (action == "info") { - const kbDetails = document.querySelector(`#keyboard-${id}-details`) - - kbDetails.addEventListener('mouseleave', () => { - kbDetails.classList.add('hidden') - }) - kbDetails.classList.remove('hidden') - } -} - -// Keyboard details for Keyboard selection menu -function displayKbDetails(data) { - const item = selectedKbList.find(kb => kb.id == data.id) - if (!item) return; - - const kbDetails = document.createElement('div') - kbDetails.classList.add('keyboard-details') - kbDetails.setAttribute('id', `keyboard-${data.id}-details`) - kbDetails.classList.add('animate__animated', 'animate__fadeIn') - kbDetails.classList.add('hidden') - - const kbDetailsHead = document.createElement('div') - kbDetailsHead.textContent = 'Keyboard Details' - kbDetailsHead.classList.add('kb-item-header') - - const kbDetailsContent = document.createElement('div') - kbDetailsContent.classList.add('keyboard-content-wrapper') - kbDetailsContent.innerHTML = ` -
      -
    • -
      -
      Name
      -
      ${item.name || "N/A"}
      -
      -
    • -
    • -
      -
      Keyboard ID
      -
      ${item.id || "N/A"}
      -
      -
    • -
    • -
      -
      Version
      -
      ${item.version || "N/A"}
      -
      -
    • -
    • -
      -
      Total downloads
      -
      ${item.totalDownloads || 0}
      -
      -
    • -
    • -
      -
      Source Path
      - -
      -
    • -
    • -
      -
      Supported Platforms
      -
      - ${platformSupport(item.platformSupport) || 'No platforms supported'} -
      -
      -
    • -
    • -
      -
      Last Updated
      -
      ${getOnlyDates(item.lastUpdated) || 0}
      -
      -
    • -
    - ` - kbDetails.appendChild(kbDetailsHead) - kbDetails.appendChild(kbDetailsContent) - - return kbDetails -} - -// Get only the YYYY-mm-dd format -function getOnlyDates(dateData) { - const finalDateData = dateData.match(/^\d{4}-\d{2}-\d{2}/) - return finalDateData -} - -// Validate URLs -function validateURL(string) { - try { - const newUrl = new URL(string) - if (newUrl.protocol === 'https:') { - return newUrl - } else { - return false - } - } catch (error) { - console.error(error) - } -} -/* - == End of Keyboard Selection menu Section == -*/ - -/* - == Store data in localStorage to use for reload == -*/ -let appState = { - fontSize: 16, - writtenText: "", - selectedKbList: [], - enabledKb: null, - keyboardSizes: null, - textAreaSizes: null -} -const keyboardContainer = document.querySelector('.keyboard-container') -const fontSizeRange = document.querySelector('#fontSizeRange') - -function getFontSize(element) { - let theFontSize - theFontSize = parseInt(window.getComputedStyle(element).fontSize) || "16" - - return theFontSize -} - -function getSelectedKb() { - return selectedKbList || [] -} - -function getEnabledKb() { - let hash = location.hash.match(/^#(.+),(Keyboard_.+)$/i)[0] - - let kbValues = hash.replace('#', '') - kbValues = hash.split(',') - - return [hash, kbValues] -} - -function getElementsSize(element) { - const rect = element.getBoundingClientRect() - return { - height: rect.height, - width: rect.width, - positionX: rect.x, - positionY: rect.y - } -} - -function getElementValue(element) { - return element.value -} - -function setFontSize(size) { - textArea.style.fontSize = size + "px" - fontSizeRange.value = size -} - -function setWrittenText(text) { - textArea.value = text -} - -function setElementsSize(element, sizes) { - element.style.height = sizes.height + "px" - element.style.left = sizes.positionX + "px" - element.style.top = sizes.positionY + "px" -} - -function setSelectedKb(savedKbList) { - selectedKbList = savedKbList -} - -function setEnabledKb(kb) { - if (kb) { - selectKb(kb) - } -} - -function buildAppState() { - appState = { - fontSize: getFontSize(textArea), - selectedKbList: getSelectedKb(), - enabledKb: getEnabledKb(), - textAreaSizes: getElementsSize(textArea), - keyboardSizes: getElementsSize(keyboardContainer), - writtenText: getElementValue(textArea) - } - saveSettings("keymanWebState", appState) -} - -function saveSettings(key, state) { - let recentTime = new Date() - const time = 5000 // equals to An hour - let item - - // console.log("recentTime: ", recentTime) - // console.log("recentTime.getTime(): ", recentTime.getTime()) - - if (state) { - item = { - value: state, - expiry: recentTime.getTime() + time - } - } - localStorage.setItem(key, JSON.stringify(item)) -} - -function loadSettings(key) { - const raw = localStorage.getItem(key) - if (raw) { - let appState = JSON.parse(raw) - const newTime = new Date() - - console.log("newTime: ", newTime, "appState.expiry: ", appState.expiry) - console.log(newTime.getTime() > appState.expiry) - if (newTime.getTime() > appState.expiry) { - localStorage.removeItem(key) - alert("Session expired!") - return null - } - - setFontSize(appState.value.fontSize) - setWrittenText(appState.value.writtenText) - setElementsSize(textArea, appState.value.textAreaSizes) - setElementsSize(keyboardContainer, appState.value.keyboardSizes) - setSelectedKb(appState.value.selectedKbList) - setEnabledKb(appState.value.enabledKb[0]) - - generateKbUI(appState.value.selectedKbList) - console.log(appState.value.enabledKb[1][1], appState.value.enabledKb[1][0]) - // selectKb(appState.value.enabledKb[1][1], appState.value.enabledKb[1][0]) - } -} - -window.addEventListener('load', () => { - loadSettings("keymanWebState") -}) - -window.addEventListener('beforeunload', () => { - buildAppState() -}) - -window.addEventListener('storage', (e) => { - if (e.key == "keymanWebState") { - appState = JSON.parse(e.newValue) - buildAppState() - } -}) - -function searchHistory(value) { - if (kbSearchData.length < 0) { - kbSearchData.push(value) - for (i=0; i<=kbSearchData.length; i++) { - if (value != kbSearchData[i] || kbSearchData.length >= 5) { - kbSearchData.shift() - } - } - } - // console.log(kbSearchData) -} \ No newline at end of file diff --git a/cdn/dev/js/main.mjs b/cdn/dev/js/main.mjs new file mode 100644 index 0000000..05e60af --- /dev/null +++ b/cdn/dev/js/main.mjs @@ -0,0 +1,133 @@ +// Tool imports +import { eraserTool } from "./feature/eraser.js" +import { copyTool } from "./feature/copy.js" +import { fontSliderTool } from "./feature/font-slider.js" +import { expandTool } from "./feature/expand-textarea.js" +import { hideKeyboard } from "./feature/hide-keyboard.js" +import { mouseDownGrabber } from "./operation/resizeKeyboard.js" +import { renderToolsTray } from "./feature/tool-tray.js" + +// Pagination-related imports +import { searchState } from "./state/appState.js" +import { goPrevPage, goNextPage, updatePaginationCtrl } from "./feature/pagination.js" +import { getKeyboard, setKeyboard } from "./operation/handleKeyboardData.js" +import { handleSearch, defaultSearch } from "./operation/searchLogic.js" + +// Keyboard imports +import { defaultSize } from "./operation/resizeTextArea.js" +import { setKeyboardToType } from "./operation/keyboard.js" + +import { waitForElement } from "./operation/waitForElement.js" +waitForElement(".kmw-osk-frame").then((oskDiv) => { + document.querySelector('.keyboard-area').appendChild(oskDiv) +}) + +// Local Storage +import { buildAppState, loadSettings } from "./operation/rememberState.js" +import { setEnabledKb } from "./state/enableKb.js" + +// Search Components +const clearSearchIcon = document.querySelector('#clearSearchIcon') + +// Pagination Components +const prevBtn = document.getElementById('prevPage') +const nextBtn = document.getElementById('nextPage') + +// Keyboard Selection Menu Components +const keyboardSelectionButton = document.querySelector('#keyboardSelectionButton') +const kbSelection = document.querySelector('#keyboardSelection') + +// Search Components +const searchInput = document.querySelector('#searchInput') +const searchDropdownMenu = document.querySelector('#searchDropdownMenu') +const searchDropdown = new bootstrap.Dropdown(searchInput) + +document.addEventListener('DOMContentLoaded', () => { + // Tool Tray for Mobile, Tablet, and Desktop layouts + renderToolsTray() + // Eraser + eraserTool(document.querySelector("#eraseTool")) + // Copy + copyTool(document.querySelector("#copyTool")) + // Font slider + fontSliderTool(document.querySelector("#fontSizeRange")) + // Expand text area (Tablet and Mobile) + expandTool(document?.querySelector("#expandTool")) + // Expand text area (Desktop) + hideKeyboard(document.querySelector('#hideKeyboard')) + + // Pagination + prevBtn.addEventListener('click', goPrevPage) + nextBtn.addEventListener('click', goNextPage) + + // Resizer (between textarea and keyboard) + const resizeGrip = document.querySelector('#resizeGrip') + resizeGrip.addEventListener('mousedown', mouseDownGrabber) + + // Mouse events on Keyboard Selection menu + keyboardSelectionButton.addEventListener('click', () => { + kbSelection.classList.toggle('open') + }) + kbSelection.addEventListener('mouseleave', () => { + kbSelection.classList.remove('open') + }) + + // Set keyboard & examples to load + setKeyboardToType() + + /* Search Interaction */ + // Close search dropdown when clicking outside the dropdown menu + document.addEventListener('click', (e) => { + if (!searchInput.contains(e.target) && !searchDropdownMenu.contains(e.target)) { + searchDropdown.hide() + } + }) + + // Click on search + searchInput.addEventListener('click', function(e) { + e.stopPropagation() + searchDropdown.show() + searchInput.placeholder = 'Search for a keyboard...' + setKeyboard('basic_kbdus', 'en', 'US Basic') // Ensure that this keyboard is always selected + setKeyboardToType() // Set keyboard & examples to load + handleSearch(e.target.value) // Get Search Query + }) + + // Input: Search and Display keyboards + searchInput.addEventListener('input', function(e) { + e.preventDefault() + setKeyboard('basic_kbdus', 'en', 'US Basic') + setKeyboardToType() // Ensure that no keyboard switching mid selecting a keyboard + const query = e.target.value + searchState.searchQuery = query // update query + searchState.currentPage = 1 + handleSearch(query) // Get Search Query + }) + + // Click on clear if there's input + clearSearchIcon.addEventListener('click', (e) => { + let query = e.target.value + handleSearch(query) + searchInput.value = '' + searchInput.focus() + }) + + // Default text area and keyboard size + defaultSize() + + window.addEventListener('load', () => { + const state = loadSettings() + if(state?.enabledKb) { + setEnabledKb(state.enabledKb) + } + }) + + window.addEventListener('beforeunload', buildAppState) + + window.addEventListener('storage', (e) => { + if (e.key == "keymanWebState") { + loadSettings() + } + }) + +}) diff --git a/cdn/dev/js/operation/bundleKbSelectionMenu.js b/cdn/dev/js/operation/bundleKbSelectionMenu.js new file mode 100644 index 0000000..9150ecb --- /dev/null +++ b/cdn/dev/js/operation/bundleKbSelectionMenu.js @@ -0,0 +1,18 @@ +import { selectedKbList } from "../state/appState.js" + +// Add keyboard for kb search and selection UI +export function bundleKbDataforSelectionMenu(kb) { + const kbInfo = { + "id": kb.id, + "name": kb.name, + "version": kb.version, + "helpLink": kb.helpLink, + "platformSupport": kb.platformSupport, + "totalDownloads": kb.match.totalDownloads, + "sourcePath": kb.sourcePath, + "supportedLanguage": kb.languages, + "lastUpdated": kb.lastModifiedDate + } + + selectedKbList.push(kbInfo) +} \ No newline at end of file diff --git a/cdn/dev/js/operation/confirmKeyboard.js b/cdn/dev/js/operation/confirmKeyboard.js new file mode 100644 index 0000000..da8b097 --- /dev/null +++ b/cdn/dev/js/operation/confirmKeyboard.js @@ -0,0 +1,19 @@ +import { selectedKbList } from "../state/appState.js" +import { generateKbUI, limitKbSelectionUI } from "../feature/kb-selection-menu.js" + +// Check 6th keyboard +export function confirmAndAddKb(onConfirmAdd) { + if (typeof onConfirmAdd != 'function') { + console.log("Expected the onConfirmAdd a function, instead got: " + typeof onConfirmAdd) + alert("Click on the keyboard again to enable.") + } + + // Confirm a 6th keyboard then generate keyboard selection menu + const warningDialogUI = limitKbSelectionUI(() => { + onConfirmAdd() + selectedKbList.shift() + generateKbUI(selectedKbList) + }) + + document.body.appendChild(warningDialogUI) +} \ No newline at end of file diff --git a/cdn/dev/js/operation/handleKeyboardData.js b/cdn/dev/js/operation/handleKeyboardData.js new file mode 100644 index 0000000..7dc868d --- /dev/null +++ b/cdn/dev/js/operation/handleKeyboardData.js @@ -0,0 +1,17 @@ +import { kbData } from "../state/appState.js" + +// Set Keyboard Data from AppState +export function setKeyboard(id, lang, name) { + kbData.kbdId = id + kbData.langCode = lang + kbData.kbdName = name +} + +// Fetch Keyboard Data from AppState +export function getKeyboard() { + return { + kbdId: kbData.kbdId, + langCode: kbData.langCode, + kbdName: kbData.kbdName + } +} diff --git a/cdn/dev/js/operation/keyboard.js b/cdn/dev/js/operation/keyboard.js new file mode 100644 index 0000000..d9b7b19 --- /dev/null +++ b/cdn/dev/js/operation/keyboard.js @@ -0,0 +1,94 @@ +/* + === Keyboard Execution === +*/ +import { getKeyboard, setKeyboard } from "./handleKeyboardData.js"; +import { highlightKbSelected } from "../feature/kb-selection-menu.js"; + +const textArea = document.getElementById('textArea') +const keymanExample = document.getElementById("example") +const exampleBox = document.getElementById("exampleBox") +let langExamples = []; + +// Change and type keyboard +export async function setKeyboardToType() { + if (!textArea) return + + const { kbdId, langCode, kbdName } = getKeyboard() // Get the keyboard data + + const langTag = `#${langCode}` + const kbTag = kbdId.startsWith("Keyboard_") ? kbdId : `Keyboard_${kbdId}` + + if(kbdName) { + textArea.placeholder = `The ${kbdName} keyboard is selected. Start typing...` + searchInput.placeholder = "Selected: " + kbdName + " keyboard" + } + + location.replace(`${langTag},${kbTag}`) + + await keyman.addKeyboards(kbdId) + await keyman.setActiveKeyboard(kbdId, langCode) + // const kbd = keyman.getKeyboard(kbdId, langCode) + + setTimeout(() => { + applyClassToKb(), 0 + }) + + // Update Example of enable the keyboard + updateExample(kbdId) + highlightKbSelected(kbdId) + if(typeof(KeyboardChange_EmbedFonts) != 'undefined') KeyboardChange_EmbedFonts(kbdId) +} + +// Language Examples +async function updateExample(kbdId) { + if (!keymanExample || !exampleBox) return false; + + if(kbdId == '') + { + keymanExample.textContent = `No example is available due to empty Keyboard name.` + return true; + } + + let activeLanguage = keyman.getActiveLanguage(); + + if(langExamples[activeLanguage + '_' + kbdId]) + { + keymanExample.innerHTML = langExamples[activeLanguage + '_' + kbdId]; + return true; + } + + langExamples[activeLanguage + '_' + kbdId] = 'Loading...'; + keymanExample.innerHTML = 'Loading...'; + + const link = `/prog/languageexample.php?keyboard=${kbdId}&language=${activeLanguage}`; + try { + const response = await fetch(link); + if(response.status == 200) { + const content = await response.text(); + + langExamples[activeLanguage + '_' + kbdId] = keymanExample.innerHTML = content; + } else { + throw new Error(`Unable to retrieve content, status was ${response.status}: ${response.statusText}`); + } + } catch(e) { + langExamples[activeLanguage + '_' + kbdId] = keymanExample.innerHTML = 'Error retrieving example: '+e.message; + throw e; + } +} + +// Apply classes to instructional keyboards +function applyClassToKb() { + const kbArea = document.querySelector('.keyboard-area') + if (!kbArea) return + + const apply = () => { + const child = kbArea.children + for (const c of child) { + if (!c.classList.contains('kmw-osk-frame')) { + c.classList.add('kmw-osk-frame') + c.classList.add('kmw-help-osk-frame') + } + } + } + apply() +} diff --git a/cdn/dev/js/operation/keyboardDetails.js b/cdn/dev/js/operation/keyboardDetails.js new file mode 100644 index 0000000..2eaf012 --- /dev/null +++ b/cdn/dev/js/operation/keyboardDetails.js @@ -0,0 +1,31 @@ +import { removeKbSelected } from "./selectedKb.js" +import { generateKbUI, triggerKbCount } from "../feature/kb-selection-menu.js" +import { selectedKbList } from "../state/appState.js" + +// Keyboard selection menu's tools: info, help, download, and remove +export function kbConfigMenu(action, id, helplink) { + if (action == "help") { + window.open(helplink, '_blank') + } + + if (action == "download") { + const downloadUrl = `https://keyman.com/keyboards/install/${id}` + window.open(downloadUrl, '_blank') + } + + if (action == "remove") { + removeKbSelected(id) + generateKbUI(selectedKbList) + triggerKbCount(selectedKbList) + searchDropdown.hide() + } + + if (action == "info") { + const kbDetails = document.querySelector(`#keyboard-${id}-details`) + + kbDetails.addEventListener('mouseleave', () => { + kbDetails.classList.add('hidden') + }) + kbDetails.classList.remove('hidden') + } +} \ No newline at end of file diff --git a/cdn/dev/js/operation/paginationLogic.js b/cdn/dev/js/operation/paginationLogic.js new file mode 100644 index 0000000..f460dc4 --- /dev/null +++ b/cdn/dev/js/operation/paginationLogic.js @@ -0,0 +1,17 @@ +import { searchState } from "../state/appState.js" + +// Pagination Previous Page +export function goPrevPage() { + if (searchState.currentPage > 1) { + searchState.currentPage-- + searchKeyboard(searchState.currentQuery, searchState.currentPage) + } +} + +// Pagination Next Page +export function goNextPage() { + if (searchState.currentPage < searchState.totalPage) { + searchState.currentPage++ + searchKeyboard(searchState.currentQuery, searchState.currentPage) + } +} diff --git a/cdn/dev/js/operation/platformSupport.js b/cdn/dev/js/operation/platformSupport.js new file mode 100644 index 0000000..a25f775 --- /dev/null +++ b/cdn/dev/js/operation/platformSupport.js @@ -0,0 +1,17 @@ +// Platform Supports (Icons, OS names) +export function platformSupport(data) { + const platformMap = { + android: "Android", + desktopWeb: "Web", + ios: "iPhone and iPad", + linux: "Linux", + macos: "macOS", + mobileWeb: "Mobile web", + windows: "Windows" + } + let platformSpan = Object.entries(data) + .filter(([_, supportLevel]) => supportLevel == 'full') + .map(([platform]) => `${platformMap[platform]}`).join('') + + return platformSpan +} \ No newline at end of file diff --git a/cdn/dev/js/operation/rememberState.js b/cdn/dev/js/operation/rememberState.js new file mode 100644 index 0000000..6367364 --- /dev/null +++ b/cdn/dev/js/operation/rememberState.js @@ -0,0 +1,36 @@ +import { storage } from "../state/storage.js" +import { getFontSize, setFontSize } from "../state/fontState.js" +import { getElementValue, setElementValue } from "../state/elementValue.js" +import { getElementsSize, setElementsSize } from "../state/elementSize.js" +import { getEnabledKb, setEnabledKb } from "../state/enableKb.js" +import { getSelectedKb, setSelectedKb } from "../state/selectedKbList.js" +import { generateKbUI } from "../feature/kb-selection-menu.js" + +const textAreaContainer = document.querySelector('.textarea-container') +const textArea = document.querySelector('#textArea') + +const STORAGE_KEY = "keymanWebStorage" +const EXP = 60 * 60 * 1000 // 1 hour + +export function buildAppState() { + const state = { + fontSize: getFontSize(textArea), + selectedKbList: getSelectedKb(), + enabledKb: getEnabledKb(), + textAreaSizes: getElementsSize(textAreaContainer), + writtenText: getElementValue(textArea), + } + storage.set(STORAGE_KEY, state, EXP) +} + +export function loadSettings() { + const state = storage.get(STORAGE_KEY) + + if(!state) return + setElementsSize(textAreaContainer, state.textAreaSizes) + setSelectedKb(state.selectedKbList) + generateKbUI(state.selectedKbList) + setEnabledKb(state.enabledKb) + setElementValue(textArea, state.writtenText) + setFontSize(textArea, state.fontSize) +} diff --git a/cdn/dev/js/operation/resizeKeyboard.js b/cdn/dev/js/operation/resizeKeyboard.js new file mode 100644 index 0000000..526d501 --- /dev/null +++ b/cdn/dev/js/operation/resizeKeyboard.js @@ -0,0 +1,61 @@ +import { keyboardResizing } from "../state/appState.js"; +import { fullScreenSize } from "./resizeTextArea.js"; + +const divider = document.getElementById('Divider') + +const resizer = divider.querySelector('#resizeGrip') +const prevElementOfResizer = divider.previousElementSibling +const nextElementOfResizer = divider.nextElementSibling + +// Resizer Activate +export function mouseDownGrabber(e) { + e.preventDefault(); + resizer.style.cursor = 'grabbing' + keyboardResizing.isResizing = true + + keyboardResizing.startY = e.clientY + keyboardResizing.startHeightTop = prevElementOfResizer.offsetHeight + keyboardResizing.startHeightBottom = nextElementOfResizer.offsetHeight + + document.addEventListener('mousemove', mouseMoveGrabber) + document.addEventListener('mouseup', mouseUpGrabber) +} + +// Resizer Deactivate +export function mouseUpGrabber() { + resizer.style.removeProperty('cursor') + keyboardResizing.isResizing = false + document.removeEventListener('mousemove', mouseMoveGrabber) +} + +// Resizer In-process +export function mouseMoveGrabber(e) { + if (!keyboardResizing.isResizing) return; + + let deltaY = e.clientY - keyboardResizing.startY // Get up or down direction + + let newTextareaHeight = keyboardResizing.startHeightTop + deltaY + let newKeyboardHeight = keyboardResizing.startHeightBottom - deltaY + + newTextareaHeight = Math.max(100, Math.min(newTextareaHeight, window.innerHeight * 0.8)) + newKeyboardHeight = Math.max(100, Math.min(newKeyboardHeight, window.innerHeight * 0.5)) + + applyTextareaHeight(newTextareaHeight) + + if (newTextareaHeight > 700) { + fullScreenSize() + } else { + nextElementOfResizer.style.display = 'flex' + } +} + +// Apply heights for two elements +export function applyHeights(taHeight, kbHeight) { + prevElementOfResizer.style.height = `${taHeight}px` + // nextElementOfResizer.style.height = `${kbHeight}px` +} + +// Apply heights +export function applyTextareaHeight(taHeight) { + prevElementOfResizer.style.height = `${taHeight}px` +} diff --git a/cdn/dev/js/operation/resizeTextArea.js b/cdn/dev/js/operation/resizeTextArea.js new file mode 100644 index 0000000..0c8fb0b --- /dev/null +++ b/cdn/dev/js/operation/resizeTextArea.js @@ -0,0 +1,20 @@ +import { textAreaState } from "../state/appState.js" + +const divider = document.querySelector('.divider-container') +const prevElementOfResizer = divider.previousElementSibling +const nextElementOfResizer = divider.nextElementSibling + +// Set default height for Textarea and Keyboard +export function defaultSize() { + prevElementOfResizer.style.height = `${textAreaState.defaultHeightTextArea}vh` + nextElementOfResizer.style.height = `${textAreaState.defaultHeightKb}vh` + textAreaState.isTextAreaFullHeight = false + nextElementOfResizer.style.display = 'flex' +} + +// Set full height (Fullscreen) for Textarea +export function fullScreenSize() { + prevElementOfResizer.style.height = `${textAreaState.fullHeightTextArea}vh` + textAreaState.isTextAreaFullHeight = true + nextElementOfResizer.style.display = 'none' +} diff --git a/cdn/dev/js/operation/searchAPI.js b/cdn/dev/js/operation/searchAPI.js new file mode 100644 index 0000000..919f704 --- /dev/null +++ b/cdn/dev/js/operation/searchAPI.js @@ -0,0 +1,11 @@ +// Calling search API with a custom parameter/query + +const api = 'https://api.keyman.com/search/2.0' + +export async function getKeyboardList(customQuery = "p:popular") { + let response = await fetch(`${api}?q=${customQuery}`) + if (!response.ok) { + throw new Error(`API request failed with status ${response.status}`) + } + return response.json() +} diff --git a/cdn/dev/js/operation/searchCardContent.js b/cdn/dev/js/operation/searchCardContent.js new file mode 100644 index 0000000..4b9a1fe --- /dev/null +++ b/cdn/dev/js/operation/searchCardContent.js @@ -0,0 +1,136 @@ +// Logic of search query highlights + +// Highlight word searched +export function getMarkedContext(query) { + let escapedTerm = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // Mark the query + return new RegExp(escapedTerm, 'i') +} + +// Find a match between Search Context and Language, Keyboard name, Description +export function highlightSearchContext(kb, marked) { + let matchFound = false + let matchField = "" + let matchValue = "" + + // Get and find language that matches the search + for (let lang in kb.languages) { + let langData = kb.languages[lang] + for (let key in langData) { + const value = langData[key] + if (typeof value == "string" && marked.test(value)) { + matchFound = true + matchValue = value.replace(marked, (m) => m ? `${m}` : m) + matchField = "language" + break + } + } + if (matchFound) break + } + + // Find a match for keyboard name if language is not a match + if (!matchFound && marked.test(kb.name)) { + matchFound = true + matchValue = kb.name.replace(marked, '$&') + matchField = "keyboard" + } + + // Find a match for keyboard description if name is not a match + if (!matchFound && marked.test(kb.description)) { + matchFound = true + matchField = "description" + } + + return {matchField, matchValue, matchFound} +} + +// Display Highlighted Search Context +export function showMarkedContext(kb, matchField, matchValue) { + const kbNameHeading = document.createElement('h4') + + // Display matched language + const langNameSpan = document.createElement('span') + langNameSpan.style.fontSize = "14px" + if (matchField == "language") { + langNameSpan.innerHTML = matchField == "language" ? ` (${matchValue} language)` : "" + } + + // Display matched keyboard + if (matchField == "keyboard") { + kbNameHeading.innerHTML = matchValue + } else { + kbNameHeading.textContent = kb.name + } + kbNameHeading.appendChild(langNameSpan) + + return kbNameHeading +} + +// Truncated Keyboard Description +export function truncateDesc(kb, matchField, marked) { + const kbDescHeading = document.createElement('h6') + kbDescHeading.classList.add("keyboard-description") + const wordLimits = 90 + + let temp = document.createElement('div') + temp.innerHTML = kb.description + + let fullDesc = kb.description + let plainText = temp.textContent + let shortText = "" + + let isTruncated = false + + let firstPara = firstParagraph(fullDesc) + + if (plainText.length >= wordLimits) { + shortText = plainText.slice(0, wordLimits) + "..." + kbDescHeading.innerHTML = shortText + isTruncated = true + } else { + kbDescHeading.innerHTML = firstPara + isTruncated = false + } + + // Toggle show more & show less + if (isTruncated) { + const toggleBtn = document.createElement('a') + toggleBtn.href = "#" + toggleBtn.style.marginLeft = "6px" + toggleBtn.textContent = "Show more" + + toggleBtn.addEventListener('click', e => { + e.preventDefault() + const isExpanded = toggleBtn.textContent == "Show more" + kbDescHeading.innerHTML = !isExpanded ? shortText.replace(marked, (m) => m ? `${m}` : m) : firstPara + if (matchField == 'description') { + kbDescHeading.innerHTML = isExpanded ? firstPara.replace(marked, '$&') : shortText + } + kbDescHeading.style.color = isExpanded ? 'black' : 'gray' + toggleBtn.textContent = isExpanded ? "Show less" : "Show more" + kbDescHeading.appendChild(toggleBtn) + }) + kbDescHeading.appendChild(toggleBtn) + } + + return kbDescHeading +} + +// Show first Paragraph for Keyboard Description (Copied from keyman.com) +function firstParagraph(text) { + // Yes, this is HTML parsing by regexp, but we will survive the apocalypse! + const firstPara = /^(((?:.|[\r\n])+?)(<\/p>|
    ))/m.exec(text); + if(!firstPara) { + // No paragraph markers (e.g. legacy .keyboard_info files); it is a plain + // text description, so we stop at first newline marker + const firstPlainTextPara = /^(.+?)(\r|\n|$)/.exec(text); + const html = $('

    ').text(firstPlainTextPara ? firstPlainTextPara[1] : text)[0].outerHTML; + return html; + } + if(firstPara[3] == '
    ') { + // We stop at first
    , so will miss the end of paragraph, so close the + // tag ourselves + return firstPara[2] + '

    '; + } + // Return the whole paragraph + return firstPara[1]; +} \ No newline at end of file diff --git a/cdn/dev/js/operation/searchLogic.js b/cdn/dev/js/operation/searchLogic.js new file mode 100644 index 0000000..6cff5cd --- /dev/null +++ b/cdn/dev/js/operation/searchLogic.js @@ -0,0 +1,87 @@ +// Logic for Search +import { searchState } from "../state/appState.js"; +import { getKeyboardList } from "./searchAPI.js"; +import { updatePaginationCtrl } from "../feature/pagination.js"; +import { updateSearchIcon } from "../feature/search.js" +import { displaySearch } from "../feature/search.js"; +import { loadPageInfo } from "../feature/pagination.js"; + +export async function handleSearch(value) { + let query = value + setQuery(query) + updateSearchIcon(query) + + // Check the query's character number + if (!searchState.searchQuery || searchState.searchQuery.length < 2) { + await defaultSearch() + return + } + + loadPageInfo(searchState.searchQuery) + + await searchKeyboard(searchState.searchQuery, searchState.currentPage) +} + +// Contain a value for searching +export function setQuery(value = '') { + searchState.searchQuery = value + searchState.currentPage = 1 +} + +// Run the search with queries and current page +export async function runSearch() { + const currentQuery = searchState.searchQuery + const currentPage = searchState.currentPage + + const data = await getKeyboardList(`${encodeURIComponent(currentQuery)}&p=${currentPage}`) + + if (data.context) { + searchState.totalPage = data.context.totalPages || 1; + searchState.currentPage = data.context.pageNumber || 1; + } else { + searchState.totalPage = Math.ceil(data.keyboards.length / searchState.itemPerPage); + } + + return data +} + +/* Search */ +const kbSearchCard = document.getElementById('kbSearchCardUI') +/* Display top downloads with search Instruction */ +export async function defaultSearch() { + kbSearchCard.innerHTML = `Please wait. It's Loading...` // Loading UI + + let data = await getKeyboardList('p:popular') // Show top 10 most downloaded keyboards + + if(searchState.searchQuery) return + + let mostDownloadkb = data.keyboards + + // Check data + if (!mostDownloadkb || !Array.isArray(mostDownloadkb)) { + throw new Error(`Invalid API response structure`) + } + + displaySearch(mostDownloadkb) // Keyboard search UI +} + +/* Get query and return search */ +export async function searchKeyboard(query = null, page) { + kbSearchCard.innerHTML = `
    Searching ${query}...
    ` // Loading UI + kbSearchCard.style.display = 'block' + + let data = await getKeyboardList(`${encodeURIComponent(query)}&p=${page}`) + + // Validate data.keyboards + if (!data.keyboards || !Array.isArray(data.keyboards)) { + throw new Error("Invalid API response structure") + } + + if (data.context) { + searchState.currentPage = data.context.pageNumber + searchState.totalPage = data.context.totalPages + } + + displaySearch(data.keyboards, data.context.totalRows, query) + updatePaginationCtrl() +} diff --git a/cdn/dev/js/operation/selectedKb.js b/cdn/dev/js/operation/selectedKb.js new file mode 100644 index 0000000..6e84de2 --- /dev/null +++ b/cdn/dev/js/operation/selectedKb.js @@ -0,0 +1,26 @@ +import { selectedKbList } from "../state/appState.js" +import { validateURL } from "./validURL.js" + +// Compare and remove keyboard +export function removeKbSelected(kbId) { + if(!kbId) return + let filtered = selectedKbList.filter(kb => kb.id !== kbId) + + // Reset and re-enter the Keyboard selection menu + selectedKbList.length = 0 + selectedKbList.push(...filtered) +} + +// Set the right keyboard help link according to the selected keyboard in the hamburger menu +export function setKbHelpDocHamburger(kbdId, kbdName) { + const kbHelpDocLink = document.querySelector('#kbHelpdocLink') + const kbHelpDocSpan = document.querySelector('#kbHelpDocSpan') + + kbHelpDocSpan.innerHTML = `${kbdName}` + const id = kbdId.split("Keyboard_") + kbHelpDocLink.addEventListener('click', () => { + const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) + const newURL = checkedURL + id + kbHelpDocLink.href = newURL + }) +} \ No newline at end of file diff --git a/cdn/dev/js/operation/toggleInstruction.js b/cdn/dev/js/operation/toggleInstruction.js new file mode 100644 index 0000000..cbadcfa --- /dev/null +++ b/cdn/dev/js/operation/toggleInstruction.js @@ -0,0 +1,27 @@ +$(document).ready(function() { + let searchInstructionIsON = true + $('#toggleSearchInstructionBtn').addClass('btn-primary').text('Visible') + function updateInstructionUI(state) { + searchInstructionIsON = state + + if (searchInstructionIsON) { + $('.search-instruction, #hrForKeyboard').fadeIn('200') + $('#toggleSearchInstructionBtn').removeClass('btn-secondary').addClass('btn-primary').text('Visible') + $('#searchInput').click() + $('#searchDropdownMenu').show() + } else { + $('.search-instruction, #hrForKeyboard').fadeOut('200') + $('#toggleSearchInstructionBtn').removeClass('btn-primary').addClass('btn-secondary').text('Hidden') + $('#searchDropdownMenu').show() + $('#searchInput').click() + } + } + + $('#closeInstruction').click( () => { + if (searchInstructionIsON) updateInstructionUI(false) + }) + + $('#toggleSearchInstructionBtn').on('click', () => { + updateInstructionUI(!searchInstructionIsON) + }) +}) \ No newline at end of file diff --git a/cdn/dev/js/operation/validURL.js b/cdn/dev/js/operation/validURL.js new file mode 100644 index 0000000..e33ed14 --- /dev/null +++ b/cdn/dev/js/operation/validURL.js @@ -0,0 +1,13 @@ +// Ensure a valid URL +export function validateURL(string) { + try { + const newUrl = new URL(string) + if (newUrl.protocol === 'https:') { + return newUrl + } else { + return false + } + } catch (error) { + console.error(error) + } +} \ No newline at end of file diff --git a/cdn/dev/js/operation/waitForElement.js b/cdn/dev/js/operation/waitForElement.js new file mode 100644 index 0000000..45b5db8 --- /dev/null +++ b/cdn/dev/js/operation/waitForElement.js @@ -0,0 +1,12 @@ +// Wait for a later-loaded element +export function waitForElement(selector) { + return new Promise((resolve) => { + const interval = setInterval(() => { + const element = document.querySelector(selector) + if (element) { + clearInterval(interval) + resolve(element) + } + }, 100) + }) +} \ No newline at end of file diff --git a/cdn/dev/js/state/appState.js b/cdn/dev/js/state/appState.js new file mode 100644 index 0000000..c6804aa --- /dev/null +++ b/cdn/dev/js/state/appState.js @@ -0,0 +1,65 @@ +/* Text area values + - To resize +*/ +export const textAreaState = { + isTextAreaFullHeight: false, + fullHeightTextArea: 95, + defaultHeightTextArea: 35, + defaultHeightKb: 47 +} + +/* + Keyboard values + - To resize + - To change height +*/ +export const keyboardResizing = { + isResizing: false, + startY: 0, + startHeightTop: 0, + startHeightBottom: 0 +} + +/* + Selected Keyboard Data + - To Enable keyboard for typing + - Change the language example + - Update the UI after the keyboard is generated +*/ +export const kbData = { + kbdId: "basic_kbdus", + langCode: "en", + kbdName: "US Basic" +} + +/* + Main array for Keyboards Selection Menu: + - The interaction between search, kb selection menu...etc + - The enabling of a keyboard for typing + - Data = [ + "id": kb.id, + "name": kb.name, + "version": kb.version, + "helpLink": kb.helpLink, + "platformSupport": kb.platformSupport, + "totalDownloads": kb.match.totalDownloads, + "sourcePath": kb.sourcePath, + "supportedLanguage": kb.languages, + "lastUpdated": kb.lastModifiedDate + ] +*/ +export const selectedKbList = [] + +/* Pagination + - Current Page + - Total Page + - Search Queries + - Timer to pause searching/loading API +*/ +export const searchState = { + currentPage: 1, + totalPage: 1, + itemPerPage: 10, + searchQuery: "", + debounceTimer: null +} \ No newline at end of file diff --git a/cdn/dev/js/state/elementSize.js b/cdn/dev/js/state/elementSize.js new file mode 100644 index 0000000..83ea44a --- /dev/null +++ b/cdn/dev/js/state/elementSize.js @@ -0,0 +1,12 @@ +export function getElementsSize(element) { + const rect = element.getBoundingClientRect() + return { + height: rect.height, + positionX: rect.x, + positionY: rect.y + } +} + +export function setElementsSize(element, sizes) { + element.style.height = sizes.height + "px" +} \ No newline at end of file diff --git a/cdn/dev/js/state/elementValue.js b/cdn/dev/js/state/elementValue.js new file mode 100644 index 0000000..62dbbc5 --- /dev/null +++ b/cdn/dev/js/state/elementValue.js @@ -0,0 +1,7 @@ +export function getElementValue(element) { + return element.value +} + +export function setElementValue(element, value) { + element.value = value +} \ No newline at end of file diff --git a/cdn/dev/js/state/enableKb.js b/cdn/dev/js/state/enableKb.js new file mode 100644 index 0000000..aeb271e --- /dev/null +++ b/cdn/dev/js/state/enableKb.js @@ -0,0 +1,29 @@ +import { setKeyboard } from "../operation/handleKeyboardData.js"; +import { setKeyboardToType } from "../operation/keyboard.js"; +import { selectedKbList } from "./appState.js"; + +export function getEnabledKb() { + let match = location.hash.match(/^#(.+),(Keyboard_.+)$/i) + if(!match) return null; + + const [, langCode, rawKbFromHash] = match + + let kbdId = rawKbFromHash.replace('Keyboard_', '') + + let kbdName = selectedKbList.find(kb => kb.id == kbdId).name + + return { + langCode, + kbdId, + kbdName + } +} + +export function setEnabledKb(enabledKb) { + if(!enabledKb) return + + const {kbdId, langCode, kbdName} = enabledKb + + setKeyboard(kbdId, langCode, kbdName) + setKeyboardToType() +} \ No newline at end of file diff --git a/cdn/dev/js/state/fontState.js b/cdn/dev/js/state/fontState.js new file mode 100644 index 0000000..5a05673 --- /dev/null +++ b/cdn/dev/js/state/fontState.js @@ -0,0 +1,10 @@ +export function getFontSize(element) { + let fontSize = parseInt(window.getComputedStyle(element).fontSize) || "16" + return fontSize +} + +export function setFontSize(element, value) { + const fontSizeRange = document.querySelector('#fontSizeRange') + element.style.fontSize = value + 'px' + fontSizeRange.value = value +} \ No newline at end of file diff --git a/cdn/dev/js/state/selectedKbList.js b/cdn/dev/js/state/selectedKbList.js new file mode 100644 index 0000000..52c8200 --- /dev/null +++ b/cdn/dev/js/state/selectedKbList.js @@ -0,0 +1,10 @@ +import { selectedKbList } from "./appState.js" + +export function setSelectedKb(kbList) { + selectedKbList.length = 0 + selectedKbList.push(...kbList) +} + +export function getSelectedKb() { + return selectedKbList +} \ No newline at end of file diff --git a/cdn/dev/js/state/storage.js b/cdn/dev/js/state/storage.js new file mode 100644 index 0000000..b6d21de --- /dev/null +++ b/cdn/dev/js/state/storage.js @@ -0,0 +1,35 @@ +const STORAGE_KEY = "keymanWebStorage" + +export const storage = { + set(key, value, time = null) { + const item = { + value, + expiry: time ? Date.now() + time : null + }; + window.localStorage.setItem(key, JSON.stringify(item)) + }, + + get(key) { + const raw = window.localStorage.getItem(key) + + if (!raw) return null; + + try { + const item = JSON.parse(raw) + + if (item.expiry && Date.now() > item.expiry) { + window.localStorage.removeItem(key) + return null + } + + return item.value + } + catch { + return null + } + }, + + remove(key) { + window.localStorage.removeItem(key) + } +} \ No newline at end of file diff --git a/cdn/fonts/social-logos.ttf b/cdn/fonts/social-logos.ttf index e8013681b9896473dbe12c201a9bd124222a9426..0ea4af42f26950ded69fcc3621084e43666fddf0 100644 GIT binary patch literal 12968 zcmd^miIW`Hd0)T2dwRNirhB@3?t7+pcXnrY?!6BXSbzWlf*=WA5{2Ex0$5_PyWCyy zkVFy|X^E0d#bt+-O)HKqQFKhG;v{lPa>|lHA9Sh|DRNbSxMY<}R#b8&RwcoPgi>~S zncwS~#le#D2PD(`&VK#+9pCZ$zSqkThGA6Z62mbg2k(DyU-q-5k1`AyMePIk-alNQ z{kQkWQ2r&9Pc2K~6GX!u=@9 z*|miW%iO0%2N`Av?b-Q_^{wr9{>6chGt5X6UrYf$^vZ+~O= zBgW)=jM{zTZwB`9wB=q(e(KlDy$&%1+#F>-&qVzG=*<8whI!vFckc(75oVfU_s`$+ z0Hd!iY_BnK#_ttv=<~Pd$?D441xD`OA-G5H64Vez+-pyMN`9Ha`jP$Q4C)T{()XAc z^AeqTB6uXFep6DnSnJnFj>-rA2Bkd?V(Vgs0`Q6aF*1Pt*EAKfsxEsoi(2eAc!u#0w z>tu)75zs1xR{5K)>>JDt;Z`g3`hWisymgw{&m6+_Fs@TKuSMn@v*BNKlR}KeG?*mz zet@YkHWS6j6HGtTVhm8sFrzR{#$+5O&7_zhQ)4>J5U5qajKX+Bp7EFrBQYA|g1-w) zjwvx!tO1Al%1oK*!&=mtHYivJ)iQ+A;Q#NxAYB0VjovbJ=#F;-Wtr=}fPG=EgT`pU z4l&n3XEb21nCqZF8nA23b*v~2*gxjF)D754<~n2m4cJrWy3!5UUFJIIk_PNEb6xEQ zN~_l~DjKl&%yq3BKn2Wo&@T<32WAHe4WJBW2Vz~W{0*z0DUn#m@^HaG-fB<4WKz@hdzS<>SK1W7BqkknH@+?8bFcE z4(3J!m83hgUj)jhJ8n0CUYQ-tnFdfUvqQ@WpkZbw-wmKM@1c$c@CoxC#z+G=hPi=+ z1}Z;p^a8kuxq)@1fy$X1w2VOI`wh&E2Jjej1M5lyxQ)4i@zFqK(+%2=(m)+4)|dwH zB69=dr2$;Y+yD*H0RCidV5~GyPQ~wEk}Nq#{+JE1pJTttCAkxPn_uH!=l`c*3ZE0c zBg*1&@g<3s4ohE<{#b6xtMXe4tK^lJl>Z(WRULIP7!4i^{=Ife`)fU|Kd%44s2b;t zUo*ZJ5<~Zd-Uxj!{Gsq4n$zYf^Cj~~cpqkn>HjUc#>_JJG7HQ_l=70;z3hnVH0te+ z>(HxHYj@hsVN&+WQ>5u3@yZ3it&<_sq%%z#^)zuEThd7(Uv4!!?S>tZL>IlG?3LSY z8cjNF#}&)ytSq6ngFe#)El6He^P!ZP4x8~leO?lArudXWYLP&M3G2D6vCEl1V#O`K_eO| z7;4A~gq}|r`cOY7vZ+jg3-ogwR|`u5tMDu@r47nBzV2tpeGU0 z!-KPABFVB;5f$Zn%-p?Z#$qNJFk^=mQ4$8YZ^n zNv`C29k+uZwfvM^#7db)iG_1Q88>6A9 z9!%SZG$U@BrU3Dfg(*ZOJ)QfXgUTi77lY~>B6%GNE1w})eQbn5JlpNGB*MIK^10`p zd-#PH9)9lRNk1(=|9qJ|ckIB4@1MB)*s;4$95{gV@w;QmBS(@z4nA0C2&GknnMBW} zyl96bPNURi7Ai(PsZqxQIaD53h}3DL66;9?s#l&NbS2vvx(VbLc6Z~YQk<}fVzI#~ z+G1c%6J?gLydo$^0!uDSB#95)m(XpFumzSCRnb@p>MZ$6q!gzQM@TXLy?F5vMI=Kk zD+{vDvUNfr`p^prN$Q&cA;7VOh)`S5mj2pYqdJu`x(z;eTZLAm1!k&eh)q>PiZrBx zO@&&O_**=DqTXr^mW;5GG!$0p@hr-!{kmTjquQJ#KPo_wqc zvgq1r|AATnix zIM}jVIngVC@ETaxh~$=Av=tgqS_N@>e%=*_Nd^yNd51{^dd%++Z9ASbO{zpkmwOor z;?1wQdFy88IZ0bjq!Oc&e(wx_NImmvfP1BN$UbVEDH?&?aaH4Ogg!!qPZPpFIb*0Z z#wkf(l(c{Mu>kimbsz4kDL1YLh3KCN^Ln55Wwd+NOt8@+!dJT);-1{A`HyCtjTUgr z^lMNc`!s1oPw8X2^y}GlDNwjaH4gpdEB34Gn+G{{<{^>1ERsG!2q-p>=%0R!RX@i5 zfi5lJv1!$qRw1Fuyioiyk}vF|P1J;xhzoo`Ss?x>iis~0|DDD7w_Q4{VxqWL@dGr8 zv#8zE6;#ftK+bvWk`2nW8(l16`-I*raa2D0k{SeX&@0XDJ9_H=<0B&n$43{IW}HlB zFq0t%4}xrt?wc!lpF21*a{T^N+e-_h0yQ>n zFMKvtOQmY#wPdpP?G%m2X_=g-b^eXpqMLmCTbPH-KukbKOO$beklHgWGzOJ>KsP$o zfM5Y%i#P@-hL#N?Qhh@;pG2Pik*&(QAO(aA95-(U1g>8U4-ge*Ngt*`r5)e9w=M9)+mC#q0O) z@j7U~Jw-$c0ewJ-sM%?t7J7=V19*u7z;dhH@da4B4#vWyDZ@Dw6iN?Ox7L%unQVMXNenwT#HH9_-BDdjH>%*I*xdpkLZKaFVZgKk(vGp;fT4i`dh~ zH>0j@L6`6C`FZ3L)Yk!Of=tMZ03Vc1fjoQ+4~}n^ z1-pxiai5xj;AtP}i{$*ZYqlL9G@hWC_z7b$ZWrqH-Iwcy4_5x&z)3d}Gl7~TZoN2A zte-@%mYcNDd+19UDu@Aw>zvx@G-nj2Asw9BUI%3t4?=awQbJ)p++0z7|sq(@?CW_1#Bc z@9C=Z=+|OFIS{wNCOzG9ja;fG@$s9{>Lz?>Xl)@5U+(NF_XcY`@OtMv@%ClDXBtR}Y zXY3c2qL9BmX}|wie;^PD$_g8HJGE*m7KE6KyQNT^C#7n-S)SwtmZS`Q;IXM(NL53* zWTBGG3}lj(0{ITH1X&G5V(D*UD_(Q z8*ZI$dZRuApUOW@t=uJuos}22j|4j_a~eM|#<7D!tUpE*p{S{ZW2*u{zRGb#8zMVo z{Pfg5zcro_$){W8^DN6RnW>bygv=>{$WFM#a)dXfpgFLZ z4D|33V9@uQP4X&mQ9YHa103!CkfeJu`u8ED_tB>Te5m8db%27rDx|W{j8rl9{5?&o zF>UMwd_#^46o3XZ5HVdD4og8CAMC3b;h4nAgj0fy);ETItLU!P zXrJ?htOlKQIF_-LklU%0YpHlyOUN7-gTtv7D@=sV?C8NMSQHH>ulQQ+mRz|8-%Nsf zJ0Ymy?EnwJ4cCQf4J`XKnZXueCi!7Bm}Y_CI#hv?|HMbM-7ke)mai1K^3Y&~3>LX! zg=ar}T8_%gg21bWAs#=jxMA`;s_up^#Vbb=Y*LYxK%7k+sl+cymrlv@DbX-gfftS* zl}xwipXuU@epqX-eSqHJ76VOGeW2VmD&a8{s~lWlRaOU)OjG|OHG(k<2tlkrTn{>N zYoH&x8(z7c2Gqt>NE#1R*=ZnBbXtRafzeC_rvy3Eg72aOy-xX(K84)`EY-VKY7d*0 z%JWf0j_yCaFUp6_!er45r}vM0O0;?K0;x=ohU4v)6_16o5kgGK2{@K2gaU|Ijx$v? zAP3;1?2pP`C93o_^Fp%KD)OoJOe_*()6KMFB@?-UkF*|X4&PssD+dR-{9X6n+YW2W zKys|;>9G&r4v~takXD1~TqeO=)hNh?*SNye!2`|Y*Rst(ZoCtTHtN`uSjY`aBFp!g zcs;E4ungatz#FoaWb*^A+CP-yOYKU;7zPgurZE)HG%|`L2RdJ9KGLe6Z1b#Czx$yh zEiEy2yp*b{0k3Z~lO37Zvn41!aXk-J3${eVE|dyjZb&fz0w^Cq0zaaX4xD3`;Hq?~ zl>xI0Pzj7xZ(q4|iP*ET@U?IZvEyf)aBTO=HTs)X;2@CAgmt-M&r;nvd)bTuF90;e z%*w!(OW#s-1%H}F9sf7|XJ5VPojS>U1m|rZ2W{b<@JV$bWhfS-n8qtZzk+}ud?}A3 z@@+!k2T)Vn5evYUZGkd9JXB@3tCPC=304i21$IQZiSoLd3bq`T5O95ZkY))-IFY1^b8*c}235BC(7A`2MAi0dh5^*8?f$-{1>~fv{^{`X z;o;+t)95pSq^xSz?mq-gGa3&6N;nqAUyNn#krA7Nw>i|`A40EuBuVrfcW)@<;$@l| zCLH$|u|mOQL~}$*>RKTXVeVxTjS|h$e^awWC#ifsU7xC_{pgjXD_UBpN?#N;)7>{d zz)7s*Z~>MJhp9c?wFTdXtcMOS}yt&BF=8w zv|eK=0=;ZLtOS*Z&2p<$N{GrsVN`}6mL$O4RvGW2_AB+jU4@1ca9(CGv&^&5r*Q1p zuF$NtfO_l+(t#TtoZaxSU+|X0>~uXFVtbmUMpDD8wHxg;3-0#Zmg7Os`W7p-W5D$O z0SC1~yF%SJU_s2-M|yQh1k$|I{!5nqA|an8ZxF)$o|zkrW|Ex1hRy!NoeW2aL95bn zmS-)i@9=1rN7b4ZDh`{n=6JfSh`cDNMrz3EPh?c1FcXbdbU7gLqNTe|EMH5+$vcGn z7Rw&O3%*3ox`TN$ge=K+4)=#mbezc0I*2HaWJVA7n-<=m05wEpmFJ~sNaj_E<%0nu z9tuawt`U(#VnnkPK~p$E3+PED;LwA+J7jPIUS?pFJ9NIKQ<*AOse6%1SroxV-7=M> zbY+=eKn3wWo&+sCQ=JsU!R6@`yIAaE|PiIt}tVi40Gf2k(&Z0(-;mKqY&@|jwz z9I$Vfal79ZIIbEaf~v5|Ca1Pxz9;k$D``R245fLkof5?mhhvQ(7f>BBs@|N-Tkr{1 z;6Xb`JmtQt`R~zxM_oY z8Q#z#x`!0s0y#qp``ky(Gb)7Po^F<+tPQnh=rf}FoK_5W-bq6ul<6=) zHr%M?VXg{Lft7?ocAKML1}Q6I8@_1zv)a5s1djbHLB4|~-eI9mx&AE7XHJ~4SWboy z`azZxdhh=}hH;2_knTHG-ps~g!+)Zqa`EW)-YNz9F>h^0k=78>P9R*i6M zAu*ssA6IQM)_$iwHkKSv8^yzf9NxFJweK)Vrt;NtzVaX&DZ+2h51FvtyL-?*LxAOO zL1NJ(gr1pPkl^F?FWaLc&Bfa(BAOs}*>`5aX>xw=3@c`SW)QA293nb_pbCRHIaJFB zto~>)=;*rZ>g3ApM_#jvs=yp3gM=59N2C3gQW&Ww201AbwInHmPYAlY;;W#KA__N0 zLbt%X<;m)f1vrefh;TPyf zW&lUF)2Vl`c;waF4gp^-MnbWu27fLojEoQ`D63rj&h_2>E^(~rv5aCH7CTiu5+!_I zpdS4d5^dXUp(yQ*SQyNsZ-5+ zNtWDy?%cV*nBV=c&F0Fx|7EJ#{72evckTX){2u*&1ulqoN0jKX2H>~{dFtk|YXD3h zI0~km=c`3(Nw>-OqVZ%Po{CJgqEhSee9$&+)5}C6%20A-DiD~u`<}^GCKV%}P`Pl% z5FI7iPH`js_K+7;Np?gO`FNg`i02h1MkiGY>TX}>QHn!0!2HS~2z!z5rs;}aF z*=az`U~qt7^pMe?z#Xf82$t3Zg-F>5#ROFigUmxpz-pyoNs#af2oV6L^d=_*f&|n6tVNuZUM(j7Te3Ji>nEo&&9St~D@x|BhGF6) zLase8ijrW?jh>RkNGqGBJR8TFu_+MAvE|+}OkfyE{>PEKKGEPJ#jzOr1;I zRUA1P4{8w;ro7U65Fe?bdNPAh8kCVe}sQt@jrgYw7GxNc|7_LrA$Z< zXq+yo0nH|{c(ot0TV}ue{0Tyk62J7F+0uDM%@*H^Khmh}{{5{(4?6uWk6*zas`TqH z(kVzdmz5eFw=v8%tO6PORQBTItDpN^_Tx*df242Lepn-oFTV21)yuEG`n&e;?*41^ z@iWi2EQnqDfsB9iF42G#ooecD%;04eZyg|vy zV7nef3Ms%U)Kdcfq5M6=QkwImmP`JEW$`_cCaGL$ve}$0ajK-@0FQ_FjTgc}IVjq* zlXuj!?{AR@Wd#O1PnV4z6ws6p$nbT=oopc=GEF>x>lRMN%n-fh#Gif!@SXlb%sX8v zgc!=VmuI0Ng1tP4oYl+o$Y*+a0qbAsQRY%F&*D7( z*Lryl^>6m_Jo4Y{d@-?+4Zdx%V#gH zE^OXjb$kBg^5)jc`dYSD9l5>w;PTq?=EC;!>FnaO*{!F}*0;CMWY27_U&zj{uWc`{ zuC8Y{HrJn6UfQmn+uq(7A09r_tFJDtUtqSFb!LfK!FO=0K-8-!okiGUPB6>JT|~_S zv-xvd{k*47;%WNS3i?`ueyG7uG4gYJIf&M4{u2w#Hqz60Vi9(47Ee5dQPfep&748` z40>J1u4HjuMSG^LSN&0E@ue}n_XKK|P+x^Ngg&)_^Xg$-XFkxridM9z9#10m`3mU= zf1@BmIFE?{u`CgpC^(^3Nf6pVCk6?TFfoB|Bg7^SaY>ZKNSq`{65oMQr(>4nNS+i( z5z4+yJkm${$pDVU2gwkW&@dSxHBu)H(gYT41E7tPF-Batu<+6KHED7A+``(@vbqTJ zIJ>+#w6MA@_43lv`swA3A=E~yY;_9+=dUJhaas8RV@>9!e+l!kk+spEqg{9@i z_4V`0ndQ?fPl0@v`7_JQr^Pd?D@*4$183GRZf-q!aba^=IC~ENjUb*~**rQ$ z{p{*8eVftCZmeG1qGk2Ave?ZlD{EWZ3uiYMF7T@>Yv*Me;caXDg@u(>`NG21_WJ4d zwZH|`UA#d15W87HIP()>l_g zFPuL8tgx|(mg45}>C-FQ!qz!D{;l)RZY)b%8|&LEXP#BNliJ$A^wq8Hix;pw7dO_| zWN^bW9jUZ^ZWI6Au@%@}IlsMr-XB#r8}M8ED=l`j;`Y-k+e_zEnqYXet<=j4Ppw>7 zUYDOfx3Imnu(6>&y}k~Py0E;tw5&Y6zIl2Bli4EA2+u66on4TgUB9?}adFwFuKxoF C15{@K literal 17356 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 diff --git a/inc/head.php b/inc/head.php index 1229730..edcf3c3 100644 --- a/inc/head.php +++ b/inc/head.php @@ -60,8 +60,11 @@ +" /> " /> " /> +" /> +" /> @@ -155,31 +158,42 @@ function loadKeyboardFromHash() { - + + diff --git a/index.php b/index.php index a348040..7a02ef5 100644 --- a/index.php +++ b/index.php @@ -16,21 +16,18 @@ × - -
    -
    -
    Keyboard Selection menu
    -
    +
    +
    +
    + Keyboard Selection menu +
    +

    Open Search to get your keyboard

    - +
    @@ -70,85 +71,112 @@
    -
    - A - - A -
    -
    - -
    + +
    +
    + A + + A +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    - + headerBar
    @@ -156,7 +184,6 @@
    -
    @@ -175,8 +202,7 @@
    - - - - + From 170b997a8813fb3e36a8e4baf7b9a2325d006b01 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 9 Feb 2026 12:09:32 +0700 Subject: [PATCH 37/38] fix: remove include fix.php in index --- index.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/index.php b/index.php index 7a02ef5..b905e25 100644 --- a/index.php +++ b/index.php @@ -201,8 +201,3 @@ - - From bce80f6cb5ba8a94b32b9de3feb25f501823198e Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Fri, 7 Aug 2026 14:48:10 +0700 Subject: [PATCH 38/38] feat: all UI changes --- cdn/dev/css/feat-instruction.css | 239 + cdn/dev/css/kmw-body.css | 6 +- cdn/dev/css/kmw-desktop.css | 1 - cdn/dev/css/kmw-header.css | 910 ++-- .../img/instruction/instruction_card_1.png | Bin 0 -> 151865 bytes .../img/instruction/instruction_card_2.png | Bin 0 -> 154768 bytes .../img/instruction/instruction_card_3.png | Bin 0 -> 200438 bytes cdn/dev/js/feature/copy.js | 8 + cdn/dev/js/feature/eraser.js | 7 + cdn/dev/js/feature/expand-textarea.js | 7 + cdn/dev/js/feature/font-slider.js | 7 + cdn/dev/js/feature/hide-keyboard.js | 7 + cdn/dev/js/feature/instruction.js | 35 + cdn/dev/js/feature/kb-container.js | 258 ++ cdn/dev/js/feature/kb-selection-menu.js | 366 -- cdn/dev/js/feature/pagination.js | 28 +- cdn/dev/js/feature/search.js | 183 +- cdn/dev/js/feature/tool-tray.js | 7 + cdn/dev/js/main.mjs | 54 +- cdn/dev/js/operation/bundleKbSelectionMenu.js | 18 - cdn/dev/js/operation/confirmKeyboard.js | 19 - cdn/dev/js/operation/hamburgerMenu.js | 38 + cdn/dev/js/operation/keyboard.js | 29 +- .../{keyboardDetails.js => keyboardAction.js} | 11 +- cdn/dev/js/operation/keyboardContainer.js | 71 + ...KeyboardData.js => keyboardDataPackage.js} | 9 +- cdn/dev/js/operation/paginationLogic.js | 17 - cdn/dev/js/operation/platformSupport.js | 17 - cdn/dev/js/operation/rememberState.js | 11 +- cdn/dev/js/operation/resizeKeyboard.js | 45 +- cdn/dev/js/operation/resizeTextArea.js | 7 + cdn/dev/js/operation/searchAPI.js | 8 +- cdn/dev/js/operation/searchCardContent.js | 10 +- cdn/dev/js/operation/searchLogic.js | 58 +- cdn/dev/js/operation/selectedKb.js | 26 - cdn/dev/js/operation/toggleInstruction.js | 7 + cdn/dev/js/operation/validURL.js | 9 +- cdn/dev/js/operation/waitForElement.js | 8 +- cdn/dev/js/state/appState.js | 22 +- cdn/dev/js/state/elementSize.js | 7 + cdn/dev/js/state/elementValue.js | 7 + cdn/dev/js/state/enableKb.js | 9 +- cdn/dev/js/state/fontState.js | 7 + cdn/dev/js/state/selectedKbList.js | 7 + cdn/dev/js/state/storage.js | 7 + inc/head.php | 1 + index.php | 344 +- style.css | 4091 +++++++++++++++++ 48 files changed, 5959 insertions(+), 1084 deletions(-) create mode 100644 cdn/dev/css/feat-instruction.css create mode 100644 cdn/dev/img/instruction/instruction_card_1.png create mode 100644 cdn/dev/img/instruction/instruction_card_2.png create mode 100644 cdn/dev/img/instruction/instruction_card_3.png create mode 100644 cdn/dev/js/feature/instruction.js create mode 100644 cdn/dev/js/feature/kb-container.js delete mode 100644 cdn/dev/js/feature/kb-selection-menu.js delete mode 100644 cdn/dev/js/operation/bundleKbSelectionMenu.js delete mode 100644 cdn/dev/js/operation/confirmKeyboard.js create mode 100644 cdn/dev/js/operation/hamburgerMenu.js rename cdn/dev/js/operation/{keyboardDetails.js => keyboardAction.js} (66%) create mode 100644 cdn/dev/js/operation/keyboardContainer.js rename cdn/dev/js/operation/{handleKeyboardData.js => keyboardDataPackage.js} (61%) delete mode 100644 cdn/dev/js/operation/paginationLogic.js delete mode 100644 cdn/dev/js/operation/platformSupport.js delete mode 100644 cdn/dev/js/operation/selectedKb.js create mode 100644 style.css diff --git a/cdn/dev/css/feat-instruction.css b/cdn/dev/css/feat-instruction.css new file mode 100644 index 0000000..47758f6 --- /dev/null +++ b/cdn/dev/css/feat-instruction.css @@ -0,0 +1,239 @@ +/* ========================= + Instruction Modal Overlay +========================= */ + +.instruction-modal-overlay { + position: fixed; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + padding: 12px; + background: rgba(0, 0, 0, 0.18); + z-index: 9999; +} + +/* ========================= + Modal Container +========================= */ + +.instruction-modal { + display: flex; + flex-direction: column; + justify-content: space-between; + background: #ffffff; + border-radius: 36px; + padding: 30px 72px; +} + +/* ========================= + Header +========================= */ + +.instruction-modal-header { + text-align: center; +} + +.instruction-modal-title { + margin: 0; + font-size: 28px; + font-weight: 500; + color: black; + padding: 20px; +} + +/* ========================= + Body +========================= */ + +.instruction-modal-body { + display: flex; + align-items: stretch; + justify-content: center; + gap: 40px; + flex-wrap: wrap; + margin: 20px 0; +} + +/* ========================= + Instruction Card +========================= */ + +.instruction-card { + width: 300px; + min-height: 264px; + background: #ffffff; + border-radius: 34px; + padding: 28px 22px; + display: flex; + flex-direction: column; + align-items: center; + transition: + transform 0.2s ease, + box-shadow 0.2s ease; +} + +/* ========================= + Card Border Variants +========================= */ + +.instruction-card-search { + border: 2px solid #ff7a00; +} + +.instruction-card-pick { + border: 2px solid #d72b55; +} + +.instruction-card-type { + border: 2px solid #6ec6ea; +} + +/* ========================= + Card Heading +========================= */ + +.instruction-card-heading h3 { + margin: 0; + font-size: 1.5rem; + font-weight: 400; + color: black; + text-align: center; +} + +/* ========================= + Card Graphic +========================= */ + +.instruction-card-graphic { + margin-top: 28px; +} + +.instruction-card-graphic img { + width: 220px; + max-width: 100%; + height: auto; + object-fit: contain; + display: block; +} + +/* ========================= + Divider +========================= */ + +.instruction-card-divider { + width: 100%; + height: 2px; + opacity: 50%; + background: #262626; + margin: 26px 0; +} + +/* ========================= + Description +========================= */ + +.instruction-card-description { + text-align: center; +} + +.instruction-card-description p { + margin: 0; + font-size: 1rem; + line-height: 1.45; + color: #474747; +} + +/* ========================= + Footer +========================= */ + +.instruction-modal-footer { + display: flex; + align-items: center; + justify-content: center; + gap: 48px; + flex-wrap: wrap; + margin-top: 20px; +} + +/* ========================= + Buttons +========================= */ + +.instruction-modal-btn { + border: transparent; + min-width: 200px; + padding: 14px 34px !important; + border-radius: 999px; + background: var(--keyman-blue); + text-decoration: none; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1.1rem; + font-weight: 500; + color: white; + cursor: pointer; + transition: + background 0.2s ease, + transform 0.2s ease, + color 0.2s ease; +} + +.instruction-modal-btn:hover { + border: 1px solid var(--keyman-blue); + background: transparent; + color: rgb(0, 0, 0); + transform: translateY(-2px); +} + +/* ========================= + Responsive +========================= */ + +@media (max-width: 1024px) { + + .instruction-modal { + padding: 48px 32px; + } + + .instruction-modal-body { + gap: 32px; + } + + .instruction-card { + width: 100%; + max-width: 360px; + } +} + +@media (max-width: 640px) { + + .instruction-modal { + min-height: auto; + border-radius: 24px; + + padding: 32px 20px; + } + + .instruction-modal-title { + font-size: 2rem; + } + + .instruction-card { + min-height: auto; + } + + .instruction-card-heading h3 { + font-size: 1.6rem; + } + + .instruction-modal-footer { + gap: 20px; + } + + .instruction-modal-btn { + width: 100%; + } +} \ No newline at end of file diff --git a/cdn/dev/css/kmw-body.css b/cdn/dev/css/kmw-body.css index d447622..b81f69c 100644 --- a/cdn/dev/css/kmw-body.css +++ b/cdn/dev/css/kmw-body.css @@ -96,8 +96,8 @@ .keyboard-area { user-select: none; flex: 1; - width: 70vw; - height: 100%; + width: inherit; + height: inherit; border: var(--keyman-blue) 1px solid !important; } @@ -118,7 +118,7 @@ .example-box { background-color: var(--keyman-blue); color: white; - width: 70vw; + width: inherit; text-align: center; padding: 5px; border-bottom: 1px solid rgb(159, 159, 159); diff --git a/cdn/dev/css/kmw-desktop.css b/cdn/dev/css/kmw-desktop.css index 0cb3f68..514abd5 100644 --- a/cdn/dev/css/kmw-desktop.css +++ b/cdn/dev/css/kmw-desktop.css @@ -96,7 +96,6 @@ form { border-radius: 4px; background: #cccccf; color: black; - font-family: Verdana; font-weight: normal; min-width: 16px; display: inline-block; diff --git a/cdn/dev/css/kmw-header.css b/cdn/dev/css/kmw-header.css index 8dbd919..5732306 100644 --- a/cdn/dev/css/kmw-header.css +++ b/cdn/dev/css/kmw-header.css @@ -53,14 +53,13 @@ header > div > img { #searchBar { position: relative; width: 550px; - margin-right: 10px; } #searchBar #searchInput { height: 50px; width: 100%; text-indent: 10px; - border-radius: 15px; + border-radius: 16px; text-align: left; font-family: inherit !important; box-shadow: none; @@ -97,395 +96,472 @@ header > div > img { display: none; } +/* +========================== +== SEARCH DROPDOWN BASE == +========================== +*/ + #searchDropdownMenu { - width: 100%; - max-height: 600px; - overflow: auto; - scrollbar-width: thin; + max-height: 88vh; + width: 550px; + overflow-y: auto; + padding: 1.5rem; + border-radius: 16px; + box-shadow: 0 10px 30px rgba(0,0,0,0.08); } -#searchDropdownMenu hr { - margin: 15px 0; -} /* -============================ -==Instruction on dropdown== -============================ +==================== +== SEARCH HEADING == +==================== */ -.instruction-title { + +.search-result-heading { display: flex; - flex-direction: row; - justify-content: center; align-items: center; + margin-bottom: 1.75rem; } -.instruction-title, .keyboard-title { - width: 100%; +.search-result-heading hr { + flex: 1; + border: none; + border-top: 2px solid black; + opacity: 50%; } -.instruction-title p, .keyboard-title { +.keyboard-title { + margin: 0; + white-space: nowrap; + font-size: 20px; font-weight: 500; - font-size: 18px; + color: var(--keyman-orange); text-align: center; } -#closeInstruction { - position: absolute; - right: 20px; - top: 10px; - border: 1px solid black; - border-radius: 20px; - text-align: center; - width: 30px; - cursor: pointer; +/* +================ +== SEARCH LIST == +================ +*/ + +#kbSearchCardUI { + display: flex !important; + flex-direction: column; + gap: 1.5rem; } /* ================ -==Search cards== +== SEARCH CARD == ================ */ + .card-wrap { - box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;; - padding: 10px; - border-radius: 10px; - letter-spacing: .05rem; + position: relative; + padding: 20px; + border-radius: 16px; + border: 1px solid #8d8d8d; + transition: + border-color 0.25s ease, + transform 0.25s ease, + box-shadow 0.25s ease; overflow: hidden; - margin-bottom: 5px; + width: 100%; } -.card-wrap.disabled { - opacity: 0.5; - pointer-events: none; - position: relative; +.card-wrap:hover { + transform: translateY(-2px); + border: 1px solid var(--keyman-orange); + cursor: pointer; } -.card-wrap .monthly-download { - opacity: 75%; + +/* +===================== +== ACTIVE SELECTION == +===================== +*/ + +.card-wrap.selected { + border-color: var(--keyman-orange); } +.selection-indicator.selected { + background: var(--keyman-orange); + color: white; + opacity: 100%; + border: none; +} + +/* +================ +== CARD HEADER == +================ +*/ + .card-header { display: flex; - flex-direction: row; justify-content: space-between; - align-items: center; - margin-bottom: 8px; + align-items: flex-start; + margin-bottom: 0.75rem; } -.card-header > * { - margin-right: 0 10px 0 0; -} - -.card-header .card-header-title { +.card-header-title { display: flex; - flex-direction: row; - justify-content: left; - align-items: center; + flex-direction: column; + gap: 0.4rem; + cursor: pointer; + font-size: 20px; } -.card-header h4 { +.card-header-title.selected { color: var(--keyman-orange); - font-weight: 400; - font-size: large; - margin: 0 5px; } -.card-header h4 span { +/* +=================== +== KEYBOARD TITLE == +=================== +*/ + +.card-header h4 { + margin: 0; + font-size: 18px; + font-weight: 500; color: black; + line-height: 1.1; } -.card-header p { - position: relative; - float: right; - font-weight: 200; - font-size: medium; - margin: 0; +.card-wrap.selected .card-header h4 { + color: var(--keyman-orange); } -.card-header p, .card-header .help-icon-span { - color: var(--keyman-red); - cursor: pointer; +.card-header h4 span { + color: black; + font-size: 14px; } -.card-wrap.disabled .kb-icon-plus { - pointer-events: auto; - opacity: 1; - position: absolute; - right: 15px; - z-index: 1; +/* +===================== +== HEADER META ROW == +===================== +*/ + +.card-sub-header { + display: flex; + flex-direction: row; + align-items: center; + gap: 10px; + margin: 0.5rem 0 1rem 0; } -.kb-icon-plus { - transition: 0.5s ease; +.card-sub-header > * { + opacity: 75%; + font-size: 10px; + text-align: center; + margin-bottom: 0; } -.kb-icon-plus.animate { - color: green; +.dot-spacing { + width: 3px; + height: 3px; + border-radius: 3px; + background-color: black; + opacity: 75%; } .keyboard-id { - font-size: 12px; - margin-bottom: 10px; - color: #006622; + color: black; } -.card-wrap h6 { - opacity: 75%; - font-size: 12px; - margin: 0 0 0.35rem; +.monthly-download { + color: #078510; } -.keyboard-description { - color: gray; -} +/* +================= +== ACTION ICONS == +================= +*/ -.keyboard-specs { +.card-header-icon { display: flex; - flex-direction: row; - justify-content: space-between; align-items: center; + text-align: center; + gap: 10px; } -.keyboard-specs .platform { - display: flex; - flex-direction: row; +.card-header-icon i { + width: 20px; + height: 20px; + font-size: 10px; + align-content: center; + border: 1px solid black; + border-radius: 20px; + background: transparent; + cursor: pointer; + transition: background 0.2s ease, transform 0.2s ease; } -.keyboard-specs .platform span, -.keyboard-content .keyboard-platforms .platform span { - font-size: 0px; - width: 15px; - height: 20px; - margin: 0; +#kbHelpIcon:hover, #kbDownloadIcon:hover { + color: var(--keyman-orange); + border: 1px solid var(--keyman-orange); } + /* -============== -==Pagination== -============== +================= +== DESCRIPTION == +================= */ -#searchDropdownMenu .bottom-row-search { - background-color: white; - align-items: center; - justify-content: center; - width: fit-content; - border-radius: 10px; - width: 100%; - bottom: 0; - text-align: center; - box-shadow: rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px; + +.keyboard-description { + font-size: 12px; + line-height: 1.45; + color: gray; + opacity: 75%; } -.bottom-row-search > * { - margin: 10px; - cursor: pointer; +.keyboard-description mark { + background: #ffe08a; + padding: 0 4px; + border-radius: 4px; } -#paginationControls { - display: none; +.selection-indicator { + width: 24px; + height: 24px; + border: 1px solid black; + opacity: 50%; + border-radius: 20px 0 10px 0; + position: absolute; + right: 0; + text-align: center; } + +.keyboard-description:hover { + opacity: 100%; +} + /* -=========================== -==Selected Keyboard Menu== -=========================== +================= +== SHOW MORE == +================= */ -#keyboardSelectionButton { - z-index: 3; + +.keyboard-description a { + color: var(--keyman-blue); + text-decoration: none; + font-weight: 500; } -.keyboard-selection-menu { - width: 350px; - height: 35px; - position: relative; +.keyboard-description a:hover { + text-decoration: underline; } -#keyboardSelection { +/* +================ +== PAGINATION == +================ +*/ + +#paginationControls { + margin-top: 2rem; + display: flex; - flex-direction: column; - text-align: center; - width: 0; - height: 100%; - background-color: white; - color: black; - box-shadow: var(--box-shadow); - overflow-y: scroll; - scrollbar-width: none; - margin-left: -10px; - border-radius: 10px; - z-index: 0; - white-space: nowrap; - text-indent: 15px; + justify-content: center; + align-items: center; + gap: 1rem; } -#keyboardSelection.open { - position: relative; - width: 400px; - height: fit-content; - padding: 0 0 10px; - z-index: 2; +#paginationControls button { + width: 42px; + height: 42px; + + border-radius: 50%; + + border: 2px solid #999; + background: white; + + cursor: pointer; } -#keyboardSelection p { - margin: 0; - height: 25px; - width: 100%; +#paginationControls button:hover:not(:disabled) { + border-color: var(--keyman-orange); } -.kb-selection.open { - display: block; +#paginationControls button:disabled { + opacity: 0.4; + cursor: not-allowed; } -.kb-selection { - display: none; +/* +================== +== INSTRUCTION == +================== +*/ + +.search-instruction { + background: white; + border-radius: 20px; + padding: 1.5rem; + margin-bottom: 1.5rem; + border: 2px solid #e5e5e5; } -.kb-item-header, .kb-item-footer { +.instruction-title { display: flex; + justify-content: space-between; align-items: center; - justify-content: center; - height: 30px; - font-weight: 500; - margin: 5px 0; + + margin-bottom: 1rem; } -.kb-item-header { - border-bottom: 1px solid gray; +.instruction-title p { + margin: 0; + + font-size: 1.2rem; + font-weight: 600; } -.kb-item-footer { - border-top: 1px solid gray; +#closeInstruction { cursor: pointer; -} + font-style: normal; + + width: 28px; + height: 28px; -.kb-item-keyboard { display: flex; - flex-direction: row; - justify-content: space-between; align-items: center; - width: 100%; - height: fit-content; - padding: 5px; - opacity: 50%; -} + justify-content: center; -.kb-item-keyboard:hover { - cursor: pointer; - color: black; - padding: 5px; - opacity: 100%; -} + border-radius: 50%; -.kb-item-keyboard span { - width: 50%; - height: 30px; - text-align: center; - overflow-x: scroll; - scrollbar-width: thin; - margin: 5px; + border: 1px solid #999; } -.kb-item-keyboard span:hover { - text-decoration: underline; -} +/* +================== +== RESPONSIVE == +================== +*/ -.keyboard-configs { - height: fit-content; - display: grid; - grid-template-columns: repeat(4, 1fr); - border-left: 1px solid black; - align-self: center; +@media (max-width: 768px) { + + #searchDropdownMenu { + padding: 1rem; + } + + .card-wrap { + padding: 1.5rem; + } + + .card-header { + flex-direction: column; + gap: 1rem; + } + + .card-actions { + align-self: flex-end; + } + + .card-header h4 { + font-size: 1.5rem; + } + + .keyboard-title { + font-size: 1.5rem; + } +} +/* +============== +==Pagination== +============== +*/ +#searchDropdownMenu .bottom-row-search { + background-color: white; + align-items: center; justify-content: center; - list-style-type: none; - padding-left: 15px; - margin: 5px; + width: fit-content; + border-radius: 10px; + width: 100%; + bottom: 0; + text-align: center; + box-shadow: rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px; } -.keyboard-configs > li { - opacity: 50%; - margin-right: 5px; +.bottom-row-search > * { + margin: 10px; + cursor: pointer; } -.keyboard-configs > li:hover { - opacity: 100%; - cursor: pointer !important; - font-size: 20px; +#paginationControls { + display: none; } +/* +=========================== +==Selected Keyboard Menu== +=========================== +*/ -.keyboard-configs li > i { +.keyboard-container-dropdown-menu { display: flex; flex-direction: row; - align-items: center; - width: 35px; - height: 35px; - margin-right: 3px; -} - -::-webkit-scrollbar:horizontal { - height: 5px; -} - -::-webkit-scrollbar-thumb:horizontal { - background: #2c7be5; - border-radius: 6px; + width: 50%; + gap: 20px; + margin: 10px; } -::-webkit-scrollbar-track:horizontal { - background: #f1f1f1; +.keyboard-container-visible { + display: flex; + flex-direction: row; + width: 500px; } -.btn-keyman-orange { - background-color: var(--keyman-orange) !important; - color: white !important; +.kb-item-keyboard { + position: relative; + border-radius: 10px; + border: 1px solid black; + padding: 10px 20px; + margin-right: 10px; + width: max-content; + overflow: hidden; } -.keyboard-details { - position: fixed; - width: 400px; - height: max-content; - background-color: white; - color: black; - box-shadow: var(--box-shadow); - border-radius: 20px; - padding: 10px; - z-index: 2; - top: 100px; +.kb-item-keyboard:hover { + cursor: pointer; } -.keyboard-content-wrapper { - margin-top: 10px; +.kb-item-keyboard-selected { + border: var(--keyman-orange) solid 1px; } -.keyboard-content { - width: max-content; - list-style-type: none; - padding: 0; - text-align: left; - display: flex; - flex-direction: column; +.kb-item-keyboard.selected { + border-color: var(--keyman-orange); } -.keyboard-content > * { - margin: 5px 0px; +.kb-chip-remove { + position: absolute; + top: -5px; + right: 0; + border: none; + background-color: transparent; } -.keyboard-content .keyboard-platforms .platform { - display: flex; - flex-direction: row; +.kb-chip-selected { + display: none; } -.keyboard-content li .row .col:nth-child(2), -.keyboard-content li .row .col:nth-child(2) * { - text-align: center; - white-space: normal; - word-break: break-word; - width: 200px; - overflow: hidden; +.kb-item-keyboard.selected .kb-chip-selected { + display: flex; } -.keyboard-content li .row .col:nth-child(1) { - width: 200px; +.keyboard-overflow-selection > * { + border: none; } -#removeLanguage { - cursor: pointer; +.btn-keyman-orange { + background-color: var(--keyman-orange) !important; + color: white !important; } .platform span { @@ -632,129 +708,299 @@ input[type="range"]::-webkit-slider-thumb { color: var(--keyman-blue); } -.burger-menu-top-section > div { +/* ========================= + Dropdown Container +========================= */ +#burgerDropDownMenu { + width: 500px; + height: 90vh; + padding-top: 10px; + border-radius: 10px; + border: 1px solid #dcdcdc; + overflow: scroll; + scroll-behavior: smooth; + background: #ffffff; + box-shadow: 0 12px 40px rgba(0,0,0,0.08); +} + +/* ========================= + Wrapper +========================= */ + +.menu-wrapper { display: flex; - flex-direction: row; - justify-content: space-around; - align-items: center; - border-bottom: 0.5px solid gray; - padding: 15px; + flex-direction: column; + gap: 20px; + padding: 18px; } -.burger-menu-top-section .instruction-status .title p { - font-size: 16px; +/* ========================= + Section +========================= */ + +.menu-section { + display: flex; + flex-direction: column; + gap: 12px; + margin: 0 10px; +} + +.menu-section-title { + font-size: 12px; + color: #000000; + opacity: 50%; margin: 0; } -#burgerMenu #burgerDropDownMenu { - box-shadow: var(--box-shadow); +.menu-card-group { + display: flex; + flex-direction: column; + gap: 12px; } -#burgerMenu #burgerDropDownMenu:hover { - cursor: pointer; +/* ========================= + Cards +========================= */ + +.menu-card { + display: flex; + align-items: flex-start; + gap: 14px; + + padding: 15px !important; + border-radius: 10px; + + background: #ffffff; + border: 1px solid #dddddd; + + text-decoration: none; + color: inherit; + + transition: + transform 0.2s ease, + background 0.2s ease, + border-color 0.2s ease; +} + +.menu-card:hover { + background: #ffffff; + border-color: var(--keyman-orange); + transform: translateY(-1px); + opacity: 100% !important; } -#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li { +.primary-card { align-items: center; - width: 300px; - border-bottom: 1px solid rgb(196, 196, 196); - margin-top: 10px; - margin-left: 10px; } -#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li::after { - background-color: orange; +/* ========================= + Card Icon +========================= */ + +.menu-card-icon { + width: 28px; + height: 28px; + min-width: 20px; + border-radius: 50%; + background: #ff6b00; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 1px; } -#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li p:hover { +.menu-card-icon i { + font-size: 18px !important; opacity: 100%; } -#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li p { - width: 80%; - white-space: normal; - position: relative; - left: 40px; - font-size: 14px; - opacity: 50%; - margin-top: 10px; +.menu-card-icon img { + width: 20px; + height: 20px; + object-fit: contain; } -#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li a { - text-decoration: none; - color: black; - font-style: bold; - font-size: 16px; +/* ========================= + Card Content +========================= */ + +.menu-card-content { + flex: 1; } -#burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li i, #burgerMenu #burgerDropDownMenu .burger-menu-middle-section ul li img { - margin: 0 10px; - font-size: 16px; - width: 18px; - opacity: 100%; - color: var(--keyman-orange) +.menu-card-content h4 { + margin: 0; + height: 24px; + font-size: 14px; + color: #000000; + align-content: center; } -#burgerMenu button i:hover { - cursor: pointer; +.menu-card-content p { + margin: 10px 0 0; + font-size: 12px; + line-height: 1.5; + color: #000000; + opacity: 50%; } -.burger-menu-external-links { - display: grid; - grid-template-columns: 1fr 1fr; - grid-template-rows: 1fr; - padding: 0; - list-style-type: none; +/* ========================= + Card Arrow +========================= */ + +.menu-card-arrow { + display: flex; + align-items: center; + justify-content: center; + color: #000000; } -.external-links-item:active { - background-color: transparent !important; +.menu-card-arrow i { + font-size: 16px !important; + opacity: 100% !important; } -.kmw-socials, .kmw-version, .sil-logo { - font-size: 14px; +.menu-card-icon-keyman { + background-color: white; + border: 1px solid var(--keyman-orange) } -.kmw-socials { +/* ========================= + Footer +========================= */ + +.menu-footer { + border-top: 1px solid #dddddd; + border-radius: 10px; + padding-top: 18px; display: flex; flex-direction: column; - justify-content: center; align-items: center; - padding-bottom: 15px; - line-height: 30em; - margin-bottom: 10px; - border-bottom: 0.5px solid gray; + gap: 16px; } -.kmw-socials h5 { - line-height: 1.5em; - font-size: 25px; -} +/* ========================= + Socials +========================= */ -.kmw-socials-icons { - display: grid; - grid-template-columns: 1fr 1fr 1fr; +.menu-socials { + display: flex; + align-items: center; justify-content: center; + gap: 20px; + flex-wrap: wrap; + margin-top: 20px; +} + +.menu-socials a { + width: 36px; + height: 36px; + border-radius: 50%; + background: var(--keyman-blue); + color: white; + display: flex; align-items: center; - gap: 10px; - margin: 10px; + justify-content: center; + text-decoration: none; + transition: + transform 0.2s ease, + opacity 0.2s ease; } -.kmw-socials-icons > * { - line-height: 1.5em; +.menu-socials a:hover { + transform: translateY(-2px); + background-color: transparent; + border: 1px solid var(--keyman-blue); + color: var(--keyman-blue); +} + +.menu-socials a i { + opacity: 100% !important; + font-size: 16px !important; } +/* ========================= + SIL Logo +========================= */ -.kmw-socials-icons > a { +.menu-sil { display: flex; - text-decoration: none; + flex-direction: column; + align-items: center; + gap: 8px; + margin-top: 20px; +} + +.menu-sil img { + width: 140px; + height: auto; + object-fit: contain; +} + +.menu-sil p { + margin: 0; + font-size: 13px; + font-weight: 400; +} + +.menu-sil a { color: black; +} + +/* ========================= + Version +========================= */ + +.menu-version { + display: flex; + gap: 8px; + font-size: 12px; + color: #000000; opacity: 50%; - font-size: 16px; - position: relative; + flex-wrap: wrap; + justify-content: center; } -.kmw-socials-icons > a:hover { - opacity: 100%; +.menu-version a { + color: inherit; + text-decoration: underline !important; +} + +.menu-version a:hover { + text-decoration: none !important; +} + +/* ========================= + Burger Button +========================= */ + +.burger-trigger { + border: none; + background: transparent; + box-shadow: none; +} + +.burger-trigger i { + font-size: 20px; + color: #2b2b2b; +} + +/* ========================= + Responsive +========================= */ + +@media (max-width: 480px) { + #burgerDropDownMenu { + width: min(92vw, 340px); + } + + .menu-wrapper { + padding: 14px; + } + + .menu-card { + padding: 12px; + } } @font-face { diff --git a/cdn/dev/img/instruction/instruction_card_1.png b/cdn/dev/img/instruction/instruction_card_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2779d512d922cb6990bd5fb760693e6c05e43651 GIT binary patch literal 151865 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�>0w?AsR);kT+rW|R0{7DA0OjI z3jSTH3kt_2O-A2#&%H{8n+mG$Ij-1E8|Xy9E{(sBM3-uiW)E90G(&ob1Ldj*lZi_n zr1{_EXDA_KL|66P=*5apn7`F9r`B?b~(W!sQzs_3@~r%fuCd z1XzTz5z)pKRvb`^(TWwa8g}b}rk}Te{PlOchR3(868h`LFGe226^V;&+SC`Gcw!HSn%Gw(r&+fglkQ94c zYWFP37P{pHc|;OgOvTla;)Rv^v&8wa&u-5B+4`9`mNoJ+qrxg zD_GyD-xH~o*RvM73#!e}cjo3h&330X-@Wo+?yXg`Kl$jz>&s{JV&(M}wYNU5zqzvh z-n#n4R|}e-^1+wl24&2w)_U=>(j3aNYhQQ&dh_g?%j<8gXuQ6>^|Pg|pDt_t z(eE4o?l(_Q+-&C&r8U=W&#Bkxt4I3v-ORC6y`r4Mw!-JjVEt!)lf93p-PlKseAo~^ zxN;7woJ5!ng#Z~OB&ELh562as<c;jNXf%Z z?k4Si(}5nTsb{efPRXSs4>>^*fGpXJFAe5+l7gGCxr;i`$pepHiq?R&BeQ6>;xi(Y z0b~`W>ax6R`LWw~A8qI#*|T@@{-bX*`|wIa-e=7C3WS$c5xmbB93%md$)t=OF~zti z``+S;-tv0(e0pgA#KwV1Sac{>djZCaC&moaW>zQdETo;ev@_qyV@s!# z*Dkqd&kKvblkHbNdj8td*|%2J-&|FHYgOa@)y;QS)!$!R8@sx&ph8}@P<}8tfn}&B z8NMmm5`6bb_kZuNy|r}qy%mijt~7u4QR|iEt$+KwnGX+6y=dgvlh#5qS3JzW&;c(Q z4VHkOAt6zF(IvEm#JJ+E!f;mWDVHuhW`M^Fj4NR$LWKY%Kv0W#QL@6xhvmJLIfyH) zaD{jS0ZP-{R$;7VvF12sr*m%6H!4V#uMtQo+%TyUGrV;w4y~SQ_>d)WNdmznf;t8g zKxGIwEPzncEW`ITWSCBm04jWUg~oI4g32?z%~iyedtYzp-#c{R$hY4;%Zj*?nyLlF z6@E2Y?Dob4hGr61$N=X8h#B#tDL*^z^X*Y^#bJaeg|U2?36#=*rE zcwF&Pz6r9^Eh37#fS*?(^TpSQo5?>6&c3pA=ADo0@2;u8x2Ey_$BkdEYrOOE%v&pF z2hPktt0xxee7E>6OGo`EF3zhDek(Ve$A-V({Uj@BJTEK@e5l(6` zACZ!k9Olbkp6md)Knyc*NOUWP_XUtV9|)lbFG=WX{2(V{@hKx$KFAz`oX_^4) zdZqj@ZkeK9z4>6%j{PHtj;VX2%(EO)G)Fq}Xry<_0Xp6D_JnHmZ|^Yz8)+e8nBiou z>`Mu^yabEZYPH9Yp4`wkJaO#o+}wOwc|ait@(yBSxcu^)g{0%lLKi$E*-@}=Kk5F} z*4i5@Y9HuF7uVMEVnw~nYjypV-`D?kuzB*kB9L!$&F5?6@d^XxMtiw-iyB}}}nGMTBDcvTQW zcp-$iwk&Yik*NeT^wcd_P6A1ilEn_D`L(MjrHC~~B|yYWa|_>*#&p3Vm9iPxy>P0b zpsg>>=(2&NGI>5PN#?RVD?KKOK-iOFn=7BvY|VXk_RCG%_m3VqJvCjv+c&{+#TSc@ zk-t9+5G>RyVAD?u&On%ay%K0XLc?2n=G^6teZzwXj!w_0M_62qAym^?omHDjtL#73 zKlG*bVpl8G)yAni^MA2%_U)A_sO0^Fb+z}`)IV6;d}mGT4}VktA0)ra@g@ z?_n0IPlTaDu+mD<_%V{J^7CbZ{_4``VF19Mz)e5AHAE(2dgUDma7hd}OL!?e66xK( zIf83bPB@a^CnVubj4MVIlp4JCnqdi)67#08{yE_NdQh&svzSWj$)p&3wee(kH< zpKMpR8sEM5C@E{SO8c`SahL%*%cK#B^&aNk+0_ed_ye{1HV|?{N+0JIG=m6X8(C#bLpYlhX?CRM;rgLxAFh%Y5(b_#!r{kfBc)7 z*OxXvSkr!Y)!duQ+ixy!=4FbCD=YGPW%lPQX5Uyo`{s(;o9c$<>7k2rDx8%xWaVO7 zY!jrEii?ojG&i=vX^XfmA0`zwLsieb2(D1%i$er}h1_n6J+GWsMFN0y7GhzOM1d7I zf<+AvMdJ!Y97rNdM4mJv&2Bg+#_dV&k5wyMHhGqjNup*I2TAjJfn@l_kk=TbG;lhf zA_0*c8@4ewzj_+&!cF-&cJ}>~=i7(I)@>WUboI8T+;-&*z@UAU-T}-(-MV}KlN|>>*}m`W`K#(ecG2vewh<07p`HmEdQ4hNj%TF|%J1HH zy2-o_E!XD%dQ0PtrH%JKR{f2S>#whkHK+jH|tVqah5G>~D}5RNw$jL}I^FNCgs zHl+wHox;t3ad+Xr_BUSnXeRG(tWpR?`QI2 zc+^$&RnNp5xl<4+|A7S4q+=fDh(HMddfqk%@Z~tRmlbdE-Wz@ ztf0&DAJvZS$w&gR2g%t=^m}sf>`KHdwWNwRWsk}0-cQ?!_6cNf(~oTdgyjJI{D%la z(7s8uX#v54sZM89Bkb37FlCHzK$7JF#MVoW`@79fJMMqzC{2s2Fj&+H3k#huF5Ot) zw{O?p!w()m$;{1QBBS2+910-`iWj6UL37NDcu^t>rHSOS__zZ9nSdu1^SGMFlB1t} z@yX7ELkEvOo0=`+O1Hc-s)Cb}P-Cehg{4k`<%}dLtAyfyF?At5A93$#XX$ADtyM4n z-S4LU-EXH~SvvE^@|ibROuw~!=Is?T@2r}AZ`JJkt84GAuD!pe_Ws(&duwa&tf{@V zs`loJ<|`jH{`g;7KmJYY?Pat7u=B;Gd-Lb+%>DJIXMgaI&tLi7^cx?k(DLTe+Iy=S zzgW|JYh`Qax%u{jLfR?rSMHc}#}W-0?9CHJ^U&(XTIMx)g>Z4jR~wobiz^cSh!?wM z7qgI_!Z1&X?0lvCnujSlcYmM{IW0@lIQ<;8q5)KhC>(iaRY6G5-$ZPVC4{MW!)mIM z#6W00P@|_9G(z}rbii2X6K$PMVYg05esL*L?)x!}pOUAa*_fWKj~+d}e%s!opPjEY z+F21-5?n#TW`m_iIjUm__qr{C6VN@l0xFh0elQHb%&9W+Cgx4fMahyQ$iBROr+;W{ zU}*HK+YgIig5QhQquoO?1$T-62~wyeDc?<5ypmFVsb%zP>;K&K;)69)uYC04$G?64 z(+{U!`)KOz<zg$1_!N;@jteVM#%InK&uY6d4ZE0T3H2-c_ zYwYsei&`?5L+fUjAI|@8Tc-Z-pPv8pchj$aH2eC}+Rv9a-d@#s=i^ph<@9|v*DOB8 zlE6Jss*Z3G?S`R^j=&nv1R42CgyIXv6@C_&Tb?nFGVE$YamAt*_wZxe4n0K|B01Lk zR|K1Sam#BGWD$j@j!?{~R->4)j9OD4Qg`A6GJuZ5^jD z8*l`}9%P9O2$NbkZWmY7e`)sM@ppUnAL$<)J%0M)+`N7>8V)S%!mH4LHsyVPupSay zwIu4^-?`#>$mjLW`G@oC4!8c-%~OB6_Spw3p1!mE#XEUuSw8*tM=$cf@2{Bo#j5%* zme2g^!)guGlznF|jj%(o!2X2@P3b zflA4h|9-ZB0I-Ti7zw&U4&r-UVh01q9fKYv0fQ8ea|v8xTuUhTiM5K0#ibJk$C=vO z?_RogYkmLT%{%s8y>Ta>((%4_3$XxD?54L|yA%ywU%`n6WQOe#7r@H}6>Pd#p`Vng zH`_-}oZCJ$R&0gMr0`V)fPZHF1pE<>u>tc+fbwlq(IqXejZ~kdbJ&2Nrrul_#qpe;Q)0|5h zZ53MD3+bJw3;);d+8_M$i=X^%_Lb%JS5`Fi#h5o%w*TbA+Q;LKr?U#FIE4xGq@$BK0r^k`Yn2I5fMd#;C zL^1(K;fsqUFY{D`RwG+g#MU4^E0v_a>VuHkvtl_FOT7ayk>FzckX0JHa9EQjRIx&n znlmB3ju+wc&?49n5Ld|s2tIdY;8#i zzR+UYk}$a*^?YdQ1p=L69Jlr0DimJ3d2h$iMBmN>*S@-kG(uSJr92|#CzX@eaAa}S zVqQAT6>o5Xx}58zv+ZoEkxjRDd{ zPoGQ;?LWGqZ{*bZD>{&LI_1kK(W}82`rRfLKZZND#H9j)la-c}jVqB26J{bE3|FnL z+Gc9?{bR@bcJ4cT?9BZ9JkKyDkLB5g53dI@6g!iZnXYH`2f;es@&Zg^Y%(+VaTFK- z)&0tP8?6|YER=8N@60Xa5kmN;TKGu3sSL9ewQm*EiX{flw0SWhN?+=D+3;~gr2a~vI1#z1^VBPi{R|3R`w;-(4 zf=x7dmY1OMQ^@`-%s3TYkR-{%Em$d&Kxer6fKf-FhLB?$n#=LR^M!}{Kmrm@1Ljmk z`xrE`dE(HF=)K~I9^$v2<@_e3Ry9k94gFbLH71W6m#^L4ynX+Uk;!}db(8vq?)m}* z21I;j22z5|n1<{|%HvD;^)1wFkY%Z!M&igEK6ZF2v>fNDvzPmJ9oRWI`lP7ZQo&Xt z;Q>YvtxOnK%u=wLmP;dq4vHdGSHRR~j8zorl)-G3OI`SEY3UR_#ydqqq4_gA*m&BrTeht9MbZ3U_fQRc(OX$mE4g>Gpp zsepO|k^zdsT0tqQ=PZ0JW_W=~XW6)dAPb=dO53t38WN%zKKQ3%)2J_H|?LlnAtaea{ab_V@FTb8qG|_6*Wso7oR~CSD5`N&&IsL z;Q9*A<-L$vz!EB7Uiz`s%gre%&i_7m^v$ll6WewkICb{Qg8Cv&Xp#qmUllNrL<3TY zOvd6WFE7ZHdU_~pTxBbmV3GC6>Sf@kEH4rz+)@p3%F2)} zZhAEvxw?Wt5MSN^vpZ3#m<|~*=euL@#L5+()jzJ?xVLrZ=(b&Bm#-I(*&EjN>+$U} zt%Mfr;4!Dn*(JuxkSQ^{w@JcW^-mL^9&gGb;!3G*1*+Lp;>9iZ12<=@`})9WKL2M)PGb9WY|iA~KAbCMK=u6mOht&#Q|l-_CS@f3Wt> z@|h1-H-5dk`R`Y^{&Y?IFE%uOy=rRUWV5-T;4gIChmAqWLMsz=M~=s*B>xnzOlb@g znb^~U>9dPpT>p-0nl41gb9bB=LG>P50_-m?LE-5a%EZ*yrd+c_H_vdVu)^jYY@P5Mat*gj@*tTVCvLkEATlS&MpssO=G;9;l(pL4|rk7BvwFT{jHWk|LIC8ds!* zn*I6+XWPhL`OZe)LO7u6%u>`5pb7KqfM*i%exPvV6Q**u3G zQIg>SDL#s)L--O4I%(|`Z$!U&>tWyS(Jea#Fe8Nwg<-E6Aa}!5T59}G;Gcxh*_fJ)z#djRXXpSV^ ztfd<5=LyLYwB@Z2WXsOR<+fO$BVtxJJuWkS3y1Bnv-xxYK-|m(k zJ^@eF5Uy!_l=A>&qbYXB!NH;!Gvr4ijrEww9^!Wm5b}7`&@CGGRI#yK*UaW{i6d8=8M zC*{QK()cK$0h_=|fLSBNNw@PTY}jX%m?2zfEo&=UD8BYFGh3fL{>A$K{X++iJ^bcr zKCH7)T+B}>6Ot{_3V~RHyULH6yKWCQXc8Z;6R>&h541jGivFUqC%8rHWkv~jmZj5C zw_SgA`@!y!$z4MeC(c}Kwc755FY-OtVnTrx=!BJKNO?wNyy`{S3wXHEkb>0230-`2 z)mOrb$7Ql?*V)$J?`f_aou9bct+k!irR4|f7(YgXT$WNYevrKy2c8S6k}SLup2_}% z44235OV}TY%XZ=%!%3*eD_G``Jn8F1{s2%8QZhL*c!5CEkp<35EZW=_u_p~$%@8Z* zvR5|*bIfYlOh!=L%mitRN(nhBA|07moa}OA1d%4ZzTj9FJrLuZ41sJt{Dvj(EU#{T z$s|eg;L$0*zl=Hf=v}^33ICdtQ0Y^4sR1GUmAj*#@M)+FD)$A_^y0%MVRq zB55g-0%vVhpouM6>}x31-#p%qPMjRrGqGcE{N97F&4WHYxJPc$A=Qc``LR0VbRWP{ zd3l%q#>8g*mdUwp^5FUWR3p(?L59f^ATAGm)T~cNcG7YsVEliJIZjL(5-z;^0rGk# z_3NdXm04v;1fcL?k8}N2<}|MKWV?ui)E6Tru2-weQr}x~YDVit$X@BXkP1VG1lnY@q^htPG*MTERq$&WpGI<;@~ z#QLqnd-ff^`{0|jc=cqb!@szMD3o$a=;zilq#xf8#^Wf@Cb;YXs2I)zek4nM0Yax| z>!;!yXK8lp&ZC{fhx>LNJaYU@z22y@XhgpTtVdiDDKmh#n3$nM_K6BPno|lpDT(X4 z3m@fNLQ^Fo$il1OOtI(~L4sV8+7AmYibXTyWwN}#W}2jtn7B;AE&zm^Mp6_(tFp9l zmKTH1Ve|yRau7-8Vv>dc-n7}h={RrSe~oYhx1Qz62nGNCiPhnI#mV zl#-l;Co0^$OT=gnrW`oBeUwrs?ubc&Qixu7)CdYkC%1mGfJqQx1qM_Q3_BP~!}(x{ zkq>(y*l=4PRP}&(x>)46B9#Sk8E}ce1Q3Hj`9_&?rH%mLDhF*48+p+yI?WW>w{ zZxVX-N|L1J#VzTbdylsdPj2krw}1SzXD?>*F$*2@VtDY(3X~6|jaMieSCF-pZAnJ* zWP?o53%eOZ+&n8%M;2rQo$_2{Qe4T;e|-1-)X3LdBz>6zNZr)M|sIM6>hdhO=@G}BwK z`mghuDR9Ene|aGv=@CB!<}W?_o_yZyJnG?2TX0o#UNs@Np@Y?ZF16BYcDZRidW;o)a7d(p$g`i6WjyzJS9LNgd zbqVa0d2*&?q1-SxusX%}y9Nd)HxKL|KYq5+Z0l++ngFf|Hg3iFO~tfDP}a@RNs zWX!E-roPmqB9}cTv6Lt14$Hubh4e_i!&S4~7=b4!Qz}NsK&(;T{Q+RTA>m2B*k3f91bnkbwjtA# z!q8rA%gYCa#Os@G2^;v71SAJdyjVR zJDLZT-TRL``c~aroD{D#_FQ?Ti$lEpu>_d7f>XAtO)>@GIRtMOtHv$Z#M~Q}npZu4 z|8#2j(6JrElX*XX>E?X#iQr%g=tvFw7c{u?l8Z0V1dXOfi!DW4SQIHwv$NaSSm28z zf(wX_-O1PwN2DDk05jUnC#;zc7;udw4m)+zE8Cq@|T za$0Y1I6vA+^sTd9?IgeZ?#b|>;ltN&J}5o|mcg<9r39ig zNzIN4d5rWk5k*nH zsL*ol`t6-V<2#2Z_KY0KE50I(bm2|ehExzIE3RIWA+nt;PLD|Bv&g1dAjx6^N(fO% zw(Qx2ZrQ~pAt!?@NmWxw*{2}6$q8Ks97dQO8c|YDHDqIl<22fsh*HgO_F$O;sH)Rb zYF+X1y)<4HQoW+>(5KC-b$oY$iiS+EH{WGPOLH8ATtddat;DC+YvJg!SQVgfV)Mb` zQb8vtv{tVl{_O1fzI~r;KQM9ZbWJ^yk?GF>CP@NsEw18K3?pLgl0sehafPa}x@N1G}35Ayv!H8&pPPtmy zA=wlAVKvril4LS2IwG}c1NCPuJHIjJx@^|=n% zv!#c`OCK0D0m=|pUTGlgcz=WqV$|F;gAH&dR@98RDN}^i+&qky9*_q252KI04-@9+@xc(w!xA;)4*_5CJ z2*wx5u_}_yymvAq9fA_n!!HS`)`qz`VuK4UslCvmt2tGe%r7jQI&-mq&*=8SiT$G| zzWMfvHc(dcAt8DMXV$BSHml0@5REbAnA8x*?hiPH;={r2#9M9ihm{6Tv(O?FGjRa% zFJbJ`fP`xjmav?m)k%ZnLJ$H!Pd{{&tOkW36D30ukt7-F=mV%T452bcD&!b13^c8b zU^U6wgXH?*POl_M$s}xTz`&B+pu{-0pH@-h4DaT)ru^qjt?}8JFE{TvxM^VD;Gtvp zzkZT4v9PevHPs5hikwpE@PLTR^U$+oDQ1Y03U|^ibxR;hYf;r*PIYleb3+c)KsM!= z5|I92K&v%({M3bkJ>%Q=jPD;i{`l+fQ*%3nNc;%Leo0-NNTX&MW<+wD ze)a~nzyJ>(m&jw|N`Qr)nn-i3l8`jc3#!M~LkO3AgWOn*o=+~n8k-+{@nYuK=NC5b z9Njc*uuX@5rq*251Sn)l)$Le7e%FPUGQa& zcvZf1@-dBO>*VQ6JBKIxcaQEHJ#qKm*ZO+{>Y3B7V>e2uWM|)K?2`>VY_TXOq%zhR zJqTwdr7S{s5r9Oki(rb$cb#b2lRN}pn_RkPA+oeEHU`91dBuaEhIj3V@Lwjz0BICA z+FRd-h`D_}Nc(9r|SFp}_;k?iSw|?i7`ZdGgOZ1(_zS(41NkoiW~}RK~O= zsZ|8(F$^+hOC2Biq`1Nn?dZyQc>apWeJ{Y}@Y9y<;aH zeEofXyaQf9;@&P<#ud&>_%#+uBsj@LO=t;Jl@lLZ2?-bTB{aOCBnBd_90T~$?|M%2 zn0)!#t&xMrc8pBy9GN_E>eADx87&X^+RjBZ!bqGxj~4<&nib<6qo|mTW;{tfY;Bdv zK?RaBam|QiU?9xVUbf&uPMjSZ9}%P(td4TA^1h#MK0Io8NlH3IA%Ue@mK!42bG|+n z#MWXPOG!_I0dxF14e`6EMIE4-KZOhBm#i8+S?HhYM&UfGzI*S{(4pg-ca07VO^h8q z^X-$V;&`{?_P&h6mJ2&gXZcTlhc-|_lr*u@;NLsx@1p5W?{P~I14PHjP=K5>vgCA* z88=K*sHXP1UP(n>_T9MsaPOhxeY?i`c8-o7K6UTG*K_mpX}M?CVK*6(v>B%4+&@Yw zE7EFf#>iiWSvke?MQ3>BJz*NW9WyQ&fW=?HVcsDSreX^`_6%o5W50pyr!|Ct6#EDk zNQ4m%G8`!-F%_Fnu!Ag=dSnb7X01PZ9kFMwgG%uwkA9H3evOib7O9)pqnzVp3&w*k zRKSCP3?Ev^5^Ro9{Llbv_15_>Z|oR3+_!sd*WM#1&we>G+sKNbf<8}`ny)Y>@SU)Z z2j(&bCBctKOu^xtI_OJ$A%eB-f$+Y58n`3bsy8d?5!bRNAZ(q;{ER-zo5a-PKiPxF z-;EwVIk0D}Z~K9rL*o}NfAwN|CJ*dsSr4LTO=%Q=xwzsF@I}FjNNU9KiLw>Y`D0#Y zvz;#H3LAiKjHmEk5X-3+so#5KkdG@Mq{a6xVDN(nWeag^F#_#5u9O%B$kKq+_inKE z0;j4l0bZ^@=_yet!j)BQBN*x@Qps$!o?8VwZIA1$z_=I%o@*Lb~m_&aHco z$B&-bIW)0#*TJ15hd(=g>6`DLHCyeZlwk2HOVwR;frcu1PsfYPbb65n6uqB+mDvU3 z*BmHmN66JRA?L^+lvgroVcSZ{-k0FcqFAKHijG^4yaiSa6)|Z<2cQ-F3EK zR={;QIATa{kD*+#rM1VrWK^!t*-_g_OuTR&D8V&~kZ35gOX8M+lp*HPmE8xoy@qpYQQrb}8fmVF1^r6>EPFmx zyKwpD-qGXzd&alz8r?T~{LJ~Q-+cF^UT<`|oz&JYg;s*pT9W}r=VNHrA1MJ6|YpnYm8K0W}F)%pVw`X+t;L)R>eR2EV<2?SWFB}6JyzEVsZN{8K(O$Bo@|;)tVP0%T ziEh{_LCO^pM_{iFSRE$Fw*aXiiek>3NvBwrXk7+^Z>-rnV9Y<=k6wc|OPi07JkJc> ziNs(SS7iNvh`Y;sZeii^ z*WaJLcy;fgWBq$Z`*)A-**iIL^wjOU52s$twpwld9#9ux%(XRmySLZ6WiLZnr~F}$ zgI|)MyA=~e7&#Ye4raUzQE=1DU>f}kmOA+K6il#vQLd$|TBj24tH zTW+(%^3I?K&w6XbZX|# zgReh7cX{{0W9tU?t=&4Zp>J>h(D<>>FFgA8>4JLEeYRjeNd;Gk=<$hv@xrv=jrpJu zjVso53-=lOaRoOhAqlYqf+18VE}lGy*$mKH@nPqOD!N=dF!A}GeMhzrkM9^7A3k{O z$cb~8uHAY%HQmfrI-eJp9a2td8dcE7E428=c)3XlX$92?sV-io{ZMfJKWYD+iI>oE zTNf{dI%AA~`_NtO_&Hun^*xpuA5d@(!w@aykRU;Juh{PVuS zi46n$Hg4a)ZTINlfuo z^y&D~Qzy?{I)C}by@%hvn6B08&3dENXtwH&cK)}~oXdND#P%BKjeHF3P1T#ax7vA0 zl>cqE=UQc-&wD%XbMvh^^_TBfXP9a zYc`8sOf(Q$O(iAW3kejWXsRDA)thbD3*ofXtd2EsV zfCdFtky@y)#Nt!ZXgQ3qbJEs8<{Zrk+FaRNd2j39MD&*fjP%?o(k%@o93KVfg+|PH zB1|LR7VPb!g8^7{r2tFr8cv%>JFC$xD zdQ@@kQg@A3s}N?%V@anrLSOaJ=G)ZF6g|KjG|C@M-D`E_7Rs|F@ulvXjdt!*W@qYC zQ#0Q`ox1zrn^WhnjvhNZbm(|qlx*8GHZU}?V|a4#;L*uX&s@HG>-%TZ^9yRJwlqRq_KA3XXtFJC4;Ju|fL@b*1pTectAvi)G+uF)OChj;HgHhk## z-m%XPPJVvq@agfRXD3dapFDnk;`q7oPxF2@|2vlVW2%oI(+5?bQ2mR^<7Gd5{QQv< zrhiuU!=N8=KQ6$2_{0}QKUZ}1I}e0;pZL`E$)ZnaTse6s&L2KefGW_b---a$^;`-*b#*|MUyR`?0gSkLCTS>Z3=`>!mOM?rLwy7&>r<<&q94)n zKcfIT?v!lDK1I-=KpbQ}zF3la^%V=y8hp7D3v<;l&y7JLdmSj~+_(~HsURb5AiX25 zA3B2nc^Diij8GG%mdw$!2PZxsKJe+z;mLu)@jQy;fBW`~_wO0c!^y~@6DLkz{_58K zZ@zz)Cw8fRW~F@17Yr$GcM&)|A*i_MVxN-D*)=@T zx9iZ>od-7$9N64{VB@y^8~gWf*fz3Z>&W`8BkQ*5zIXlBz3aEBzQOjsy&L=XZS3E> zsc+w={(YMU_H7>6U-s>|n}eJB_irxxCe`mmzyCrlc8m_}9^E-Ov3q!8aNpt4Bd1QCyL$Qhott+be*5Hk zdw!wxX-U#0IhFUZBcG3{zhxgkdP*NBU7b2y^y0^a`ccqn=jv0%!HFYhCXSYUQuPvP@gx7| z*-3MJ0(Uh)^QHUIyxUo);rQ{QPx!r*o}!28ni1Mdnw2h&sjkFz6o~HAv$`v3o3j&I zafPNFy2;PS4l{i`?*`pO-jAM|R9&fK;+Q9a0<}`#r)P|yG*T!-Af=*Dn!ko-*ELhN zBdaiKn$Q(h-U}@Q;M$^vVmbt zKbrs5GFM_hJ6Ux2=F+AjZIV$mQz?z`-SQ! zzBsD7BK~mR3(6-Eoo6TUq9}i8tH6Eyh_V@Hx25&w3MzW>L$Ak@uw!SA96NLTza?%lW1b@^5O1pB94)}rh;yx;!2a0EkUsR z1n0#|od|MKD5N@6{(3EWzp;TusE~oKzFp2?|>;Es8lh=-Fd94nT1ZX z)t;?2W@hWNvkmpb^jY&a@AX=sV=wF8?{D5{jKN6^(pnEMth@HQ)6ZgoY`7) zM)i8$r)TqCE4u#OP+cRf=e<5#)4iOliK*3^w$IieWCdKaPz+OjHq@Jj*}Cp_BEYDR zn_h27y;k;u>zevItGYQJrN@CPCYG!f&>E&2se$X3lHg))oieKp!>O;d zE7j}MGxZtWHNaV5QChHGuQhzDF8i$O#$f7oBWJUStWLo&&T_oY8O#h`o*H1iX0LzX z>uSYC4sfAViE9>;T?0~uc1~^Hsjw3 zR|^pmvd~>7VdyCHiO|6VV77vB^RD2fR4Kkn+y*JK3m=JuwYn>K*=BBQ0rIn|A|fT5 z=bqI#@1p;QC6lG-0xzR2`Oy-;QB#R+vIH*|cq@^2HOv}fZqbU~^rJ87CWzm}F%dB1 z4F59Xgf}jCz}0vppR9B{)B#rUij+gkO2RJLmv2D$cB_rlD+$~2)uAA7_I?A^_5HYs z@lDRg&0r(~_8?eBVa_~8SvvjNQkRopks{0N!UqGy?%p8^pC9OYx4eVjT^R@m$_?n^ zDdgz|b__XEkts__*Ac@Hs|=8Zkc7p8x@$a~w0Jd7MefZ0HIku!M4%t)MUspgUxxoEdiAK>oG7FiBU6~=+_GJ3M~#Iv!Ra{X#=)ymOO(7yqD}?0}hRafPK4V#_Xwa z_Xk&j40nUPpkDr50sy%X0wcJgML>@pWx;U;2N(&0CksKQZ2BTMpHMMYhjae_A2nO9 zEoR~mn&`NdCEVlpGU)6bkMT_fkUxRye6fgs@RoqTDWH>oXlqdzsz}KjADQt|%JYq;_xEW!qrqS_P%<<8pLug@CV{oIfg06?Y;sm zoe+VRN=J>^=b)mkZs?x=U*_!%>RjJP=fc227XP5A=lZZxbRi>`6u$!i`2t&#}PgKIS16f7j58okUl(mi&J=OYl0huP&;&?g zJh5fZ7)+paknF#l2-YLJED>`&Ap%=zCMtl)$07%NZ`6yq0iIiw$il~YJM<0J$lq9C z;%<=wp{4xV6)^*}`C^U}@*-;x$WT}j9>J+48RYI8t3^m6=eLd@e$zR@e7bxORFH6pcoNNZWc*q8ORi4ut}84tHuo}BZ|%s!dSStD5H*(gw|}( zeps4Q7mKL<^tj(<0}sg9T$B*>QsQt*M4nV2I!1?e$ZlDnd)S{1K0XIpNp)QUsNcy zbS4_EBqXPR!?x34U_Da^EK_Ml6h<5tHaTE>z_*bWCCQVf++iBawTSHn=s*l)zAAxu z+!P6~PZCF}rpS*vk)_AWmgt9_DI|u`g@XnIaL|TX_IVIk92PE3uPs}UH|LpA{+QSz z%-ciA%y zBkP9u4PNs?3&9MGjL;Ba+&2%8Yfc`VMTO!DLXDOO%Ppfs)}e$&R~ktIw*ojeVO&XA z+l5|&6Ln9`H-2^qG)OzRf_e8qNQQs|Zz6QAMRnn`X<|wwsIbdWGJ|Lfh`~t$G?LD7 zlLUA!iLuc@7|0uBjNZ})c(N&(R-YV&U|5>5O16%UV}gw?#vP>a^IyP>i+?5#JvA>K zS0G`SZO0hTu*1Rnk!k{~WH$`%@Yx{Ej61My#wmwHQKtWK#Hkg3_yYNL6as|@SYeor5Opq=0+g?LDYgY;9({f62?&_?Pl47 zbgAM{;deNZSe@Xr{M^<;aAU9oqt3l_Fd$0>q+%9Wc?B~znw2hQ?V^PRy_2B~M*XP4 z!$AU5y#?|t;h$Fr7&&5eRZWOzgJm!s>8T-5P!25BQXq|00?;b>tdNuZ5)2OU?Aam) zUdSDM&(d;0#%to4!jh3W!yPN6xJ9#PV{wI2V+Un+V=!P4wqi3zDWOAKV~_?^9jb-U!vFK>+j=jVHWAalqy zQk;7WED*AF4A99Yu8VQSH&=0wC1O9gAQM(PG+oZeg_VK?M40u`QvxpG*SaJG5Ie&t z@OlK)(Lo@nvK%^HdTEs*1L~28!qG(1Pt6W{2_4Le86;|O5wemLWF>R%AiL583Bc$Z z#3@dANbGDlUjlPJs`6mtl!6D~RU68p>BLAQw$2hKO(aetpb6g4(Oy57;lhTOjXmhg zKqMn!hS9;kpJB-`mtb=jA3c3V#8IE8;Epq0+a$0 zZ;f0*PgjGVeG*Y4+}wJC<-b3V+r0A@4ai)QH1rrECY68hBr4Ng8ZOX5fWrZP;7OQ9 zrG!9p76w$#WltqZVxHwYAIv;Sfr+qLi7jFoM;bCv!>qRk(ojJI(kad(_`Gwg3>;)z z#ta}4mlHT7lVzTvictg?FT+Fx< zzjrn;#tnspA!=NCKsOd}TatQf(u*i$`@>2FhYf#&oD*0eqEy$hXuj?sC|i4tD^?BO z;$$NS@o{n!-Bz_Kj#A~S5FxJka`WRQM`gqzN~@H|$Oe8KSE7c_8U~51Q5gy_75J!==g6U@OBEZX1B@=&*%{9G}0<5%b_ZFEMu8qJr>4g7vr~amBI55+BwY zo=|!hc2vS(XCNoVju{Yhh#izQ@!k{>$Z?T*oQ8PB_QP_A6G!87!Sp4>)B7l}r{;)2 zw?r_eQH2wMJ?S{`j6zgEd3qF4%&O?xt4P0@;IFsnEd4u4i3*Y50VAqytO?S9s)w`4 z@(3r1bRxG&1=#3iqoa!4;9g%aD`zw!hkVEpl?Fr|Xc;ww&=|@$H&z?~7lk-601cjn zq>5^R5=c0JLGe1v)yX2fKouizaZQSOd@i3*`w#1=N@^%Y-^%nOIRE`Kcohwglam1~MkQX@(@isgrPJ>5wifK@%;(#W{@Zkd%NqA#(N| zh2S&DuPZrqt%wCt%Gp+QaM&pIP>B*BOMspT76>i1w#H|^m^?movE>U3K`IUcy!efk zCn_SLdj;{&Cr|n(m69VgVn32+^dJJS6RSKd>IiKzG&hyhwchJ$syH}-zEHhR7$+Wg zky!9Z7CUkUC`vGjL%IVUdRJ)sCQh?jGr&879oZCl!)kIO4(l7QAF0u|i6;A1eSauEe2*g9<+D_>xEp zrsuppK!DOFNd@|u0o7Jw3=Ivy5;S_W@-8b~Ck9;gHD3<)va-^hyM3{gfhze!IK+a( zblWQ~^7kTLa^bRzl3htaP!ez@$HGHYonYPibh-^;p3gur8+7^xenhw$4xPd+dB}^1 zE1D;I#4}5s-;TuTC}K$h zQSxYUwTQ-1UPb2on4Y|5Me-~Tg3Z2wF@!EqJYm&_YZW-;4C|EV3m~?QHmtP zf3+6Dg4QKc9~{LpUWNXi21HSV#b3GMLXEO+^oyQ2B3oY8r)8X}U}$DZ3Cxm(>_Dh^_RN+B#uLOb+tfd%E{hR=%x-6_S{kR9Fwz#*|X(D>gwB#uo$~H%Pgdt1?&^vRwQU1jDb+MNiB^ z+Srkp)yR#EJ{VolK$}Lk=4Ve?N-T8|EB0jS+;9hGpJ}6 zP(llVBIE=V-W;Md1L2Ut9`1;6xVS_YuA z<>~yaG^AE{*3Uw5T*;gtPg$KPTVV0GcrAbr;$x#ySIKW}=4aVP#6H9z_=PL>C?d%dxM;@M z3L#8i6w%5ciX}Rj(I(bDyIvM&X3;4`EQ?MGv0>;shD+!%Jw9;(Q*mAw11x1Gm^zU) zaNR{*k@8cIU_3u{K?S|@wL)VdV^K!(BgCD6lZOzM5$EL>T`WhIVnv#J5h>skr;2!c zCqQ!*j~Vx*+%o3HC=@r;N%R<6C@=wngo3T)m{~>wy~UL(1Y>|n;_exsbaE5T>G&;M zRa&KbB@-kdi?P>wg%u#=jwhgkAuZavq}6A$x|fP5x)JFah|uMhco-@G7~D84{Pl~> zA>bkkl|Tt$Njw%ovoW-S0OjSIT$A)lfcx;!P*Ui5k&MSJ$Ow?^6vf7s0JMq+MF^bP z`SoH?(5wa{V*roR9Z+Z@ZxW(&sko?qsHbEcz$$rhbc4x@D@0EXXNt@{Z-6A0PB@vVM6t&GAmq^b>zcSw ziD`TvlL;LB(nyR!G6`Ph9IxM~Rr_%zE!_bMw@8;Hvxh`ECVNTQ1Va%k;vV9Pu#X3r zK{N;04(7Q5HVGE#$(WQI!4C*De*?-Z7c8?;ne)OI8Wo-H!Xq_2YE@!Pw@z)E~KHZcO_=-J}5?$ADBoq|H=O7C=+(Iz=e@h^nRgA`` z1`-sFD{0J_L=k8jnb2a@<5;tyUL+~&fh4I_5my9Y?-9g+?qw`8=D4Hb$&=Qyv{d}= z4G7^C>sAhL%v=*GIR(zb3p_pzy;TAk*BoYt2GPTQ9E{`&aXAZ(A(H08G9!}8{2hxQ zpk9*6AY#PDE^A#0c7i^eye{AX77HP!g3;RfjsOyPg6jghxzeNy)~bj+8dr$1Re|Oo zw78p83(my!V48I0KvkJ zvchU4K%b>508mCIr;wiOtVnaTk+e&MW>+YTD}*2}ZDe4wj7X}FH7Qy|2m9v;8NB;3 zl!xL9!IF3#42v>I@%uhR5EO6WEDf@Ck?@Rwq=Gg2cWro-K;b}kATJfm-^Da&&M_=D zh*HlJy-yNn?*%MZ!4SMl%F_UCuTP)wjt`hKAKs%av;PM`%B>aGVadY5;J(+CQBr&2 zH{4KI5gHlqn*v-L5%E%CM^cw41VkQJ``3>Vi+D7#WzVYf$o7s){6he!_HCof|`2);W^j?|!=W659$!}6yd01`&> zo0wGX6uxn%q+Ae^o%lH?=e5`?j-v56GjkPCxGrHTfszbtavmad9z!J2C2#S1gd1YmB7m$N>F}?2x?T>1Vi!q^6?G!+cSf$1cv7Zd6&g z`HPSU3Xw#Xrq{>~2w9nS$X=os2C3?U^;T$!GDA6wz%~;jE~P^9D2YITz=#!Pe89u_ zuo8VIWrquHH?pbVBlH-oA|-wq`i{l&;n576&HW>InVC$F7c|<-RpZyFB>___ki;Og zDLmr}C9q4d-pXv${&~#B=Y}~(gbg$}K#IMrLu7&Yv!vtHe%Z4@$N>gX zgGm;FDdkoeFZ63+BV#=R)fznL?eCYsGlbn=P((^RRRAk587Lz2t*6ZFFtDjH15GNk z>}fY3xPx%_l4PbRcCHAJvV>H&H=aQQSe9W|U*W>O+0RNHI@IGbaHJW^mta;aWbV

    O@~s?y25b6v4k1#`&`VF7^NgfRl$j~ITlN>=iNl$ zNJ?4CL&mY4nJ70lIgn_JMPkqmDKrRiF@{S<5asN9TyV9Hk`#}65Lbw_L}oI`0ws?~ zmdSmHq$DrHR<%TImg-<0Cy|GRfkAmdBnDY5(E*k0kK=_vux>iapd=YLm<;!pt5gZS z4E+eZwGDtG?pdt*^uJPM&?RhBptIaY>1XLg(7;|w4|b9!sbDh*i(hMop|KqRQTO%iR5Rs$f3Lta8!&xn-7z&ms180#Q(V*CZmmkpmbJXu6RSC3J z@#B>^f^=4Eae(Bc4?II!s~D4l2yqEzYpI2o{iSi#^C^ z5PEn(^(+4wk_LEBzO+JOp+ftuvYVLZCOQrEYyl*eK>buyylO6Wt)R;oJcv=sO2h$j zE|wxeiKqqJXVSM`V<7}ZhB*fp-hk@a;>%g#0d^4@YUF(nXK1B?RL~~zSR8UJ=75fP z2~;pqs)Widsgm;n1}cJ$E0Gfzp&wdcuY6JZ5hWBc?+v6vM-VluI7%~H81=%JwAQ42 z1?r7)9kwD5`LkX^FDif&veZhF^}v{WF>%GPm3jf7T&E}_gt$uao1Uo9qB{sJa8`gO za#M{MSA3~sf;?eiE}?oVH{TX}jw`-Nk%SvkjdMu`2rCR90ui;8ro}>nSfR5MIV_@i zBX1zk%+3R}BN^Bu0zx!5CEX6FO9y~+Exg|X;Ccla<~4vWo*W2? zqJ_ymlH#M|y@92Tx>QC}DRL1Kq=+6%#R-mC5%O%uqR!7lF_vq3jZ z8-kFPOIB9{5hoIDKAmJ4ps{o>3IXAq44lg`g&csmB$;OOFS`HCV+qPRq@AGFsY`oK-Im)k^TgBeLCi2re{2<}J-HZuNj3Kipzy*~)C(~F=2E6xcaW(hnH zDe&V31<^qkst`{aH7bF-gqrhjn~^{gQ$Wlj z)-#{@jBh>;W`4j+M&Y4nCVY{S!7#cYqPRpJ6f{yMMdEA4#zd50?#qg+GBVk{Mw6|@ z4gf=ubY8aX005i2bry80VhR zl^{ZvfY?&bTS}5rij)kkwNik=C6c9Oj3;B3^kiWeTn|PcZBf)xI?O4}S!*JDB9Y)2 z;mkysnX#J*i)|q?DzD{05krTPO9es3=|N7+6o`kB#Fm(5DfUWCRcNUA5l3dwn0!eRxuuy;h5=bo7?P<)(rn3_xmrq^Sb=7?28og{%D;*<1n|0` zM(dQ977QdA%}>281qlWuhXg5l_J{5)gZ9~e=NwY1S&ox5M5@6DkGL*OVY+lmP(8C{ zXM}F_#zF$pkZ+HqE7tzQ{4fLrHO|{0bC$KA)EggAv{fAMr9&CN@6xsW+`o`m;En>= zvf``>;nQF%y>}9^9UFs(2L(#9Bu*T@LFj)0TQPhmU0@^$91l110ig1aIqPqBR_+A| zPUeaC12MvJ;YarnYOMQIphTJu$q;M?O?S%-Kz4bJJ%wF?h?)}(83RQT?Go7xvrNN2 zg}eHaV68!v5IJ>ENI?{=ypO2Cho6ch^{i$eV<&p_HbxXYya zM4}_T2sY9>fUs)qUqO2Roq)$%rvv(bf9yY~X8+Y%SV!gAPQUJ8%x3kjXiGTNj{_7P22OG*+%Q> zRPFxbCpYhYo%dV!zPWWb?~iZZd35v6!yC7Ce~|aDZmE9#mitluzOA|%laDX^Bhw$^ z&K$p~``xnZgJ0cwaQ(LG*KXavc2o7MH|`Z({kWF*n`OU#>wZZ9#fAIrhhGKz^|C9b zuBpHGuNxjwS8{l0KrCj~eM9a2KzHyJ`(;;T7t;8ukcOhIl!oaybuUGs zq+tXi$;7d2nDU6Z2Rft>b~sUKf3c zP`TQi9%76+{Zzj^4L9$(egk&LuVWTSDX4KJUIL^9brYF4upf5>Y5^a)Z_J=vr*3)P z1~z#Ua9R+rP3Rh4T!30pP*@;_gZgs}i6CaGY{) z+Zb?@u%o=&ye?K}s_{c=`1Y3H7y zTP}U6RO=N}+)f&|iK!t5gGE^@Mfbr_)RKTL@)~k*`y19MdTOVW)En(P55D>Q{8tAi z&g|TKY|GBE&D#%rvg6>E9fv;2e{A2sd0=1OH}&r=dj4bIM%DLj=-azK@7qS!nZ9=G z$XfV&%W%<0RNp$Rj^}^34zDGB%h1|SR9~a|pzE8hzGh4D8}xG6mZ3FUG^n9< z+lIY9v~KGVMp5+5L&ZefhgIK7dNDEY1)b}*j@Z7o{Oj>j_94^tM9{aC#ApUT-n^&m zn{?k@_Rac-J-%o4CN*qz-apwxg|K;W_2yDstDyju#1ylN_X6*_vKN$C5dq2-cUy|? zXdW`%9vN9*_Tlx4Bh}YJzCJ1GS#5g3WB%8YJ+ylBQ2tj7zd)U1)V8!Y|Dk^CzAe`K z${$9&Bbt~sKyhm|o!dro`0M*d++2lX#OuZ2LQ}S{HFjc5+FH~g?8a{Qs9yXoj{75_ zItKH;b_+OFo-GAyJ33Z!^8H zoVDAi!LM;58Z2ou)>1lz!r0c^u1N();Ib`n?IlXl>=#^*ls2Q78qsE;nJQe|%5L(HyrN{I`+j3@i9@KrS>03ZoM+y;H;-Ogjb`gNNJW=1a`%oz~Bl-Tpao2h7 z#>1LNjG}GVeQ7KfI&-k#}>pWJhr{V0iD}?b*X_eNdT} z>bZ?su6G?$z4%?6(m>2ecSJlsprk#fmsq*VoQ|}d)jH}gdTCnul!BxI)y;7w*om?a zmVz?tcLHf&b+x*kB@{s1x^Q;lR&>8J<}tf4DT4sT0N1yhZVk+gbfl_oD9MRbbSjdJ zo$RruGPynXR6~bd&ySd{$LFHxvwgSvJ204Q|HzKLM|SQ#vVHh)J|?%x!V4YBsX8?A z*_Ep|r>AFCbWtCIpgT+2$);vk$>i@Kl?PXB66(z>w=5Oo3O^o41#~H;yxJsPAQT`} zKsP@>f8)lz;X|Kp8rYw&?Ob_-2ab&$J#+Hxm9v*_p1*wi{H2>;jEZl>Oqhv-;r0>t9?@{jBZ|6qXDUJEi}e)tZ@Ai0kHsqC=sb*Z;h7 z>w@iHqOJ#g@udQC?lOZ>DIIW>>-6;bYp1`sddl|mS5GTl7rd0R&8;p6TcEh2vE0g! z6m%MTuHL%H_58S|^Sq|5n5D@366vdi^Ci#J1vB?Nu(b24m$LdogS~Xav&kEtHGcKQ zMJx8}V0Abf_#)a%0yJs>_98MKV-jU|V!vqZ1QF~E+qdV-KAVozi$9>-BA6)S7-8mvFvB_ z0hg6^UA%hx;?+CnuinlNes<={(UTVsO@2PO|LD%)i5)}Z`^S%8yK!%RZeIIOeC@*A zk{4`?4k)%Qu_2&RToG=9GvxGg!-xim(a}JeWzVN(kDffgW!Hf`^UdS)!O2s(0&d=Y z{OIdvPoK{|pKj#+>5JOasoIn0vrndG^B>P%)OCM8O?so~`giU5i<sh3{XO-;Z}r zUzkfe2qF^&Cbj1%XpygCqxUC~IBJfNm^0mf@saKrp8}f=Iy$VICU{{AEGilOjNHXJ z4V&Wg$X!d~XJa@9{R?AU+C-x_m-rp%r+Nx&jIS8yTDRE?3;^v`A$0FXeqm;rGH$;|4;YrXNj9>q^ z-#`1?H-Gi=zrA|z4}bj2_q|c==Js`%)!ri|z(yJ2`S^zAG({+hLEX#RCiv}un%P5clh z9XJ8#&v~P5LSySyu08aBffSJ%@kO5x3a2;?gnB!OZIYNUO})`rmpHGQEn`|a7itwe zrhocAoEe<2W@OUN#%Fw8@PSjGyBII)fcfZ01J!?`o?^=qkJ0@(N3jkd<2@c0yPEM~ zyooU>VvPuaV2)HaU=MRmB?^Sj^hVRcxEW5G(WDtqXRbM@YnB&|AkNx;<9C0!`{svt z-uUpnkG>cUC&6TinPa=K8Dkq7S~2v}0s>|`95Iki4l27?XWVaZSUnO~=zTMhT5gvr zK}ZQ%c-()V5{Lbt{-A#4?T>!(n>Su~>E6G6^u<3O3`W5yaX``^)x*hb=qMZ7pz_VV z8C!4Ez>B&+tb@>*x)=Bb*_y#9-N8LzP{I3E*5VDr-}u7c(*v7(J;jeg_on8vdcHHU zOK=Ccn{U3KHEUC9?uJ8oPdDDwu!k^^5w-N4QEYnP*uvAHW5Y&tgO4|Fva4sQx3$%# z#hZlwr%4ne(jTR1^6#kD@Yb(b_t>n#EHJ_jsOM+H`fRA?!hgYwj5suVTyfHajJAj z`Z70c+F_*7V-+uQru19ye)i0--gy4*y$?S5=Urd)G;CY7{= z(#^cH4I~{6?ip7INVHms^}=s$E?0|0z>j$c#1$KRicDWv18uE9|2CQz=0$)CP6`tT z<-u0i;i*J!tIseCXG8J+*=TAarNMzWX+(iCscjy30^Yj`m+A>B^NGfFImOm$$^~n# z22CZYPZ+heC`?itZLHsU5@>1t!hjPhaW67_Z3?kLXnl}Z!^+FRk!ucJCLU4T-(fY2 z8q%Peeg8xM?GL_q{>68H`J1=je*g1nz1VGc9$IMoOWJFeJD=KdC6DNvlAq3B(EtD? zeVF@8?Y%KeFmwP*{>^BDrR_g{(EH1)>yJPG`jPf z;|AN1gbruTHvSvHcLwnN_+kLMKQ1l4%$PWCdZ?QOXi=&$f2RkUonIvIeYjynmxd&l zmt{$bM%}qjx8gDd8h@usYTAGeO~|RVo|`^B5fpZ2F!iaCoIT5o7^dS-Gpj3ppY&h& zE%ltQ-n6R2-=vp$hv!VFkTkBkum46J6Ya|>o4!PrNWItxF%VSqb^oVlfj%%ViB>(q zMcFL4HlC$M?+Bz9Kh*Pu43-*#ViH^7S$qgRKs#=lh%XFt?FSj70m;Qx4XqFe6<+ey zAQ~kj0)CX30~#qXfKVL(y4YeI@Glp52AI4aXnqJ>?TEusWDMFB0mf{=_=-=EVm6%F z9w&R$1qI5c&X9^@Mu48}u$JuM| z{Nb69o&3q?Utg`(4p-KjE#FWH@Sx3wqjf2C;a|?>{H^TQxwEX>wPp6B^TICTCep2s zs~rCRkH;^(_`6@c@cPSdeek#cdOYy-^3sYUN)JSQNr!DyNpN9jt*BCQ-3tDasf+JR z?ZdN6HO+1^MK*$FdX1nlZ<2E*KImJb z|2Q-?cVki^h5E+GE+(RV?s(tO4aEo^9Xp!-Ew&d7ggjcQ+cViv0b-m66UQBTyu-p# zW;ON&%~T~KNY5ehyySn2XACxzFj*y?8b2*BJ)Bwj+%hLKO{nSk4tD^kwZPR-J|pA0 zPyd`Tmb2%gr+bTN#3YGe61^mI`nRm#TyPol0@`7Sl~zBTjUM$UUw`|5@4or*&u+i* zo0ot0U;q8siCT{>3{>{9RE!leFA4c}AV9pa{9w`q;SVXLHRpEFA>RU7*dN1j#l4=- z&)vo7^$Fki_1jS-aGXI;bBl%|PG6u5aLTSeNRP?WHHrWsc>;mLOC zLokMSi94flVP`k51;zMk^fOftjaAf$HO68{8q8FnLVq8LDIla@#g=3Thg-g4i89Hy zP&i83G0M|nu%Y9KhRJu)2(iwm#uPMyA5xzc1QsSyE(Gn{fj;2-W7Oyy-8b&n;#f$X zkA0@!;@9wrY4zbs1YKK9H!Pn4d8ai5BB2ELN~Th#Jfp3im!Z&R*cVvidM$fWHV`kqE#Q&^&z@unGMGr;MNuWJpwf&IZ#*y_9|P!{gDzo=97ql3r3?M@xzH*fD71ojbF(nYofux8l;0JR*`R@Nd z{Pj!kKKq-u-u>wQ>Zh^Bq1zq5s{aHVO17V?vfh;(k9 zb6L#LrA=@orvx)Ta)o-J=#SYD0ydPrNCRZfs1qnw<#L=ROC_5KZDu66DAPv4$2cn6 zC7kh!c@36DXnm^85#$-kEobz-*Qgkrc-*b`p@8-f)8svE}byY8#+aO?oU)EkVlYsu^y|cba72be7Gvr{c zUUR{l!cMx0EU%P;1RK~!Je0ztJ|_fVEih*N_YyOSLho9!bdJKhN{wIgQ<% zN={E<6O2yiMn3PHhD?Bh$OG%G&3hBnbGh`Gdam75!?6_onRI4KgD_%F;jTWdcg2%p zeGwa*uwCR3x-$~l8hE)GJTG-At)W7EG-NGOCVkj<;r_bsfBDtlfBD;Yo_XQ*FaP)r zZMC9p*Q8+fP=>oR#ENZE!VcbZiSH#Uylit8@=Q@J~`q6a$ zxBq+g%Dqp1di%BaKl*aDx{hM}Nc->&Fy5O(M_R8tl#rNUMZ?+g#`UbvQ z+OgLgz4-e3x9`09!KeT3=2g7gK8cbRG+RISK!Nx8H2yTnGBLxbs4 zBzCn^tEX11YNkSD4N7WZ%3wzYr%lg-7!O-cN=F`&zX)@U@m#bW`LtWQ39hCEr~kuQXRXxV=d1rvt)yKh-QN?Z;wrJM|p1 z^`<;cKtim7Qt8{|$^lqo+#nm!m$|1%Fl3i>ZkX0T3o3tTWA0%SN+K+m30zeg2)l%%NQQ;+%N32c8|Sc;D=ofBNqB-G94% z=dHhe_un2-qIieXl2pZFQ}Sm8EQJ}73wLd=m?;5f8koo*u+CX2Svjf*7#TOm<42$U zpPxSe>fP7h`|n3iJ}(Brij+$w;0JmVMwUd7^OS_qxYl!K`DfS;1JcVBuB7$mA3YVy zc={TwNw~ux_lgdge?~ZSa=V0lLCP;oui3Z~;$nwK6fDVesALYbjD+*3dmdU~KNM;& zesfG|NOCzPP+=kfTndHg1*b;5vy3DI97@{-CB<26Vs8ygCYD*?oO2A=sFV~#m3fwd zitwNcDJGmtS@?aFw0<*gA-*H5K;V$dU^Y`(VY^9G7Qhr3nDKU{P!n>Nz{z6{Tp%T- zjd4CiNnJ|-(1;#407eu+R}u(rJ}Iyallu_}qOhEHDUl%_b}6N%T%*Zj#uptW#LF#o zgm#?mYsU8IgqOJkRsKFL>Rz&3bA=Dm2Zj)MV;kL&g~rpxU;g&+`4@lplV7~}FyivJ6v%~mkODXCj_-5J(t4pq&1c=9_9S4xqud?F`)~~AQV#7(7tWm zErq+8d%@a&pn)Xmda%M7gYpnxpL?Z>$;u6lojF5{Jqm2W!+sZm&9z#C2vtig0VMA|Wnp7s&1>A{%bTnvZKVhTv+HYb4#~=zbwT%p^I)62|b+ zkt|~>r&Xax>|aTNUm1?#(8Y47gto*sT1iO?t>W00WljP=L^4K476^9=HD}=gt;XTq z23!bo2xm65;cQ5X8n6%xZU;DTfd1GkAqvdZhoMCBfDNa8VZtJ=#FC~gwo!4O5e5o$ zDaR60K1O4w|NE!E`Skvu zjz>E6%fuBXkxMm&;Y`U4fAGf|SExL{a+>kfFmI!XN|rZ7mVhq2g61)e>iv(u_{p;` zJ6w5iRymG2<8}iRxLQpB_Cj1y;!HIrSxSly3`Y;Y9`UKOZg=onH3{Kk;fIZw5pYX*numu31|_BJ_5P{^#t%p-5k`( z8Zj6{5j-nF?6wn|Dr&@O^13kX7{@r`?^9`}$a@*rMenPEmZ2J>+*HemjGDXb7|PHY zLmDAQadd)F`5qV4*-ddK?M|F)>50;aB3MGeOq?KQNVRc-KvvRG_!I=n2Y8Dzy^%2t zS?|QO%zz-|DYesQ$*IcJh8G{Fp+zGWIxr5;KmAaV$DiCk83E5j8LS#DA<{`~EK zKlAH1|JP4{{mJKlieZbLi7S?%7Gghvij61|S4h%lw`+q9_N2_s)dDB@b!!q$j3zE~N}k2PtUG z{>WRT0QW+iF%Ot!J7VLR2+6J*@LiwGvn0r9P8pykI<=Uvn2iWL&@!H<_hIbFmNLW5 zvKxe_5$)hK5Cg@5)uTr)Mt#$#AW8eMnOB$sOk2l5LcbkU*mFlxrgPz*^mO8ZZ0f`8 zOP88-+OT=Sw0^R^geyYg`j{Um15WplJ3sE$o zaDcJGO%@L}p{_9Ne2v;w25%^T_}YXl1~Q47k?kaC)6(LtVr_C~uYCR2e?0xd8~^KH zfBlEg{^PKZ8OA%pm2}vZovS6}e7gm~QUFfd7fA+9p+-N$74r-1tD@W_2OGeZm+!tF z{9u!rG%}QgMHvTcAaTEEvc#+bFz6_SA=O3CTQ1kg0|SaPICHQYv;uXoj!E{|2mQpb zk16&ip0t5|!^E(_(A?J#5zBG($q@T8RW~U(aYWha4s>Y5;{o?38xkK$9iQbNH$j@C zWSQfqaYYGGiDHiV9L^a1)iE&X6b;@<28V>iL(6u-GF%l&leB+uD2G#}wJMZ=%-}=H z)7Zyo6LU00-xT;~rk+avKDbN9wpKeED#*$A<+&P?j#43z%w%C>CsM~f4fs#wWHd~9 zeq+IIo53o>;5mhzk}1P}lDg#On%V@@mM1Bzo!0qE2S=Qkm%w%089tB8KRV(JyF|WI zIvxhU5WB%L1pr4Q9T-jG)144^f5|Kk_l{()EM9(y`ywq!A=~G`9&jkY zMiEzX-<-5pRD9*VkMIBFmoJC-%6R1C_RODH)Z9shA5D__=14i4U(Dwh?r$?ccYkLK z*DiT$7VaZx@sKz=I5NC$(&=H`Ca|qln#`9^7=Qf5z==70}{@l7aSbB7%%rgC*Fa6(1GmmUN zp2inSTLfHz;~)Hs$*c*Zh>cSq9>%AL5Gg-p2O#>hEbDW(MBT!892EjoIoXja3|Eo} zj;58n+hTd;+xgYfw^eEvt8-|}i}=x1`lf4(tNHRO_IYu>a;0EksKvKc*$Wq_q#Hsk#@FdI7sQ#pATW z1j{qvy%+TE=i#9=7B`zX1%VB&u+4mn63Mq&B-FVlnw!2*bHoG8*h5Q-*>E$Fa3y&K zgj#&&w?;1h{Ou0`SAPBb&;A$-G2&S)u`J^uE6~MczI;D7S@=Q6AkuFs>7QYY!X21)4Z9o$Dh z=5~8(yCjJCW9f^S`S)|=Eqx3{b7tpfvx zH*Tps9*%n{6O;#{6Q~R!%hM6c{baZGyd+F((vUFjm>p6VOS|rAB{{0NKDY&+Bqrz$ zqLI(XH>c1zad5rf?$Q9aiJi7E!@GUU1q_?Myxr`Vj{TZt;4YYD_T0$%Xs!jBetvP~ zX4pS;qn^Hn$jk4f@i+1tTX>!x$o~9b5}1O+X0ty( zznU~&vRAkOgXZM)r_od!5KcfjR&fX&DZdF^oj5%8gPo@(8Y~mO3ErQdyYn2lyo|Wc zRy{@an88X8=L9NFEep8vpMU$|7r%b;xs5kDWtwF$uo8__a*LQ zo^ks&l#)-)_HvzY$)!Z=+1o20eg3bvUw-k;_aFDi6>N%(7M~1ZNe)X9%ju|UmgkpX z*`3%KE&i1i<^Hi=@0{)8o-1^ON%Br`q;a6)qXFo-HVNgUJ+ZM_$C&d5~yKY_+rYX?-{xmY3@!JyQU|Kt8`-FN^n(&Dyv% z;<}n86`gkNLIdHmXXR+GRvTvk^_dHlHXa2V5m(>D(f{hY1l*@*y~33g5x1h}^NR#6 zEKo1J(7{r49k^Pp@yM+I0s4n7IG}ar3%Md$7>|WT(W|M?dZ_BfU;h5XFMspa|NHcB zKl%Jmpjne>pr;jtdHZrcT3=xH3O~EPP>a8lFr6G_(;0B({g3be^!Cdyz4^i8UceQp znIFs%Kky4U) z8e^i4=>+BVX4@>z&xYgV6Jv!;&`Id}aCv#nY1Y+^8(gj@^Tj#jB0{LVBBADeH4`UO zu5*D7xN>u*j6V%8uGbr@MtN&2Wur)#(d``fpE^z%EP-v27a?HR7*elYgvQ{(9BcejiXh>nOH`0Y4pau9AYUrJ;?fW>kQ z@s*$6e&yviKYY}i_$ z62JkrGx5h@wQ%ppC`1}AE-$0|u5DGfcWy6WaJMDj#cH*#CXElMvZ6_TgGF+_*UnP& zrcyq489$%8nC0bYJDxzU5hdWoK>DIzd0WlH>Iq{ssnY&*_xa-DD&_^C%W(vf-Sxo{ z=h~MP)IYR^Lg9%e@#22#fX!KBQD^7TCd3t|(L0qUTRz7Y>B-qXg>C^+4&Gt3g$?1} zBRxOAjHMIgHfK-&QNWdYe!kv#Yqfo$7kZRvY!nm-$oaH!MOxMF^>orK|N7m7+jri6D&fi@F0_5Y52m=3S8Or+ zCi|JRs8(D#P5IcDam5O&2&#*J1V5OwS6+VW!^eHXl|Eq!#af2R_KfL+{sa!EuWh2X zF6Sc;NgW~m%mS5T{^fW%rg2LvDhsq#aFn)6c(H!HZjl`aDRA;fkn_pnE%)~2>N=(y zjmFXI1zz=uw^!=L`F6Jh?{)FHdvM*JxF41qxr_75=m+zNGIcU8Da)=8&XfrrFzXH$ z7Zru>&ZpKNw)?}zw|x{Zp}D6=Z-dP6PVudat5wRb7mt2&Z>_oJ7v1M_q@q6ou7@GRCS-uaq;$w>xNq$Wbnv1S*t`k zl0?T18hJm1UNxzgn4$*0P%n;rIMP+s(Fa&h4!NDydKI z#B{jw&EFq9cjw+yPv8CQ{?`W{&ar|k>4_j5gicmiLHW3DnNqA6jB!9`(ngkgu6-x>l+vD*4N_t+)wKT?c>8j)}b42 zu{q8=*lcr?Zj}9K>-8r11|wU~`mn|Zl>^|}@?zB$G?C9OJt&XMLD!ZSS5*wIOvTm# zhp&!zo#ZXCgxLX*Av=opL~eGBuuaesL(P%(FIVf3?^k2AHng;l`#h0p9Ls5blzGwfHc7qw3zi3Y1k@9u^2j#t+kMP!`w1N^^qnG%yx zEYWSgyzKGH?v+tIVkoxLx~|r4cE0)k!E<--J@xaupMCN5;h=FP@`HFPqZ}r>bXxiX zS4tyQKgcDPL4czKw*z&@%ns1F;_HL?xc$p-ePH0q7%df5#l*|^;00QnlV`5pgA(ZE z?kZBveG=k_YCBtcF{$U<=mx>(Dod__xpt4N%i)$2B7;ft!-OqVjzj@hMoqw#ZqKq@ zNS$4Ro`(g;X&b;|gLD>ps@~x>*7e4ki~3Vd(>u zM=+UYxWWt7lr1@fbQa~^-W?RuEUtFIK=eCk;qZz0)b`?tO82jk{kdb0o~d zq*;{g#hlE9ATq_loOe{t*4v#!Psi<}DQqPHTp5h#lX?jZ&@ue1OQ*n!=NTt}o$}-s z8n8X>bLfSWq8xvAa#K+pop8CIIqkvc2UWCvO>APrgN+GSzz_EQgWGrS{pja+KmFp* z9Ky}`ie`gMsF}E;6op%`%;O!3qD@^&RM7j!R$O7zw%0$6xZ>mXue|-y^cw#bBMe+xmNpb5~LJJ;4_QcOLT}?lpY@SDp*FG9X+@KvJj~9D&E@ z_=dd;oxNf)sMc<0x|_FGoWe59D?9o4N(onvM}Zdx=}y6w@YiX?>FfYtYp{HM;pc=a zU6)>9r{PK*$ZUCm3j0vvy3<&tnOKD-o;kTu}`uD5M|m=Jl; za7`JuPKfV8Ta)E6zAB_3I zSU1crmFA0P7%uRGm1(MfY+Sbed@Nk_o7g?zup{`vUb*LSCGKCr(}E$ULM|Zgk1F}W zR5x&j4pQ8=jGFF~aAm54E71?;cW>;~jf#xkN}2r1a0L?BVWYL{fRikzWbKz8ePdi1 zlXz{7ul$o2$CYhj2~mnI;mU^Lih)j?@vPNunoH_J@3z>(G@13se)uI=JxJ%UR$OxL zQ$empTp949pBh(;nd4nD2YwkS6wCwPM{#^}~GdQu8GJGkYStm0&4>E76CZ{9uSH zP`Oj?x5w0M3U8cFV90(`>XMW-r*tFYN-O}yam6jLh%1M~ zK`ITB0%goNlxLZJ!Ne8r2eae$H@)&Z2wWLc@xfur4r-LW5?HI9mRwiv2rb~na7EcG zKD=b(N|!B|3szg$F`fYvpv3!sE)~!mOq5 z&9!FX6K%@@hQhM$m<9fEz?HP;9I6+`j2FMi*Oniq^Aec?U6-&|CJa|b&9rv7vX|>C z4uDah71!bGWk1-~?@JZ94i%JpUaPo_kFb85@nCsT=T}J23%C-7Pl|9_0>KMZ&n@~J zEC-=Xyg9>_GJgtO8P8Ki>fjElk|VBwD+uZ(2BdM`3|HttfeHG-ih1@=z?tTyafKaf zz;Q*KM=&B>d5XnX?0m3{EVS9FOdmzi%w9QVby@T&;fj3;*Q&Vh(eJna;%Cpj`s&+& zD|}BWw^8KrAwJL8X{_r_!R{^$#856Oz4PRTXXxa{PUNO7WhAZq-AGZfT7*YW18Lv0%_;aN!nzM|r zIj(SkH=R*{E5Zxs#Y)1Jogvq76hPRbghL7xc-X)d*b~~T>J#HDf;0u1t84G8ANubv z&aXn2ZAxGzA8gTHF(_~>Op5wW)?1D%Gdk%Y;EFFdP}>P<-E=s48OHr9++KkrQtbE& z>wI~xTffX1$+lN?5#C^H@WUk0<}^5Gu>r1>o@YE!f3A2ycUapiyo~E~wrGj3L~(M+*H{;>q^@y4SjFrW zu-mx3qT|2(L28V$waB%2NnF9QzCO4$^;sKT{(UxBuxc{Te;L%1A1ud}aQxjr;|J3d zqORZwI|h3Na0UI47+;xjT-k${`=At;!lZMW*c<@3G6){0bWk*;4-7)d(O8<#Tmhy_ zCs!ugnDFR*M+sLZfGc4Y+z3}XC&KDJT@hE((#vv}*g3Y`73Oed`Bxub@%vX!!WA}Z zH9>+~3lxrWQ{qZKt=uts=pOm$SBkIDKT~}$hbynV{n4YC52nuMRQX_R`$)o-f_K%> z;JMP8F`RV0(|zjsc|W?LDmb>U>atf(BUtJ|tFM1U_DYjZAx#M(F>Zf(u+1<{4U-_O zD`x-v4|97ZIYzp0MLoSm#FT${Sfz3U!d`(Bu4X)Jo6}E7_I&|Y;?dgs7Fz&*yrA~aOKL=63R-Z;;|jW7S<+F6TFjOKQV9%G8 zqCf%ElF!g~l_g1v%?&Uy%X8>WdXCs-^+dnF`pIAA*^(Ya$TT9?m0)|0sBsFe z@G~0754J{JDRf}3|9RB;n{8K)D`c?#bGX93+NKo}u2_eZQhq+UAM%U6zahi0|f+J5TQ$9$RX1NIkvf4&)G#TMUec9p4CgBP!Ds~QWZQzQ$A-F-b)8FWF zK_GHm83E<1P_C`TUTM*FxPTK9-x_}OgY_A%fWb8Hg*;=!Ry`g>m-uv_EbJni9FKr2 zDqLK~6>&qJ(Nlm~_|P8y*6)j4^bJ4QY}g)ODX(b!l-u*>5;%tA-RjvgxJKr1ZYBhH z%JG#}3&b30aW3|$J{T5D)Swb;PzIZlrG$BV#h<@&`|iDe@woDJ^dgA(ik})~kaU>u zvY*Bmm>;Y_1A3fAvSSk5S~zOvInWFIqQI3s+A9%Prf9G5D1E^X7WYMNJEuy}h*@3o z7ozkYzmI_{UGWw3$tH#gf03nl27AT3vn8&~x^RWD>5<=0a!;3VIr=&-7f?=^;KlB}UVSW~JGR+N}lSLs6;yWdM(AqOjLj5-BZ1pZ4zDM}o6 zImr?g_WaCBr>dO8zDSb*Hf4l0Tc8rV%Y1n`7-#-{z?D?cH-AXsZU$w#aRu!a^zS>P z)_X#D-AU00g($7K!YE*LJJg-5V`^!RD+PPS;4A!ucajabAXsA^m#S39v&#fqwven6CAGm-uuB`efz^l+z*z>q!Nyy#q(FjC*exL z%g{a!x=qnuDc}kxH4HmL6s9-jU*Ol)*PV>^3PKvx40pJ4dDY_1K4pZR<6k_#-?&CBy5uhT3qY+h5@~oL{n&fag$2#c$QDXHa&tTRuF=b%gyZ zvOXB@i?ng2s23lPIka?iK;VkrztV{-reCGhJ@e-;w*4)K zD~t2s8d*qtr9Hl4j7bbU=~Kt#4iz3z>0T+~3P20n(wFaFdEVp7%b$PwpL?<2evhak zdu>pl>=QG*=(kAXnITr;?~)?gx{ie_Cu=?!_q7lH@WsfvxC_(Kw7>&@ zkgERS0WcwEKB~R7RL{oT)?)OF7dEu#X z19OpZvw96NHmvDuI@1E9{O9>2m-EL zWVqsSu03wAZql~UT8-%xU%|7tvt%&vefc8?8MH`T`S<_yr#zSHxNzP$NN&-Mz9&cr z^c1*)qmAD;T9=HVu5<}*xjFxM5V-R3qrn((1@WWdfGoF3darA!XMBU}BzY%SpfiM1 z1xyvUZ^ae5RY-OK7}*n;oM49@1+FwXuAE=4P8@6}_vhE%=Yxd<6GeOl4ip;CrYKnd zi3=G_$Yo&r6kmZoD-m6S;iC6NTDYRh*r_#agwu52j>mv2e!LYs1f>F8fnx#)r}80) z=M^X2Rtcd_J`3$&+`e*}bldD7&^`fvKGFBWhc9r287^)XN?Eog@nm$5ShEdR9M6w~ zSg!zA{84Y=0GO7#lP94|*YMrnnd5(7_;OLf`9slc>W}MC$>!8L`G?YyZ|l!-zo$|< z!`u%xvh0=6#?A7t-#>W%rFZ`IS&u96>BW7Ki9<3cdAW(%f}VHRoix{5Q9PAhF-oYR zbj1$2kKVU%rF85H&xP=~lJda}=7w<;?QYpUx`P5pw|rAF#(2iPVL7gFvxFE$5EASX z@jcyV{!YXd<_F`RsNe@HkiQdDa{eWo<`pb*dKonI{r7psGoNV7w*=z( zE6a=3De{p&rF50Pzl=phNTWjf&x+Yl<_)ENV8Toru7uOfMky<7?gV=DgPpkF9t0|$ zM%rzuqgp--@x?Iv^9n*N6>Rw5+yqzh?w#LcgBYnsCTllgSSNzS7$zFNY<4RxcU*YEvH&8R5 z&LJKod!^e?Zgfd%OQmkRt6pUL?Z*k&OnXI#9|JN zZ!c4gW85BbMSFK8BlwRkTscTa(9ch}auEVNi+B`w+(r}5F!dcU_ix?w!nw#N6a8QV zi7QYpEbUh5`z9jL4p+YY?!ohS@BQQ#FWvw0&yff_!WB9->S$fE57xr5zI>~5Qg4tZ zaC{2d}S#TH}i|W2rzW# zg9&+QT^1GXE5+?cmM5yJ1FmFd>CLYKHu&K$&M)~nxOfz<6ERco2r|}Hi>!6)~2N%`VLWeyC;`#P6ZlCH?)w6UAb9M)9ubfU9 zb(!^yM>mPD6!}dqgnZ!fD@%_nq*Xw<{;)0aWP3#$@r3(rW*p(l*xtV)a78b${hmK~ zr#~-|MGfN+{a_(+ARFl-A958@H+qac3gi zn0evjE0%LVdwgkh?N2`jKiJR*DmkclhrnPG{a|hS+9^+glo$(Ij>pUE^)S@#jrJn5 z)qLem^BiLD{xae#wiE*fh_^8$>^z=tFYAMirXp@{a1jh7)gQAwKPT{~Ss?@iU-D(>=p4S?1sb@ zK!bLfo9g5b1g^{w*e<}szPIL^ccC=8b`fv{Tp`Iq`C#3+l0Q*`AgF06wZR+ekxIyf z7pwI^+AB$Mt9+=#uvd`7lyadwLKeH4*u0GUSE`2Zi;U-gcymqq!HmbH5*1~~U>n^4 zSNO4Jken9$U{_KU6T$hjN}sllJAGjZez2kPgT*x8>yyv7PoEw1dXs8|9L&)vRdN5y za4hH_C2V^=W8=v;x9J`A2v?@FXtf0M-5-fP_2+Q6RX)X=Xi(vkBE7bv&qt0cbhH{) zz8F~062k<}Uir&+Kim$u^2z64c@2JlH2q*@deNdy)RVSm{-ayAOtIj-6rvH2K3L6q zgpDh||I+VYdF!KuE2^X#{S_PUL;3D-{)#b?-L~hUj4Oxa1xUkijKu;QlxOUe=*m}0 z_s$l>63-tE?I>zhwMq6P+ZRa*>@j{G-t_w-Z7C`&CUev_52y}cd_}t8Vs&8?SN5$i zX3H>S3zl6UYfW5UUH2WSY5!32fO(9m;wiA1Tr)=^2i5fzx)yHB9!M6=UF939MzpPZ_vVo=?k6EzNdYWdc*&~vRC$k3+N^{ zx|rmqx|0yC`DZbK91p20h&77o$ zAB^yTZ_;5O>olqOX?(w6{j}rC9&qLTKYaP~=U;p6?T@)1te+|q;NKi+JY}y}>-IoV z8<}V*wkqQXw?8zCi|7Lx!g+;p|3usd913J$c zEY7d?L{0HrTRF<+rL^n`R+kq8&drmw=ed**wpZpFJx{!cL=nACxDv}v_>V8HuHDnm zMpHZiI@U9Gtyj%1F0XAZuj^vn;MRi@kiN~&FF2w^pV%JofwHGcqQLD`rnBm7 z%e)`mzl9DG|ErQ~O^&PI|q>gR;jQSyx9ku{EQ+XenSX~LCbct zbMqU|>+XfkUoj6b;d(n6DH*_TwAlr7A$VMQgafIO_7B0#^0jC; zTY_bj3YY7tGuNU-Qvut6D>Ev5soW~I)M_zR?YNh-#hrM(yk2j|a7;sLP}L@;=Uw=c2g=Er zWD)U{=$cpsY}A=v5(egQD^}hV$zbG-hr{j1HMi${vZBJ3t-Jd%Ev%cw?G>)H1GuP@ zuYYzT*$bL>`xNr^OZG~@l~)N@2tU;RmB`#sjI!wuy&kdN>~dYx^voGHf7fu&FRw?_ zdG!1kxH77pHIr)`>77gkJ4LQ=f#{@mlxy4%;B~hs+I+9(m#gbciYH{*6XX^;fKRgM zatvvv5U8KUoSdYyhX_Z1?2MU}Uee-OJJzwWZ%i5R?DbnWOcNW`vv(3@6IQ1t2OX!PR z`zaUEpO!eo7L%T1XI9s1g)8~k_&o)cN>iUcJUX2zR^lR9&9+ARQZAXvA|6*-di${J zPf~{1cDG+&dy(o?iau2fBwUGmW5>-hbil%uCyA%1pQp41XC48;XEClB<+xk^bu8&k zdTmjoC_V@0BO`)aBBAIcD~3O62D%O}o)-x|Qm>TP99RDE*`Kzj;EFOFZhqZj2X6?u zdlR}_ft@n?DFqeZvv8&6xWZ*hdf%}cJ9WUVy-@w|CRbs#w=L*v9m;o=Vq5L&pJ5TOY!a0Wl?PFiQGJtVI~3m#g c+7g?k;OL=+80a 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%0D9-w2ZX&@jtqbC%AiKi=%&1 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�|fI?1fn#B^O8G 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

    ;vv>gxHKSLfNSfZU$CM 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¥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Ǯ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 { + ele.classList.add('hidden') + }) + + // Close when clicking outside modal content + ele.addEventListener('click', (e) => { + if (e.target === ele) { + ele.classList.add('hidden') + } + }) + + // Close with ESC key + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape') { + ele.classList.add('hidden') + } + }) +} \ No newline at end of file diff --git a/cdn/dev/js/feature/kb-container.js b/cdn/dev/js/feature/kb-container.js new file mode 100644 index 0000000..4fa912b --- /dev/null +++ b/cdn/dev/js/feature/kb-container.js @@ -0,0 +1,258 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Created by MengHeng Hav on 2026-06-26 + * + * element and interactions of the Keyboard containers + */ +import { selectedKbList } from "../state/appState.js" +import { kbData } from "../state/appState.js" +import { setKeyboard } from "../operation/keyboardDataPackage.js" +import { setKbHelpDocHamburger } from "../operation/hamburgerMenu.js" +import { firstKbToType, setKeyboardToType } from "../operation/keyboard.js" +import { kbDataForKbContainer } from "../operation/keyboardContainer.js" +import { kbConfigMenu } from "../operation/keyboardAction.js" + +// UI for keyboard container +export function kbContainerUI(selectedKbList) { + const kbContainerMenu = document.getElementById('keyboardContainerMenu') + const kbContainerVisible = document.getElementById('keyboardContainerVisible') + + const kbOverflowBtn = document.getElementById("keyboardOverflowBtn") + const kbMenuDropdown = document.getElementById('keyboardOverflowSelection') + const kbOverflowSelection = document.getElementById("keyboardOverflowSelection") + + if (selectedKbList.length < 1) { + resetKbContainer() + return + } + + firstKbToType(selectedKbList) + + const visibleItems = [] + const overflowItems = [] + const kbContainerWidth = kbContainerVisible.clientWidth + let totalWidths = 0 + + selectedKbList.forEach(kb => { + kbContainerVisible.innerHTML = '' + kbOverflowSelection.innerHTML = '' + + const kbChip = createKeyboardChip(kb) + kbContainerVisible.appendChild(kbChip) + + let widths = Array.from(kbContainerVisible.children) + .filter(child => child.nodeType === 1) + .map(child => child.getBoundingClientRect().width) + + totalWidths += widths.reduce((a,b) => a+b, 0) + + kbChip.remove() + + if (totalWidths <= kbContainerWidth) { + visibleItems.push(kb) + } else { + overflowItems.push(kb) + } + + visibleItems.forEach(oneKb => { + kbContainerVisible.appendChild(createKeyboardChip(oneKb)) + }) + + overflowItems.forEach(oneKb => { + kbOverflowSelection.appendChild(createKeyboardChip(oneKb)) + }) + + if (overflowItems.length < 1) { + kbOverflowBtn.classList.add('hidden') + kbOverflowSelection.classList.add('hidden') + } else { + kbOverflowBtn.classList.remove('hidden') + kbOverflowSelection.classList.remove('hidden') + } + } + +)} + +function createKeyboardChip(data) { + const textArea = document.querySelector('#textArea') + + let kbdId = data.id + let langCode = Object.keys(data.supportedLanguage)[0] || "en" + let kbdName = data.name + + const kbDiv = document.createElement('div') + kbDiv.classList.add('kb-item-keyboard') + kbDiv.dataset.id = data.id + + // Keyboard Name + const kbName = document.createElement('span') + kbName.classList.add('kb-chip-name') + kbName.textContent = data.name + + // Remove button + const removeBtn = document.createElement('button') + removeBtn.classList.add('kb-chip-remove') + removeBtn.dataset.action = 'remove' + removeBtn.dataset.id = data.id + removeBtn.innerHTML = '×' + + // Selected indicator + const selectedIndicator = document.createElement('div') + selectedIndicator.classList.add('kb-chip-selected') + const checkIcon = document.createElement('i') + checkIcon.classList.add('fa-solid', 'fa-check') + + selectedIndicator.appendChild(checkIcon) + + kbDiv.appendChild(kbName) + kbDiv.appendChild(removeBtn) + kbDiv.appendChild(selectedIndicator) + + kbName.addEventListener('click', () => { + kbdId = data.id + langCode = Object.keys(data.supportedLanguage)[0] || "en" + // Set the keyboard data for OSK to fetch for display + setKeyboard(kbdId, langCode, kbdName) + // Change the OSK + setKeyboardToType() + setKbHelpDocHamburger(kbdId, kbdName) + reorderSelectedKbList(kbdId) + textArea.focus() + }) + + // Remove keyboard + removeBtn.addEventListener('click', (e) => { + e.stopPropagation() + kbConfigMenu( + 'remove', + data.id, + null + ) + }) + + const defaultKbUSParent = document.querySelector('.default-us-kb') + const defaultKbUSGrandChild = defaultKbUSParent.children[0].children + + Array.from(defaultKbUSGrandChild).forEach(grandChild => { + grandChild.addEventListener('click', (e) => { + kbdId = "basic_kbdus" + langCode = "en" + kbdName = "US Basic" + setKeyboard(kbdId, langCode, kbdName) + setKeyboardToType() + }) + }) + + return kbDiv; +} + +export function reorderSelectedKbList(kbId) { + const index = selectedKbList.findIndex( + kb => kb.id == kbId + ) + + if (index < 1) return + + selectedKbList.unshift( + selectedKbList.splice(index, 1)[0] + ) + + kbContainerUI(selectedKbList) +} + +// Set the keyboard selection menu to its default UI +function resetKbContainer() { + const kbContainerVisible = document.getElementById("keyboardContainerVisible") + kbContainerVisible.innerHTML = '' + + const kbMenuDropdown = document.getElementById('keyboardOverflowSelection') + kbMenuDropdown.innerHTML = '' + + const kbOverMenuDropdownBtn = document.getElementById('keyboardOverflowBtn') + kbOverMenuDropdownBtn.classList.add('hidden') +} + +// UI for Keyboard Selected Limitation +export function kbContainerLimits(onAccept) { + const dialogDiv = document.createElement('div') + dialogDiv.classList.add('warning-container') + + const dialogContentDiv = document.createElement('div') + dialogContentDiv.classList.add('warning-content') + + const dialogCancel = document.createElement('button') + dialogCancel.classList.add('warning-cancel-btn') + dialogCancel.setAttribute('id', 'cancelWarningBtn') + dialogCancel.textContent = 'โœ–' + dialogCancel.onclick = () => { + dialogDiv.remove() + kbContainerUI(selectedKbList) + } + + const dialogImgTag = document.createElement('img') + dialogImgTag.classList.add('warning-keyman-image') + dialogImgTag.src = `/cdn/dev/img/keymanweb-mini-logo-88.png` + dialogImgTag.alt = "Keyman Logo" + + const firstKeyboard = selectedKbList[0].name + + const dialogPTag = document.createElement('p') + dialogPTag.classList.add('warning-text') + dialogPTag.innerHTML = `The keyboards selected exceeds the limitation of 5 keyboards. Click 'Allow' to remove the
    ${firstKeyboard} keyboard.` + + const dialogUlTag = document.createElement('ol') + dialogUlTag.textContent = "Your keyboards selection:" + selectedKbList.forEach((kb, index) => { + const dialogLiTag = document.createElement('li') + if (index == 0) { + const markKeyboard = document.createElement('mark') + markKeyboard.textContent = kb.name + dialogLiTag.appendChild(markKeyboard) + } else { + dialogLiTag.textContent = kb.name + } + dialogUlTag.appendChild(dialogLiTag) + }) + + const dialogAccept = document.createElement('button') + dialogAccept.classList.add('warning-accept-btn') + dialogAccept.setAttribute('id', 'acceptWarningBtn') + dialogAccept.textContent = "Allow" + dialogAccept.onclick = () => { + dialogDiv.remove() + onAccept() + } + + dialogContentDiv.appendChild(dialogCancel) + dialogContentDiv.appendChild(dialogImgTag) + dialogContentDiv.appendChild(dialogPTag) + dialogContentDiv.appendChild(dialogUlTag) + dialogContentDiv.appendChild(dialogAccept) + + dialogDiv.appendChild(dialogContentDiv) + + return dialogDiv +} + +// Highlight the keyboard in the Keyboard Container +export function highlightKbContainer(kbId) { + document.querySelectorAll('.kb-item-keyboard').forEach(el => { + el.classList.remove('kb-item-keyboard-selected') + }) + + const kbSelectedItem = document.querySelector(`[data-id=${kbId}]`) + if (kbSelectedItem) { + kbSelectedItem.classList.add('kb-item-keyboard-selected') + } +} + +// Compare and remove keyboard +export function removeFromKbContainer(kbId) { + if(!kbId) return + let filtered = selectedKbList.filter(kb => kb.id !== kbId) + + // Reset and re-enter the Keyboard selection menu + selectedKbList.length = 0 + selectedKbList.push(...filtered) +} diff --git a/cdn/dev/js/feature/kb-selection-menu.js b/cdn/dev/js/feature/kb-selection-menu.js deleted file mode 100644 index bfaec5d..0000000 --- a/cdn/dev/js/feature/kb-selection-menu.js +++ /dev/null @@ -1,366 +0,0 @@ -import { selectedKbList } from "../state/appState.js" -import { platformSupport } from "../operation/platformSupport.js" -import { setKeyboard } from "../operation/handleKeyboardData.js" -import { removeKbSelected, setKbHelpDocHamburger } from "../operation/selectedKb.js" -import { checkKbCardUI } from "./search.js" -import { setKeyboardToType } from "../operation/keyboard.js" -import { confirmAndAddKb } from "../operation/confirmKeyboard.js" -import { bundleKbDataforSelectionMenu } from "../operation/bundleKbSelectionMenu.js" -import { kbConfigMenu } from "../operation/keyboardDetails.js" - -export function addKbToSelectionMenu(kbIconPTag, element, kb, data) { - const keyboardSelectionButton = document.getElementById('keyboardSelectionButton') - - let isSelected = selectedKbList.some(selected => selected.id == kb.id) // Check which keyboard is already in the keyboard selection menu - - // Remove keyboard - if (isSelected) { - removeKbSelected(kb.id) - kbIconPTag.textContent = '+' - generateKbUI(selectedKbList) // Generate Keyboard selection menu UI - checkKbCardUI(kbIconPTag, element, kb) // Disable or Enable Keyboard Search card UI - - return - } - - if(selectedKbList.length < 5) { // if keyboard selection menu has less than 5 keyboards - bundleKbDataforSelectionMenu(kb) // continue to add it to the menu - generateKbUI(selectedKbList) - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('kb-icon-plus-animate') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('kb-icon-plus-animate') - keyboardSelectionButton.classList.remove('btn-secondary') - keyboardSelectionButton.classList.add('btn-keyman-orange') - }, 800) - - checkKbCardUI(kbIconPTag, element, kb) - return - } - // if the keyboards in the selection menu are over 5, there's a confirmation needed before adding the keyboard - confirmAndAddKb(() => { - bundleKbDataforSelectionMenu(kb) - generateKbUI(selectedKbList) - - kbIconPTag.textContent = 'โœ“' - kbIconPTag.classList.add('kb-icon-plus-animate') - - setTimeout(() => { - kbIconPTag.textContent = '-' - kbIconPTag.classList.remove('kb-icon-plus-animate') - keyboardSelectionButton.classList.remove('btn-secondary') - keyboardSelectionButton.classList.add('btn-keyman-orange') - }, 800) - checkKbCardUI(kbIconPTag, element, kb) - setKeyboardToType() - textArea.focus() - }) -} - -// UI for keyboard selection menu -export function generateKbUI(selectedKbList) { - const textArea = document.querySelector('#textArea') - const keyboardSelection = document.getElementById("keyboardSelection") - keyboardSelection.innerHTML = '' - - // Check if keyboard selection menu has less than 1 keyboard - if(selectedKbList.length < 1) { - triggerKbCount(selectedKbList) - resetKbSelectionMenu() - return - } - - const kbDivHeader = document.createElement('div') - kbDivHeader.textContent = "Keyboard Selection menu" - kbDivHeader.classList.add('kb-item-header') - - const kbDivFoot = document.createElement('div') - kbDivFoot.textContent = "US Basic Keyboard" - kbDivFoot.classList.add('kb-item-footer') - - keyboardSelection.appendChild(kbDivHeader) - - selectedKbList.forEach(data => { - const kbDiv = document.createElement('div') - kbDiv.classList.add("kb-item-keyboard") - kbDiv.setAttribute('id', `${data.id}`) - - const kbName = document.createElement('span') - kbName.textContent = data.name - - const kbConfigList = document.createElement('ul') - kbConfigList.classList.add('keyboard-configs') - kbConfigList.innerHTML = ` -

  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • - ` - - const kbDetails = displayKbDetails(data) - - kbDiv.appendChild(kbName) - kbDiv.appendChild(kbConfigList) - kbDiv.appendChild(kbDetails) - keyboardSelection.appendChild(kbDiv) - keyboardSelection.append(kbDivFoot) - - let kbdId = data.id - let langCode = Object.keys(data.supportedLanguage)[0] || "en" - let kbdName = data.name - - highlightKbSelected(kbdId) - - setKeyboard(kbdId, langCode, kbdName) // Set the data to display the keyboard - // Each tools on each of the keyboard in the selection menu - kbConfigList.addEventListener('click', (e) => { - const target = e.target - if (target.tagName == 'I' && target.dataset.action) { - const action = target.dataset.action - const id = target.dataset.id - const helpLink = target.dataset.helplink - kbConfigMenu(action, id, helpLink) - } - }) - - // Click on the keyboard will enable the keyboard for typing - kbName.addEventListener('click', () => { - kbdId = data.id - langCode = Object.keys(data.supportedLanguage)[0] || "en" - setKeyboard(kbdId, langCode, kbdName) - setKeyboardToType() - setKbHelpDocHamburger(kbdId, kbdName) - highlightKbSelected(kbdId) - keyboardSelection.classList.remove('open') - textArea.focus() - }) - - // Default English keyboard - kbDivFoot.onclick = () => { - setKeyboard('basic_kbdus', 'en', 'US Basic') - setKeyboardToType() - } - }) - triggerKbCount(selectedKbList) -} - -// Keyboard count for Keyboard selection menu -export function triggerKbCount(selectedKbList) { - const kbSelectedLength = selectedKbList.length - const keyboardSelectionButton = document.querySelector('#keyboardSelectionButton') - const keyboardCount = document.querySelector('#kbCount') - - if (kbSelectedLength >= 1) { - keyboardCount.classList.remove('fa-caret-right') - keyboardCount.textContent = `${kbSelectedLength}` // Show the number of keyboard in the menu - keyboardSelectionButton.classList.add('btn-keyman-orange') - keyboardSelectionButton.classList.remove('btn-secondary') - } else { - keyboardCount.classList.add('fa-caret-right') - keyboardCount.textContent = '' - keyboardSelectionButton.classList.remove('btn-keyman-orange') - keyboardSelectionButton.classList.add('btn-secondary') - } -} - -// Set the keyboard selection menu to its default UI -function resetKbSelectionMenu() { - const keyboardSelection = document.querySelector("#keyboardSelection") - - const kbDivHeader = document.createElement('div') - kbDivHeader.textContent = "Keyboard Selection menu" - kbDivHeader.classList.add('kb-item-header') - - const kbItem = document.createElement('div') - kbItem.classList.add('.kb-item-keyboard') - - const pTag = document.createElement('p') - pTag.textContent = "Open Search to get your keyboard" - - const kbDivFoot = document.createElement('div') - kbDivFoot.textContent = "US Basic Keyboard" - kbDivFoot.classList.add('kb-item-footer') - - kbItem.appendChild(pTag) - - keyboardSelection.appendChild(kbDivHeader) - keyboardSelection.appendChild(kbItem) - keyboardSelection.appendChild(kbDivFoot) -} - -// UI for Keyboard Selected Limitation -export function limitKbSelectionUI(onAccept) { - const dialogDiv = document.createElement('div') - dialogDiv.classList.add('warning-container') - - const dialogContentDiv = document.createElement('div') - dialogContentDiv.classList.add('warning-content') - - const dialogCancel = document.createElement('button') - dialogCancel.classList.add('warning-cancel-btn') - dialogCancel.setAttribute('id', 'cancelWarningBtn') - dialogCancel.textContent = 'โœ–' - dialogCancel.onclick = () => { - dialogDiv.remove() - generateKbUI(selectedKbList) - } - - const dialogImgTag = document.createElement('img') - dialogImgTag.classList.add('warning-keyman-image') - dialogImgTag.src = `/cdn/dev/img/keymanweb-mini-logo-88.png` - dialogImgTag.alt = "Keyman Logo" - - const firstKeyboard = selectedKbList[0].name - - const dialogPTag = document.createElement('p') - dialogPTag.classList.add('warning-text') - dialogPTag.innerHTML = `The keyboards selected exceeds the limitation of 5 keyboards. Click 'Allow' to remove the
    ${firstKeyboard} keyboard.` - - const dialogUlTag = document.createElement('ol') - dialogUlTag.textContent = "Your keyboards selection:" - selectedKbList.forEach((kb, index) => { - const dialogLiTag = document.createElement('li') - if (index == 0) { - const markKeyboard = document.createElement('mark') - markKeyboard.textContent = kb.name - dialogLiTag.appendChild(markKeyboard) - } else { - dialogLiTag.textContent = kb.name - } - dialogUlTag.appendChild(dialogLiTag) - - }) - - const dialogAccept = document.createElement('button') - dialogAccept.classList.add('warning-accept-btn') - dialogAccept.setAttribute('id', 'acceptWarningBtn') - dialogAccept.textContent = "Allow" - dialogAccept.onclick = () => { - dialogDiv.remove() - onAccept() - } - - dialogContentDiv.appendChild(dialogCancel) - dialogContentDiv.appendChild(dialogImgTag) - dialogContentDiv.appendChild(dialogPTag) - dialogContentDiv.appendChild(dialogUlTag) - dialogContentDiv.appendChild(dialogAccept) - - dialogDiv.appendChild(dialogContentDiv) - - return dialogDiv -} - -// Keyboard details for Keyboard selection menu -function displayKbDetails(data) { - const item = selectedKbList.find(kb => kb.id == data.id) - if (!item) return; - - const kbDetails = document.createElement('div') - kbDetails.classList.add('keyboard-details') - kbDetails.setAttribute('id', `keyboard-${data.id}-details`) - kbDetails.classList.add('hidden') - - const kbDetailsHead = document.createElement('div') - kbDetailsHead.textContent = 'Keyboard Details' - kbDetailsHead.classList.add('kb-item-header') - - const kbDetailsContent = document.createElement('div') - kbDetailsContent.classList.add('keyboard-content-wrapper') - kbDetailsContent.innerHTML = ` -
    - ` - kbDetails.appendChild(kbDetailsHead) - kbDetails.appendChild(kbDetailsContent) - - return kbDetails -} - -// Get only the YYYY-mm-dd format -function getOnlyDates(dateData) { - const finalDateData = dateData.match(/^\d{4}-\d{2}-\d{2}/) - return finalDateData -} - -// Highlight an enabled keyboard in the Keyboard Selection Menu -export function highlightKbSelected(id) { - document.querySelectorAll('.kb-item-keyboard').forEach(el => { - el.style.backgroundColor = '' - el.style.color = '' - el.style.opacity = '' - }) - - const kbSelectedItem = document.getElementById(id) - if (kbSelectedItem) { - kbSelectedItem.style.backgroundColor = 'var(--keyman-orange)' - kbSelectedItem.style.color = 'white' - kbSelectedItem.style.opacity = '100%' - } -} \ No newline at end of file diff --git a/cdn/dev/js/feature/pagination.js b/cdn/dev/js/feature/pagination.js index 457cbee..707dc94 100644 --- a/cdn/dev/js/feature/pagination.js +++ b/cdn/dev/js/feature/pagination.js @@ -1,35 +1,35 @@ -// UI for Pagination +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Created by MengHeng Hav on 2026-08-05 + * + * Element and interaction for the pagination + */ import { getKeyboardList } from "../operation/searchAPI.js" import { searchState } from "../state/appState.js" -import { searchKeyboard } from "../operation/searchLogic.js" +import { searchKbWithQuery } from "../operation/searchLogic.js" /* Pagination */ const prevBtn = document.getElementById('prevPage') const nextBtn = document.getElementById('nextPage') const pageInfo = document.getElementById('pageInfo') -export function updatePaginationCtrl() { - pageInfo.textContent = `${searchState.currentPage} of ${searchState.totalPage}` // Number of Total page - nextBtn.disabled = searchState.currentPage >= searchState.totalPage // Check to disable next page - prevBtn.disabled = searchState.currentPage <= 1 // Check to disable previous page -} - export function goPrevPage() { if (searchState.currentPage > 1) { searchState.currentPage-- - searchKeyboard(searchState.searchQuery, searchState.currentPage) + searchKbWithQuery(searchState.searchQuery, searchState.currentPage) } } export function goNextPage() { if (searchState.currentPage < searchState.totalPage) { searchState.currentPage++ - searchKeyboard(searchState.searchQuery, searchState.currentPage) + searchKbWithQuery(searchState.searchQuery, searchState.currentPage) } } // Load keyboard search info (pages) -export async function loadPageInfo(defaultQuery = "p:popular") { +export async function getTotalPage(defaultQuery = "p:popular") { const data = await getKeyboardList(defaultQuery) // depending on the query if (data?.context) { @@ -41,3 +41,9 @@ export async function loadPageInfo(defaultQuery = "p:popular") { updatePaginationCtrl() } + +export function updatePaginationCtrl() { + pageInfo.textContent = `${searchState.currentPage} of ${searchState.totalPage}` // Number of Total page + nextBtn.disabled = searchState.currentPage >= searchState.totalPage // Check to disable next page + prevBtn.disabled = searchState.currentPage <= 1 // Check to disable previous page +} diff --git a/cdn/dev/js/feature/search.js b/cdn/dev/js/feature/search.js index a64fe77..28620c5 100644 --- a/cdn/dev/js/feature/search.js +++ b/cdn/dev/js/feature/search.js @@ -1,12 +1,19 @@ -// UI for Search +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Created by MengHeng Hav on 2026-06-26 + * + * Element and interactions for Search + */ import { searchState, selectedKbList } from "../state/appState.js"; import { highlightSearchContext, truncateDesc, getMarkedContext, showMarkedContext } from "../operation/searchCardContent.js"; -import { addKbToSelectionMenu } from "./kb-selection-menu.js"; -import { platformSupport } from "../operation/platformSupport.js"; +import { kbContainerUI, reorderSelectedKbList } from "./kb-container.js"; import { validateURL } from "../operation/validURL.js"; import { setKeyboardToType } from "../operation/keyboard.js"; -import { setKbHelpDocHamburger } from "../operation/selectedKb.js"; -import { loadPageInfo } from "./pagination.js"; +import { setKbHelpDocHamburger } from "../operation/hamburgerMenu.js"; +import { getTotalPage } from "./pagination.js"; +import { storeInKbContainer, kbDataForKbContainer } from "../operation/keyboardContainer.js"; +import { setKeyboard } from "../operation/keyboardDataPackage.js"; /* Search */ const kbSearchCard = document.getElementById('kbSearchCardUI') @@ -14,67 +21,66 @@ const searchResultCount = document.getElementById('resultCount') const paginationCtrl = document.getElementById('paginationControls') const magnifying = document.querySelector('#magnifyingGlassIcon') -export function updateSearchIcon(value) { - // Base on the value given, it will display one of the icon below - magnifying.style.display = value ? 'none' : 'inline' - clearSearchIcon.style.display = value ? 'inline' : 'none' +// Search icon changes depending on the value +export function updateSearchIcon(searchQuery) { + // Base on the value given, it will display one of the icons below + magnifying.style.display = searchQuery ? 'none' : 'inline' + clearSearchIcon.style.display = searchQuery ? 'inline' : 'none' } -/* Display items return from search */ -export function displaySearch(keyboards, total = 0, query = '') { - const searchInstruction = document.querySelector('.search-instruction') - const kbHrTitle = document.querySelector('.keyboard-title') - +/* + Only called when there is a query search + Display items return from search +*/ +export function displaySearch(listOfKbData, amountOfKb = 0, searchQuery = '') { + // Ensure Keyboard Search UI is empty kbSearchCard.innerHTML = ''; + const kbHrTitle = document.querySelector('.keyboard-title') // Validate the keyboards data - if (!keyboards || keyboards.length == 0) { - kbSearchCard.innerHTML = `Well, no keyboards found for ${query}.` - searchInstruction.classList.add("hidden") + if (!listOfKbData || listOfKbData.length == 0) { + kbSearchCard.innerHTML = `No keyboards found for ${searchQuery}.` kbHrTitle.textContent = "Results" paginationCtrl.style.display = 'none' return } - if (total) { - searchResultCount.innerHTML = `${total} results` + if (amountOfKb) { + searchResultCount.innerHTML = `${amountOfKb} results` searchResultCount.classList.remove('hidden') } // Getting searched Word ready for highlight - const marked = getMarkedContext(query) + const markedSearchText = getMarkedContext(searchQuery) - if (!query) { + if (!searchQuery) { // Most Download UI - searchInstruction.classList.remove("hidden") kbHrTitle.textContent = "Most Downloads" paginationCtrl.style.display = 'none' - } else if (total < 2) { + } else if (amountOfKb < 2) { // Total results < 2 UI - searchInstruction.classList.add("hidden") kbHrTitle.textContent = "Results" paginationCtrl.style.display = 'none' } else { // Result of search query - searchInstruction.classList.add("hidden") kbHrTitle.textContent = "Results" paginationCtrl.style.display = 'flex' } - // UI for each keyboards - keyboards.forEach(kb => { - const card = searchKbCardUI(kb, marked, selectedKbList, keyboards) + // Display each keyboards into the card UI + listOfKbData.forEach(eachKb => { + const card = searchMenu(eachKb, markedSearchText, selectedKbList, listOfKbData) kbSearchCard.appendChild(card) }) } // Search card UI -function searchKbCardUI(kb, marked = '', selectedKbList, data) { +function searchMenu(eachKb, markedSearchText = '', selectedKbList, listOfKbData) { const searchInput = document.querySelector('#searchInput') const searchDropdown = new bootstrap.Dropdown(searchInput) const textArea = document.querySelector('#textArea') - const kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) // find a match between the keyboard from selection menu & search + const kbFoundInList = selectedKbList.some(selected => selected.id == eachKb.id) // find a match between the keyboard from selection menu & search // Keyboard card container let cardWrap = document.createElement('div') cardWrap.classList.add('card-wrap') @@ -84,97 +90,116 @@ function searchKbCardUI(kb, marked = '', selectedKbList, data) { let cardHeader = document.createElement('div') cardHeader.classList.add('card-header') - const {matchFound, matchField, matchValue} = highlightSearchContext(kb, marked) // Highlight search query + const {matchFound, matchField, matchValue} = highlightSearchContext(eachKb, markedSearchText) // Highlight search query - const kbNameHeading = matchFound ? showMarkedContext(kb, matchField, matchValue) // Highlight search query UI + const kbNameHeading = matchFound ? showMarkedContext(eachKb, matchField, matchValue) // Highlight search query UI : (() => { const heading = document.createElement('h4') - heading.innerHTML = kb.name + heading.innerHTML = eachKb.name return heading })() - - // Keyboard Plus (+) icon - const kbIconPTag = document.createElement('p') - kbIconPTag.textContent = kbFoundInList ? "-" : "+" - kbIconPTag.style.fontSize = '20px' - kbIconPTag.style.cursor = 'pointer' - kbIconPTag.classList.add('kb-icon-plus') // Keyboard Help (?) icon - const kbHelpIconSpan = document.createElement('span') - kbHelpIconSpan.classList.add('help-icon-span') + const kbIconDiv = document.createElement('div') + kbIconDiv.classList.add('card-header-icon') + const kbHelpIcon = document.createElement('i') kbHelpIcon.classList.add('fa-solid', 'fa-question') - kbHelpIconSpan.appendChild(kbHelpIcon) + kbHelpIcon.setAttribute('id', 'kbHelpIcon') + kbIconDiv.appendChild(kbHelpIcon) + + const kbDownloadIcon = document.createElement('i') + kbDownloadIcon.classList.add('fa-solid', 'fa-download') + kbDownloadIcon.setAttribute('id', 'kbDownloadIcon') + kbIconDiv.appendChild(kbDownloadIcon) + // Keyboard Header const kbHeaderTitle = document.createElement('div') kbHeaderTitle.classList.add('card-header-title') - // Must check if the keyboard is in the selection menu - checkKbCardUI(kbIconPTag, cardHeader, kb) + const kbSubHeader = document.createElement('div') + kbSubHeader.classList.add('card-sub-header') // Keyboard ID const kbIdPTag = document.createElement('p') kbIdPTag.classList.add('keyboard-id') - kbIdPTag.textContent = kb.id + kbIdPTag.textContent = eachKb.id + + // Dot for spacing + const kbDot = document.createElement('div') + kbDot.classList.add('dot-spacing') + + // Keyboard Monthly Downloads + const kbDownloadHeading = document.createElement('p') + kbDownloadHeading.textContent = `${eachKb.match.downloads} monthly downloads` + kbDownloadHeading.classList.add('monthly-download') // Keyboard Description - const kbDescHeading = truncateDesc(kb, matchField, marked) + const kbDescHeading = truncateDesc(eachKb, matchField, markedSearchText) - // Keyboard monthly downloads and platform support - const kbSpecs = document.createElement('div') - kbSpecs.classList.add('keyboard-specs') + // Keyboard Selection Indicator + const kbSelectionIndic = document.createElement('div') + kbSelectionIndic.classList.add('selection-indicator') - const kbDownloadHeading = document.createElement('h6') - kbDownloadHeading.textContent = `${kb.match.downloads} monthly downloads` - kbDownloadHeading.classList.add('monthly-download') + const kbTickIcon = document.createElement('i') + kbTickIcon.classList.add('fa-solid', 'fa-check') - const kbPlatformSupport = document.createElement('div') - kbPlatformSupport.classList.add('platform') - kbPlatformSupport.innerHTML = platformSupport(kb.platformSupport) // Get icons for platform + kbSelectionIndic.appendChild(kbTickIcon) // Append children - kbHeaderTitle.appendChild(kbIconPTag) kbHeaderTitle.appendChild(kbNameHeading) cardHeader.appendChild(kbHeaderTitle) - cardHeader.appendChild(kbHelpIconSpan) + cardHeader.appendChild(kbIconDiv) - kbSpecs.appendChild(kbDownloadHeading) - kbSpecs.appendChild(kbPlatformSupport) + kbSubHeader.appendChild(kbIdPTag) + kbSubHeader.appendChild(kbDot) + kbSubHeader.appendChild(kbDownloadHeading) cardWrap.appendChild(cardHeader) - cardWrap.appendChild(kbIdPTag) + cardWrap.appendChild(kbSubHeader) cardWrap.appendChild(kbDescHeading) - cardWrap.appendChild(kbSpecs) + cardWrap.appendChild(kbSelectionIndic) + // Must check if the keyboard is in the selection menu + checkSearchCardStatus([cardWrap, kbSelectionIndic], eachKb) + // Click on a keyboard name to enable the keyboard & add it into selection menu - kbHeaderTitle.onclick = (e) => { - e.stopPropagation() - addKbToSelectionMenu(kbIconPTag, cardHeader, kb, data) + cardWrap.onclick = () => { + const langCode = Object.keys(eachKb.languages)[0] || "en" + storeInKbContainer(cardHeader, eachKb, listOfKbData) + setKbHelpDocHamburger(eachKb.id, eachKb.name) + setKeyboard(eachKb.id, langCode, eachKb.name) + reorderSelectedKbList(eachKb.id) setKeyboardToType() - setKbHelpDocHamburger(kb.id, kb.name) - searchDropdown.hide() - textArea.focus() + // Must check if the keyboard is in the selection menu + checkSearchCardStatus([cardWrap, kbSelectionIndic], eachKb) } // Click on the help icon on the search card to get to the keyboard help documentation - kbHelpIcon.addEventListener('click', () => { + kbHelpIcon.addEventListener('click', (e) => { + e.stopPropagation() const checkedURL = validateURL(`https://help.keyman.com/keyboard/`) - const newURL = checkedURL + kb.id + const newURL = checkedURL + eachKb.id + window.open(newURL, '_blank') + }) + + kbDownloadIcon.addEventListener('click', (e) => { + e.stopPropagation() + const checkedURL = validateURL(`https://keyman.com/keyboards/install/`) + const newURL = checkedURL + eachKb.id window.open(newURL, '_blank') }) return cardWrap } -// Disable or Enable UI with opacity -export function checkKbCardUI(kbIconPTag, element, kb) { - // For checking if the keyboard exists in to respond to UI +// Disable or Enable Search UI +export function checkSearchCardStatus(elements, kb) { let kbFoundInList = selectedKbList.some(selected => selected.id == kb.id) - - if (kbFoundInList) { - element.style.opacity = '50%' - } else { - element.style.opacity = '100%' - } + const selectIndicator = document.querySelector('.selection-indicator') + const kbCardWrap = document.querySelector('.card-wrap') + + Object.values(elements).forEach(ele => { + ele?.classList.toggle('selected', kbFoundInList) + }) } \ No newline at end of file diff --git a/cdn/dev/js/feature/tool-tray.js b/cdn/dev/js/feature/tool-tray.js index c908153..bf97014 100644 --- a/cdn/dev/js/feature/tool-tray.js +++ b/cdn/dev/js/feature/tool-tray.js @@ -1,3 +1,10 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Created by MengHeng Hav on 2026-08-05 + * + * Element and interaction for the tool tray for every screen + */ const tabletToolElements = `