diff --git a/.github/workflows/deploy_configurator.yml b/.github/workflows/deploy_configurator.yml
new file mode 100644
index 00000000..b80dbf39
--- /dev/null
+++ b/.github/workflows/deploy_configurator.yml
@@ -0,0 +1,53 @@
+# Simple workflow for deploying static content to GitHub Pages
+name: Deploy static content to Pages (Configurator)
+
+on:
+ # Runs on pushes targeting the default branch
+ push:
+ branches: ["master"]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+# Allow one concurrent deployment
+concurrency:
+ group: "pages"
+ cancel-in-progress: true
+
+jobs:
+ # Single deploy job since we're just deploying
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ - name: Setup Pages
+ uses: actions/configure-pages@v2
+ - name: HTML/CSS/JS Minifier
+ # You may pin to the exact commit or the version.
+ # uses: devatherock/minify-js@a25175eaf2c438680b21b73882d4837418e9d58b
+ uses: devatherock/minify-js@v1.0.3
+ with:
+ # File to minify or a folder containing files to minify. By default, all files in current folder and its subfolders will be minified
+ directory: './Source/loaderConfigurator/src' # optional
+ # Path where the minified files will be saved. By default, the minified files will be saved in the original file path
+ output: './Source/loaderConfigurator/dist' # optional
+ # Indicates if the output files should have the suffix '.min' added after the name. Default is true
+ add_suffix: false # optional
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v1
+ with:
+ # Upload entire repository
+ path: './Source/loaderConfigurator/dist'
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v1
diff --git a/README.md b/README.md
index 8bb855f2..7137d4bd 100644
--- a/README.md
+++ b/README.md
@@ -93,9 +93,8 @@ This project will not be actively maintained or regularly updated along with Atm
- - Loader configurator
- - Grab [ldr_config.py](https://github.com/KazushiMe/Switch-OC-Suite/raw/master/ldr_config.py) and modify values in `cust_conf` dict.
- - `python ldr_config.py loader.kip -s` will save your configuration in-place.
+ - [Online loader configurator](https://kazushime.github.io/Switch-OC-Suite/)
+ - Tested with latest Chrome(107) and Safari (16) (as of November 2022), older browsers may not work properly.
5. **Hekate-ipl bootloader**
- Rename the kip to `loader.kip` and add `kip1=atmosphere/kips/loader.kip` in `bootloader/hekate_ipl.ini`
diff --git a/Source/loaderConfigurator/.gitignore b/Source/loaderConfigurator/.gitignore
new file mode 100644
index 00000000..320c107b
--- /dev/null
+++ b/Source/loaderConfigurator/.gitignore
@@ -0,0 +1,3 @@
+node_modules/
+dist/
+package-lock.json
diff --git a/Source/loaderConfigurator/package.json b/Source/loaderConfigurator/package.json
new file mode 100644
index 00000000..a763f8c7
--- /dev/null
+++ b/Source/loaderConfigurator/package.json
@@ -0,0 +1,8 @@
+{
+ "devDependencies": {
+ "tailwindcss": "^3.2.2"
+ },
+ "dependencies": {
+ "tw-elements": "^1.0.0-alpha12"
+ }
+}
diff --git a/Source/loaderConfigurator/src/index.html b/Source/loaderConfigurator/src/index.html
new file mode 100644
index 00000000..11c5d9cb
--- /dev/null
+++ b/Source/loaderConfigurator/src/index.html
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/loaderConfigurator/src/output.css b/Source/loaderConfigurator/src/output.css
new file mode 100644
index 00000000..8ba1ff9d
--- /dev/null
+++ b/Source/loaderConfigurator/src/output.css
@@ -0,0 +1,4024 @@
+/*
+! tailwindcss v3.2.2 | MIT License | https://tailwindcss.com
+*/
+
+/*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+*/
+
+*,
+::before,
+::after {
+ box-sizing: border-box;
+ /* 1 */
+ border-width: 0;
+ /* 2 */
+ border-style: solid;
+ /* 2 */
+ border-color: #e5e7eb;
+ /* 2 */
+}
+
+::before,
+::after {
+ --tw-content: '';
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Use the user's configured `sans` font-family by default.
+5. Use the user's configured `sans` font-feature-settings by default.
+*/
+
+html {
+ line-height: 1.5;
+ /* 1 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */
+ -moz-tab-size: 4;
+ /* 3 */
+ -o-tab-size: 4;
+ tab-size: 4;
+ /* 3 */
+ font-family: Inter, sans-serif;
+ /* 4 */
+ font-feature-settings: normal;
+ /* 5 */
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
+*/
+
+body {
+ margin: 0;
+ /* 1 */
+ line-height: inherit;
+ /* 2 */
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+
+hr {
+ height: 0;
+ /* 1 */
+ color: inherit;
+ /* 2 */
+ border-top-width: 1px;
+ /* 3 */
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+/*
+Remove the default font size and weight for headings.
+*/
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+/*
+Reset links to optimize for opt-in styling instead of opt-out.
+*/
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+/*
+Add the correct font weight in Edge and Safari.
+*/
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/*
+1. Use the user's configured `mono` font family by default.
+2. Correct the odd `em` font sizing in all browsers.
+*/
+
+code,
+kbd,
+samp,
+pre {
+ font-family: ui-monospace, monospace;
+ /* 1 */
+ font-size: 1em;
+ /* 2 */
+}
+
+/*
+Add the correct font size in all browsers.
+*/
+
+small {
+ font-size: 80%;
+}
+
+/*
+Prevent `sub` and `sup` elements from affecting the line height in all browsers.
+*/
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+
+table {
+ text-indent: 0;
+ /* 1 */
+ border-color: inherit;
+ /* 2 */
+ border-collapse: collapse;
+ /* 3 */
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ /* 1 */
+ font-size: 100%;
+ /* 1 */
+ font-weight: inherit;
+ /* 1 */
+ line-height: inherit;
+ /* 1 */
+ color: inherit;
+ /* 1 */
+ margin: 0;
+ /* 2 */
+ padding: 0;
+ /* 3 */
+}
+
+/*
+Remove the inheritance of text transform in Edge and Firefox.
+*/
+
+button,
+select {
+ text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+ -webkit-appearance: button;
+ /* 1 */
+ background-color: transparent;
+ /* 2 */
+ background-image: none;
+ /* 2 */
+}
+
+/*
+Use the modern Firefox focus style for all focusable elements.
+*/
+
+:-moz-focusring {
+ outline: auto;
+}
+
+/*
+Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
+*/
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+/*
+Add the correct vertical alignment in Chrome and Firefox.
+*/
+
+progress {
+ vertical-align: baseline;
+}
+
+/*
+Correct the cursor style of increment and decrement buttons in Safari.
+*/
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+
+[type='search'] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ outline-offset: -2px;
+ /* 2 */
+}
+
+/*
+Remove the inner padding in Chrome and Safari on macOS.
+*/
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Change font properties to `inherit` in Safari.
+*/
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ /* 1 */
+ font: inherit;
+ /* 2 */
+}
+
+/*
+Add the correct display in Chrome and Safari.
+*/
+
+summary {
+ display: list-item;
+}
+
+/*
+Removes the default spacing and border for appropriate elements.
+*/
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol,
+ul,
+menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+/*
+Prevent resizing textareas horizontally by default.
+*/
+
+textarea {
+ resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user's configured gray 400 color.
+*/
+
+input::-moz-placeholder, textarea::-moz-placeholder {
+ opacity: 1;
+ /* 1 */
+ color: #9ca3af;
+ /* 2 */
+}
+
+input::placeholder,
+textarea::placeholder {
+ opacity: 1;
+ /* 1 */
+ color: #9ca3af;
+ /* 2 */
+}
+
+/*
+Set the default cursor for buttons.
+*/
+
+button,
+[role="button"] {
+ cursor: pointer;
+}
+
+/*
+Make sure disabled buttons don't get the pointer cursor.
+*/
+
+:disabled {
+ cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+ This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+ display: block;
+ /* 1 */
+ vertical-align: middle;
+ /* 2 */
+}
+
+/*
+Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+
+img,
+video {
+ max-width: 100%;
+ height: auto;
+}
+
+/* Make elements with the HTML hidden attribute stay hidden by default */
+
+[hidden] {
+ display: none;
+}
+
+*, ::before, ::after {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgb(59 130 246 / 0.5);
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+}
+
+::backdrop {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgb(59 130 246 / 0.5);
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+}
+
+.container {
+ width: 100%;
+}
+
+@media (min-width: 640px) {
+ .container {
+ max-width: 640px;
+ }
+}
+
+@media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+}
+
+@media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+}
+
+@media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+}
+
+@media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+}
+
+:root {
+ --bs-blue: #0d6efd;
+ --bs-indigo: #6610f2;
+ --bs-purple: #6f42c1;
+ --bs-pink: #d63384;
+ --bs-red: #dc3545;
+ --bs-orange: #fd7e14;
+ --bs-yellow: #ffc107;
+ --bs-green: #198754;
+ --bs-teal: #20c997;
+ --bs-cyan: #0dcaf0;
+ --bs-white: #fff;
+ --bs-gray: #6c757d;
+ --bs-gray-dark: #343a40;
+ --bs-gray-100: #f8f9fa;
+ --bs-gray-200: #e9ecef;
+ --bs-gray-300: #dee2e6;
+ --bs-gray-400: #ced4da;
+ --bs-gray-500: #adb5bd;
+ --bs-gray-600: #6c757d;
+ --bs-gray-700: #495057;
+ --bs-gray-800: #343a40;
+ --bs-gray-900: #212529;
+ --bs-primary: #0d6efd;
+ --bs-secondary: #6c757d;
+ --bs-success: #198754;
+ --bs-info: #0dcaf0;
+ --bs-warning: #ffc107;
+ --bs-danger: #dc3545;
+ --bs-light: #f8f9fa;
+ --bs-dark: #212529;
+ --bs-primary-rgb: 13, 110, 253;
+ --bs-secondary-rgb: 108, 117, 125;
+ --bs-success-rgb: 25, 135, 84;
+ --bs-info-rgb: 13, 202, 240;
+ --bs-warning-rgb: 255, 193, 7;
+ --bs-danger-rgb: 220, 53, 69;
+ --bs-light-rgb: 248, 249, 250;
+ --bs-dark-rgb: 33, 37, 41;
+ --bs-white-rgb: 255, 255, 255;
+ --bs-black-rgb: 0, 0, 0;
+ --bs-body-color-rgb: 33, 37, 41;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
+ --bs-body-font-family: var(--bs-font-sans-serif);
+ --bs-body-font-size: 1rem;
+ --bs-body-font-weight: 400;
+ --bs-body-line-height: 1.5;
+ --bs-body-color: #212529;
+ --bs-body-bg: #fff;
+}
+
+.form-control[type=file] {
+ overflow: hidden;
+}
+
+.form-control[type=file]:not(:disabled):not([readonly]) {
+ cursor: pointer;
+}
+
+.form-control:focus {
+ box-shadow: 0 0 0 1px #2563eb;
+}
+
+.form-control::file-selector-button {
+ padding: 0.375rem 0.75rem;
+ margin: -0.375rem -0.75rem;
+ -webkit-margin-end: 0.75rem;
+ margin-inline-end: 0.75rem;
+ color: #212529;
+ background-color: #e9ecef;
+ pointer-events: none;
+ border-color: inherit;
+ border-style: solid;
+ border-width: 0;
+ border-inline-end-width: 1px;
+ border-radius: 0;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+ background-color: #dde0e3;
+}
+
+.form-control::-webkit-file-upload-button {
+ padding: 0.375rem 0.75rem;
+ margin: -0.375rem -0.75rem;
+ -webkit-margin-end: 0.75rem;
+ margin-inline-end: 0.75rem;
+ color: #374151;
+ background-color: #f3f4f6;
+ pointer-events: none;
+ border-color: inherit;
+ border-style: solid;
+ border-width: 0;
+ border-inline-end-width: 1px;
+ border-radius: 0;
+ -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+ background-color: #dde0e3;
+}
+
+.btn-check[disabled] + .btn {
+ pointer-events: none;
+ filter: none;
+ opacity: 0.65;
+}
+
+.btn-check[disabled] + .\!btn {
+ pointer-events: none !important;
+ filter: none !important;
+ opacity: 0.65 !important;
+}
+
+.btn-check:disabled + .btn {
+ pointer-events: none;
+ filter: none;
+ opacity: 0.65;
+}
+
+.btn-check:disabled + .\!btn {
+ pointer-events: none !important;
+ filter: none !important;
+ opacity: 0.65 !important;
+}
+
+.form-floating {
+ position: relative;
+}
+
+.form-floating > .form-control {
+ height: calc(3.5rem + 2px);
+ line-height: 1.25;
+ padding: 1rem 0.75rem;
+}
+
+.form-floating > .form-select {
+ height: calc(3.5rem + 2px);
+ line-height: 1.25;
+}
+
+.form-floating > label {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ padding: 1rem 0.75rem;
+ pointer-events: none;
+ border: 1px solid transparent;
+ transform-origin: 0 0;
+ transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
+}
+
+.form-floating > .form-control::-moz-placeholder {
+ color: transparent;
+}
+
+.form-floating > .form-control::placeholder {
+ color: transparent;
+}
+
+.form-floating > .form-control:focus {
+ padding-top: 1.625rem;
+ padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:not(:-moz-placeholder-shown) {
+ padding-top: 1.625rem;
+ padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:not(:placeholder-shown) {
+ padding-top: 1.625rem;
+ padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:-webkit-autofill {
+ padding-top: 1.625rem;
+ padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:focus ~ label {
+ opacity: 0.65;
+ transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
+ opacity: 0.65;
+ transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:not(:placeholder-shown) ~ label {
+ opacity: 0.65;
+ transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-select ~ label {
+ opacity: 0.65;
+ transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.input-group > .form-control {
+ width: 1%;
+}
+
+.input-group > .form-control:focus {
+ z-index: 3;
+}
+
+.input-group .btn {
+ position: relative;
+ z-index: 2;
+}
+
+.input-group .\!btn {
+ position: relative !important;
+ z-index: 2 !important;
+}
+
+.input-group .btn:focus {
+ z-index: 3;
+}
+
+.input-group .\!btn:focus {
+ z-index: 3 !important;
+}
+
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.was-validated .form-control:valid {
+ border-color: #198754;
+ padding-right: calc(1.5em + 0.75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(0.375em + 0.1875rem) center;
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+
+.form-control.is-valid {
+ border-color: #198754;
+ padding-right: calc(1.5em + 0.75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(0.375em + 0.1875rem) center;
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+
+.was-validated .form-control:valid:focus {
+ border-color: #198754;
+ box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.form-control.is-valid:focus {
+ border-color: #198754;
+ box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.was-validated textarea.form-control:valid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+textarea.form-control.is-valid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+.was-validated .input-group .form-control:valid {
+ z-index: 1;
+}
+
+.input-group .form-control.is-valid {
+ z-index: 1;
+}
+
+.was-validated .input-group .form-control:valid:focus {
+ z-index: 3;
+}
+
+.input-group .form-control.is-valid:focus {
+ z-index: 3;
+}
+
+.is-invalid ~ .invalid-feedback {
+ display: block;
+}
+
+.is-invalid ~ .invalid-tooltip {
+ display: block;
+}
+
+.was-validated .form-control:invalid {
+ border-color: #dc3545;
+ padding-right: calc(1.5em + 0.75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(0.375em + 0.1875rem) center;
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+
+.form-control.is-invalid {
+ border-color: #dc3545;
+ padding-right: calc(1.5em + 0.75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(0.375em + 0.1875rem) center;
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+
+.was-validated .form-control:invalid:focus {
+ border-color: #dc3545;
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.form-control.is-invalid:focus {
+ border-color: #dc3545;
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.was-validated textarea.form-control:invalid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+textarea.form-control.is-invalid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+.form-select.is-invalid {
+ border-color: #dc3545;
+}
+
+.form-select.is-invalid:not([multiple]):not([size]) {
+ padding-right: 4.125rem;
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+ background-position: right 0.75rem center, center right 2.25rem;
+ background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+
+.form-select.is-invalid:not([multiple])[size="1"] {
+ padding-right: 4.125rem;
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+ background-position: right 0.75rem center, center right 2.25rem;
+ background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+
+.form-select.is-invalid:focus {
+ border-color: #dc3545;
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.form-check-input.is-invalid {
+ border-color: #dc3545;
+}
+
+.form-check-input.is-invalid:checked {
+ background-color: #dc3545;
+}
+
+.form-check-input.is-invalid:focus {
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.form-check-input.is-invalid ~ .form-check-label {
+ color: #dc3545;
+}
+
+.was-validated .input-group .form-control:invalid {
+ z-index: 2;
+}
+
+.input-group .form-control.is-invalid {
+ z-index: 2;
+}
+
+.input-group .form-select.is-invalid {
+ z-index: 2;
+}
+
+.was-validated .input-group .form-control:invalid:focus {
+ z-index: 3;
+}
+
+.input-group .form-control.is-invalid:focus {
+ z-index: 3;
+}
+
+.input-group .form-select.is-invalid:focus {
+ z-index: 3;
+}
+
+.btn-check:focus + .btn {
+ outline: 0;
+ box-shadow: none;
+}
+
+.btn-check:focus + .\!btn {
+ outline: 0 !important;
+ box-shadow: none !important;
+}
+
+.btn:focus {
+ outline: 0;
+ box-shadow: none;
+}
+
+.\!btn:focus {
+ outline: 0 !important;
+ box-shadow: none !important;
+}
+
+.btn-check:checked + .btn {
+ box-shadow: none;
+}
+
+.btn-check:checked + .\!btn {
+ box-shadow: none !important;
+}
+
+.btn-check:active + .btn {
+ box-shadow: none;
+}
+
+.btn-check:active + .\!btn {
+ box-shadow: none !important;
+}
+
+.btn:active {
+ box-shadow: none;
+}
+
+.\!btn:active {
+ box-shadow: none !important;
+}
+
+.btn.active {
+ box-shadow: none;
+}
+
+.\!btn.active {
+ box-shadow: none !important;
+}
+
+.btn-check:checked + .btn:focus {
+ box-shadow: none;
+}
+
+.btn-check:checked + .\!btn:focus {
+ box-shadow: none !important;
+}
+
+.btn-check:active + .btn:focus {
+ box-shadow: none;
+}
+
+.btn-check:active + .\!btn:focus {
+ box-shadow: none !important;
+}
+
+.btn:active:focus {
+ box-shadow: none;
+}
+
+.\!btn:active:focus {
+ box-shadow: none !important;
+}
+
+.btn.active:focus {
+ box-shadow: none;
+}
+
+.\!btn.active:focus {
+ box-shadow: none !important;
+}
+
+.fade {
+ transition: opacity 0.15s linear;
+}
+
+.fade:not(.show) {
+ opacity: 0;
+}
+
+.collapse:not(.show) {
+ display: none;
+}
+
+.collapsing {
+ height: 0;
+ overflow: hidden;
+ transition: height 0.35s ease;
+}
+
+.collapsing.collapse-horizontal {
+ width: 0;
+ height: auto;
+ transition: width 0.35s ease;
+}
+
+.dropdown-menu {
+ z-index: 1000;
+}
+
+.dropdown-item.active {
+ color: #1f2937;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ background-color: #0d6efd;
+}
+
+.dropdown-item:active {
+ color: #1f2937;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ background-color: #0d6efd;
+}
+
+.dropdown-item:disabled {
+ color: #adb5bd;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+.dropdown-menu.show {
+ display: block;
+}
+
+.dropdown-menu-dark .dropdown-item.active {
+ color: #fff;
+ background-color: #0d6efd;
+}
+
+.dropdown-menu-dark .dropdown-item:active {
+ color: #fff;
+ background-color: #0d6efd;
+}
+
+.dropdown-menu-dark .dropdown-item.disabled {
+ color: #adb5bd;
+}
+
+.dropdown-menu-dark .dropdown-item:disabled {
+ color: #adb5bd;
+}
+
+.nav-tabs .nav-link {
+ color: #4b5563;
+}
+
+.nav-tabs .nav-link:hover {
+ isolation: isolate;
+}
+
+.nav-tabs .nav-link:focus {
+ isolation: isolate;
+}
+
+.nav-tabs .nav-link.disabled {
+ color: #9ca3af;
+ background-color: transparent;
+ border-color: transparent;
+}
+
+.nav-tabs .nav-link.active {
+ color: #2563eb;
+ border-color: #2563eb;
+}
+
+.nav-tabs .nav-item.show .nav-link {
+ color: #2563eb;
+ border-color: #2563eb;
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.nav-pills .nav-link {
+ background: #f3f4f6;
+ color: #4b5563;
+ box-shadow: none;
+}
+
+.nav-pills .nav-link.active {
+ background: #2563eb;
+ color: #fff;
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+}
+
+.nav-pills .show > .nav-link {
+ background: #2563eb;
+ color: #fff;
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+}
+
+.nav-pills .disabled {
+ color: #9ca3af;
+ background-color: rgba(243, 244, 246, 0.5);
+}
+
+.nav-pills.menu-sidebar .nav-link {
+ background-color: transparent;
+ box-shadow: none;
+ padding: 0 5px;
+ border-radius: 0;
+}
+
+.nav-pills.menu-sidebar .nav-link.active {
+ color: #1266f1;
+ font-weight: 600;
+ border-left: 0.125rem solid #1266f1;
+}
+
+.nav-justified > .nav-link {
+ -ms-flex-basis: 0;
+ flex-basis: 0;
+}
+
+.nav-justified .nav-item {
+ -ms-flex-basis: 0;
+ flex-basis: 0;
+}
+
+.tab-content > .active {
+ display: block;
+}
+
+.navbar-expand .navbar-nav {
+ flex-direction: row;
+}
+
+.navbar-expand .navbar-nav .dropdown-menu {
+ position: absolute;
+}
+
+.navbar-expand .navbar-nav .nav-link {
+ padding-right: 0.5rem;
+ padding-left: 0.5rem;
+}
+
+.navbar-expand .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none;
+}
+
+.navbar-light .navbar-nav .nav-link.disabled {
+ color: rgba(0, 0, 0, 0.3);
+}
+
+.navbar-light .navbar-nav .show > .nav-link {
+ color: rgba(0, 0, 0, 0.9);
+}
+
+.navbar-light .navbar-nav .nav-link.active {
+ color: rgba(0, 0, 0, 0.9);
+}
+
+.navbar-dark .navbar-nav .nav-link.disabled {
+ color: rgba(255, 255, 255, 0.25);
+}
+
+.navbar-dark .navbar-nav .show > .nav-link {
+ color: #fff;
+}
+
+.navbar-dark .navbar-nav .nav-link.active {
+ color: #fff;
+}
+
+.accordion-item:last-of-type .accordion-button.collapsed {
+ border-bottom-right-radius: calc(0.5rem - 1px);
+ border-bottom-left-radius: calc(0.5rem - 1px);
+}
+
+.btn-close.disabled {
+ pointer-events: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ opacity: 0.25;
+}
+
+.modal {
+ z-index: 1055;
+}
+
+.modal-dialog {
+ margin: 0.5rem;
+}
+
+.modal.fade .modal-dialog {
+ transition: transform 0.3s ease-out;
+ transform: translate(0, -50px);
+}
+
+.modal.show .modal-dialog {
+ transform: none;
+}
+
+.modal.modal-static .modal-dialog {
+ transform: scale(1.02);
+}
+
+.modal-dialog-scrollable .modal-body {
+ overflow-y: auto;
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1050;
+ width: 100vw;
+ height: 100vh;
+ background-color: #000;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+}
+
+.modal-backdrop.show {
+ opacity: 0.5;
+}
+
+.modal-body {
+ flex: 1 1 auto;
+}
+
+.modal-fullscreen .modal-body {
+ overflow-y: auto;
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1080;
+ display: block;
+ margin: 0;
+ font-family: var(--bs-font-sans-serif);
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ -webkit-text-align: start;
+ text-align: start;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ -webkit-text-shadow: none;
+ text-shadow: none;
+ -webkit-text-transform: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: 0.875rem;
+ word-wrap: break-word;
+ opacity: 0;
+}
+
+.tooltip.show {
+ opacity: 1;
+}
+
+.bs-tooltip-top .tooltip-arrow {
+ bottom: 0;
+}
+
+.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {
+ bottom: 0;
+}
+
+.bs-tooltip-top .tooltip-arrow::before {
+ top: -1px;
+ border-width: 0.4rem 0.4rem 0;
+ border-top-color: #000;
+}
+
+.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {
+ top: -1px;
+ border-width: 0.4rem 0.4rem 0;
+ border-top-color: #000;
+}
+
+.bs-tooltip-end .tooltip-arrow {
+ left: 0;
+ width: 0.4rem;
+ height: 0.8rem;
+}
+
+.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {
+ left: 0;
+ width: 0.4rem;
+ height: 0.8rem;
+}
+
+.bs-tooltip-end .tooltip-arrow::before {
+ right: -1px;
+ border-width: 0.4rem 0.4rem 0.4rem 0;
+ border-right-color: #000;
+}
+
+.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {
+ right: -1px;
+ border-width: 0.4rem 0.4rem 0.4rem 0;
+ border-right-color: #000;
+}
+
+.bs-tooltip-bottom .tooltip-arrow {
+ top: 0;
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {
+ top: 0;
+}
+
+.bs-tooltip-bottom .tooltip-arrow::before {
+ bottom: -1px;
+ border-width: 0 0.4rem 0.4rem;
+ border-bottom-color: #000;
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {
+ bottom: -1px;
+ border-width: 0 0.4rem 0.4rem;
+ border-bottom-color: #000;
+}
+
+.bs-tooltip-start .tooltip-arrow {
+ right: 0;
+ width: 0.4rem;
+ height: 0.8rem;
+}
+
+.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {
+ right: 0;
+ width: 0.4rem;
+ height: 0.8rem;
+}
+
+.bs-tooltip-start .tooltip-arrow::before {
+ left: -1px;
+ border-width: 0.4rem 0 0.4rem 0.4rem;
+ border-left-color: #000;
+}
+
+.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {
+ left: -1px;
+ border-width: 0.4rem 0 0.4rem 0.4rem;
+ border-left-color: #000;
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ font-size: 14px;
+ padding: 6px 16px;
+ color: #fff;
+ -webkit-text-align: center;
+ text-align: center;
+ background-color: #6d6d6d;
+ border-radius: 0.25rem;
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1070;
+ display: block;
+ max-width: 276px;
+ font-family: var(--bs-font-sans-serif);
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ -webkit-text-align: start;
+ text-align: start;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ -webkit-text-shadow: none;
+ text-shadow: none;
+ -webkit-text-transform: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: 0.875rem;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 0;
+ border-radius: 0.5rem;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+}
+
+.bs-popover-top > .popover-arrow {
+ bottom: calc(-0.5rem - 1px);
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow {
+ bottom: calc(-0.5rem - 1px);
+}
+
+.bs-popover-top > .popover-arrow::before {
+ bottom: 0;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {
+ bottom: 0;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-top > .popover-arrow::after {
+ bottom: 1px;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: #fff;
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+ bottom: 1px;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: #fff;
+}
+
+.bs-popover-end > .popover-arrow {
+ left: calc(-0.5rem - 1px);
+ width: 0.5rem;
+ height: 1rem;
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow {
+ left: calc(-0.5rem - 1px);
+ width: 0.5rem;
+ height: 1rem;
+}
+
+.bs-popover-end > .popover-arrow::before {
+ left: 0;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {
+ left: 0;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-end > .popover-arrow::after {
+ left: 1px;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: #fff;
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+ left: 1px;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: #fff;
+}
+
+.bs-popover-bottom > .popover-arrow {
+ top: calc(-0.5rem - 1px);
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {
+ top: calc(-0.5rem - 1px);
+}
+
+.bs-popover-bottom > .popover-arrow::before {
+ top: 0;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {
+ top: 0;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-bottom > .popover-arrow::after {
+ top: 1px;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: #fff;
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+ top: 1px;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: #fff;
+}
+
+.bs-popover-bottom .popover-header::before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: 1rem;
+ margin-left: -0.5rem;
+ content: "";
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: 1rem;
+ margin-left: -0.5rem;
+ content: "";
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.bs-popover-start > .popover-arrow {
+ right: calc(-0.5rem - 1px);
+ width: 0.5rem;
+ height: 1rem;
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow {
+ right: calc(-0.5rem - 1px);
+ width: 0.5rem;
+ height: 1rem;
+}
+
+.bs-popover-start > .popover-arrow::before {
+ right: 0;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {
+ right: 0;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-start > .popover-arrow::after {
+ right: 1px;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: #fff;
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+ right: 1px;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: #fff;
+}
+
+.popover-header {
+ padding: 0.5rem 1rem;
+ margin-bottom: 0;
+ font-size: 1rem;
+ background-color: #fff;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+ border-top-left-radius: 0.5rem;
+ border-top-right-radius: 0.5rem;
+ font-weight: 500;
+}
+
+.popover-header:empty {
+ display: none;
+}
+
+.popover-body {
+ padding: 1rem 1rem;
+ color: #212529;
+}
+
+.carousel.pointer-event {
+ touch-action: pan-y;
+}
+
+.carousel-item {
+ display: none;
+ margin-right: -100%;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ transition: transform 0.6s ease-in-out;
+}
+
+.carousel-item.active {
+ display: block;
+}
+
+.carousel-item-next {
+ display: block;
+}
+
+.carousel-item-prev {
+ display: block;
+}
+
+.carousel-item-next:not(.carousel-item-start) {
+ transform: translateX(100%);
+}
+
+.active.carousel-item-end {
+ transform: translateX(100%);
+}
+
+.carousel-item-prev:not(.carousel-item-end) {
+ transform: translateX(-100%);
+}
+
+.active.carousel-item-start {
+ transform: translateX(-100%);
+}
+
+.carousel-fade .carousel-item {
+ opacity: 0;
+ transition-property: opacity;
+ transform: none;
+}
+
+.carousel-fade .carousel-item.active {
+ z-index: 1;
+ opacity: 1;
+}
+
+.carousel-fade .carousel-item-next.carousel-item-start {
+ z-index: 1;
+ opacity: 1;
+}
+
+.carousel-fade .carousel-item-prev.carousel-item-end {
+ z-index: 1;
+ opacity: 1;
+}
+
+.carousel-fade .active.carousel-item-start {
+ z-index: 0;
+ opacity: 0;
+ transition: opacity 0s 0.6s;
+}
+
+.carousel-fade .active.carousel-item-end {
+ z-index: 0;
+ opacity: 0;
+ transition: opacity 0s 0.6s;
+}
+
+.carousel-indicators {
+ z-index: 2;
+ margin-right: 15%;
+ margin-left: 15%;
+ list-style: none;
+}
+
+.carousel-indicators [data-bs-target] {
+ box-sizing: content-box;
+ flex: 0 1 auto;
+ width: 30px;
+ height: 3px;
+ padding: 0;
+ margin-right: 3px;
+ margin-left: 3px;
+ -webkit-text-indent: -999px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 0;
+ border-top: 10px solid transparent;
+ border-bottom: 10px solid transparent;
+ opacity: 0.5;
+ transition: opacity 0.6s ease;
+}
+
+.carousel-indicators .active {
+ opacity: 1;
+}
+
+.carousel-dark .carousel-indicators [data-bs-target] {
+ background-color: #000;
+}
+
+.offcanvas {
+ z-index: 1045;
+}
+
+.offcanvas-backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1040;
+ width: 100vw;
+ height: 100vh;
+ background-color: #000;
+}
+
+.offcanvas-backdrop.fade {
+ opacity: 0;
+}
+
+.offcanvas-backdrop.show {
+ opacity: 0.5;
+}
+
+.offcanvas.show {
+ transform: none;
+}
+
+.sticky-top {
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+}
+
+.vr {
+ display: inline-block;
+ align-self: stretch;
+ width: 1px;
+ min-height: 1em;
+ background-color: currentColor;
+ opacity: 0.25;
+}
+
+.animation {
+ animation-duration: 1s;
+ animation-fill-mode: both;
+ padding: auto;
+}
+
+.fade-in {
+ animation-name: _fade-in;
+}
+
+.fade-out {
+ animation-name: _fade-out;
+}
+
+.animation.infinite {
+ animation-iteration-count: infinite;
+}
+
+.animation.delay-1s {
+ animation-delay: 1s;
+}
+
+.animation.delay-2s {
+ animation-delay: 2s;
+}
+
+.animation.delay-3s {
+ animation-delay: 3s;
+}
+
+.animation.delay-4s {
+ animation-delay: 4s;
+}
+
+.animation.delay-5s {
+ animation-delay: 5s;
+}
+
+.animation.fast {
+ animation-duration: 800ms;
+}
+
+.animation.faster {
+ animation-duration: 500ms;
+}
+
+.animation.slow {
+ animation-duration: 2s;
+}
+
+.animation.slower {
+ animation-duration: 3s;
+}
+
+.slide-in-left {
+ animation-name: _slide-in-left;
+}
+
+.slide-in-right {
+ animation-name: _slide-in-right;
+}
+
+.slide-out-left {
+ animation-name: _slide-out-left;
+}
+
+.slide-out-right {
+ animation-name: _slide-out-right;
+}
+
+.ripple-surface {
+ position: relative;
+ overflow: hidden;
+ display: inline-block;
+ vertical-align: bottom;
+}
+
+.ripple-surface-unbound {
+ overflow: visible;
+}
+
+.ripple-wave {
+ background-image: radial-gradient(circle, rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, transparent 70%);
+ border-radius: 50%;
+ opacity: 0.5;
+ pointer-events: none;
+ position: absolute;
+ touch-action: none;
+ transform: scale(0);
+ transition-property: transform, opacity;
+ transition-timing-function: cubic-bezier(0, 0, 0.15, 1), cubic-bezier(0, 0, 0.15, 1);
+ z-index: 999;
+}
+
+.ripple-wave.active {
+ transform: scale(1);
+ opacity: 0;
+}
+
+.btn .ripple-wave {
+ background-image: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+}
+
+.\!btn .ripple-wave {
+ background-image: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%) !important;
+}
+
+.ripple-surface-primary .ripple-wave {
+ background-image: radial-gradient(circle, rgba(18, 102, 241, 0.2) 0, rgba(18, 102, 241, 0.3) 40%, rgba(18, 102, 241, 0.4) 50%, rgba(18, 102, 241, 0.5) 60%, rgba(18, 102, 241, 0) 70%);
+}
+
+.ripple-surface-secondary .ripple-wave {
+ background-image: radial-gradient(circle, rgba(178, 60, 253, 0.2) 0, rgba(178, 60, 253, 0.3) 40%, rgba(178, 60, 253, 0.4) 50%, rgba(178, 60, 253, 0.5) 60%, rgba(178, 60, 253, 0) 70%);
+}
+
+.ripple-surface-success .ripple-wave {
+ background-image: radial-gradient(circle, rgba(0, 183, 74, 0.2) 0, rgba(0, 183, 74, 0.3) 40%, rgba(0, 183, 74, 0.4) 50%, rgba(0, 183, 74, 0.5) 60%, rgba(0, 183, 74, 0) 70%);
+}
+
+.ripple-surface-info .ripple-wave {
+ background-image: radial-gradient(circle, rgba(57, 192, 237, 0.2) 0, rgba(57, 192, 237, 0.3) 40%, rgba(57, 192, 237, 0.4) 50%, rgba(57, 192, 237, 0.5) 60%, rgba(57, 192, 237, 0) 70%);
+}
+
+.ripple-surface-warning .ripple-wave {
+ background-image: radial-gradient(circle, rgba(255, 169, 0, 0.2) 0, rgba(255, 169, 0, 0.3) 40%, rgba(255, 169, 0, 0.4) 50%, rgba(255, 169, 0, 0.5) 60%, rgba(255, 169, 0, 0) 70%);
+}
+
+.ripple-surface-danger .ripple-wave {
+ background-image: radial-gradient(circle, rgba(249, 49, 84, 0.2) 0, rgba(249, 49, 84, 0.3) 40%, rgba(249, 49, 84, 0.4) 50%, rgba(249, 49, 84, 0.5) 60%, rgba(249, 49, 84, 0) 70%);
+}
+
+.ripple-surface-light .ripple-wave {
+ background-image: radial-gradient(circle, rgba(251, 251, 251, 0.2) 0, rgba(251, 251, 251, 0.3) 40%, rgba(251, 251, 251, 0.4) 50%, rgba(251, 251, 251, 0.5) 60%, rgba(251, 251, 251, 0) 70%);
+}
+
+.ripple-surface-dark .ripple-wave {
+ background-image: radial-gradient(circle, rgba(38, 38, 38, 0.2) 0, rgba(38, 38, 38, 0.3) 40%, rgba(38, 38, 38, 0.4) 50%, rgba(38, 38, 38, 0.5) 60%, rgba(38, 38, 38, 0) 70%);
+}
+
+.ripple-surface-white .ripple-wave {
+ background-image: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+}
+
+.ripple-surface-black .ripple-wave {
+ background-image: radial-gradient(circle, rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, transparent 70%);
+}
+
+.datepicker-toggle-button {
+ position: absolute;
+ outline: none;
+ border: none;
+ background-color: transparent;
+ right: 10px;
+ top: 50%;
+ transform: translate(-50%, -50%);
+}
+
+.datepicker-toggle-button:focus {
+ color: #2979ff;
+}
+
+.datepicker-toggle-button:hover {
+ color: #2979ff;
+}
+
+.datepicker-backdrop {
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.4);
+ z-index: 1065;
+}
+
+.datepicker-dropdown-container {
+ width: 328px;
+ height: 380px;
+ background-color: #fff;
+ border-radius: 0.5rem;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ z-index: 1066;
+}
+
+.datepicker-modal-container {
+ display: flex;
+ flex-direction: column;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 328px;
+ height: 512px;
+ background-color: #fff;
+ border-radius: 0.6rem 0.6rem 0.5rem 0.5rem;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ z-index: 1066;
+}
+
+.datepicker-header {
+ height: 120px;
+ padding-right: 24px;
+ padding-left: 24px;
+ background-color: #2979ff;
+ display: flex;
+ flex-direction: column;
+ border-radius: 0.5rem 0.5rem 0 0;
+}
+
+.datepicker-title {
+ height: 32px;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+}
+
+.datepicker-title-text {
+ font-size: 10px;
+ font-weight: 400;
+ -webkit-text-transform: uppercase;
+ text-transform: uppercase;
+ letter-spacing: 1.7px;
+ color: #fff;
+}
+
+.datepicker-date {
+ height: 72px;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+}
+
+.datepicker-date-text {
+ font-size: 34px;
+ font-weight: 400;
+ color: #fff;
+}
+
+.datepicker-main {
+ position: relative;
+ height: 100%;
+}
+
+.datepicker-date-controls {
+ padding: 10px 12px 0 12px;
+ display: flex;
+ justify-content: space-between;
+ color: rgba(0, 0, 0, 0.64);
+}
+
+.datepicker-view-change-button {
+ padding: 10px;
+ color: #666;
+ font-weight: 500;
+ font-size: 0.9rem;
+ border-radius: 10px;
+ box-shadow: none;
+ background-color: transparent;
+ margin: 0;
+ border: none;
+}
+
+.datepicker-view-change-button:hover {
+ background-color: #eee;
+}
+
+.datepicker-view-change-button:focus {
+ background-color: #eee;
+}
+
+.datepicker-view-change-button:after {
+ content: "";
+ display: inline-block;
+ width: 0;
+ height: 0;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top-width: 5px;
+ border-top-style: solid;
+ margin: 0 0 0 5px;
+ vertical-align: middle;
+}
+
+.datepicker-arrow-controls {
+ margin-top: 10px;
+}
+
+.datepicker-previous-button {
+ position: relative;
+ padding: 0;
+ width: 40px;
+ height: 40px;
+ line-height: 40px;
+ border: none;
+ outline: none;
+ margin: 0;
+ color: rgba(0, 0, 0, 0.64);
+ background-color: transparent;
+ margin-right: 24px;
+}
+
+.datepicker-previous-button:hover {
+ background-color: #eee;
+ border-radius: 50%;
+}
+
+.datepicker-previous-button:focus {
+ background-color: #eee;
+ border-radius: 50%;
+}
+
+.datepicker-previous-button::after {
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ position: absolute;
+ content: "";
+ margin: 15.5px;
+ border: 0 solid currentColor;
+ border-top-width: 2px;
+ border-left-width: 2px;
+ transform: translateX(2px) rotate(-45deg);
+}
+
+.datepicker-next-button {
+ position: relative;
+ padding: 0;
+ width: 40px;
+ height: 40px;
+ line-height: 40px;
+ border: none;
+ outline: none;
+ margin: 0;
+ color: rgba(0, 0, 0, 0.64);
+ background-color: transparent;
+}
+
+.datepicker-next-button:hover {
+ background-color: #eee;
+ border-radius: 50%;
+}
+
+.datepicker-next-button:focus {
+ background-color: #eee;
+ border-radius: 50%;
+}
+
+.datepicker-next-button::after {
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ position: absolute;
+ content: "";
+ margin: 15.5px;
+ border: 0 solid currentColor;
+ border-top-width: 2px;
+ border-right-width: 2px;
+ transform: translateX(-2px) rotate(45deg);
+}
+
+.datepicker-view {
+ padding-left: 12px;
+ padding-right: 12px;
+ outline: none;
+}
+
+.datepicker-table {
+ margin-right: auto;
+ margin-left: auto;
+ width: 304px;
+}
+
+.datepicker-day-heading {
+ width: 40px;
+ height: 40px;
+ -webkit-text-align: center;
+ text-align: center;
+ font-size: 12px;
+ font-weight: 400;
+}
+
+.datepicker-cell {
+ -webkit-text-align: center;
+ text-align: center;
+}
+
+.datepicker-cell.disabled {
+ color: #ccc;
+ cursor: default;
+ pointer-events: none;
+}
+
+.datepicker-cell.disabled:hover {
+ cursor: default;
+}
+
+.datepicker-cell:hover {
+ cursor: pointer;
+}
+
+.datepicker-cell:not(.disabled):not(.selected):hover .datepicker-cell-content {
+ background-color: #d3d3d3;
+}
+
+.datepicker-cell.selected .datepicker-cell-content {
+ background-color: #2979ff;
+ color: #fff;
+}
+
+.datepicker-cell:not(.selected).focused .datepicker-cell-content {
+ background-color: #eee;
+}
+
+.datepicker-cell.focused .datepicker-cell-content.selected {
+ background-color: #2979ff;
+}
+
+.datepicker-cell.current .datepicker-cell-content {
+ border: 1px solid #000;
+}
+
+.datepicker-small-cell {
+ width: 40px;
+ height: 40px;
+}
+
+.datepicker-small-cell-content {
+ width: 36px;
+ height: 36px;
+ line-height: 36px;
+ border-radius: 50%;
+ font-size: 13px;
+}
+
+.datepicker-large-cell {
+ width: 76px;
+ height: 42px;
+}
+
+.datepicker-large-cell-content {
+ width: 72px;
+ height: 40px;
+ line-height: 40px;
+ padding: 1px 2px;
+ border-radius: 999px;
+}
+
+.datepicker-footer {
+ height: 56px;
+ display: flex;
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ justify-content: flex-end;
+ align-items: center;
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+.datepicker-footer-btn {
+ background-color: #fff;
+ color: #2979ff;
+ border: none;
+ cursor: pointer;
+ padding: 0 10px;
+ -webkit-text-transform: uppercase;
+ text-transform: uppercase;
+ font-size: 0.8rem;
+ font-weight: 500;
+ height: 40px;
+ line-height: 40px;
+ letter-spacing: 0.1rem;
+ border-radius: 10px;
+ margin-bottom: 10px;
+}
+
+.datepicker-footer-btn:hover {
+ background-color: #eee;
+}
+
+.datepicker-footer-btn:focus {
+ background-color: #eee;
+}
+
+.datepicker-clear-btn {
+ margin-right: auto;
+}
+
+.timepicker-wrapper {
+ touch-action: none;
+ z-index: 1065;
+ opacity: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.4);
+}
+
+.timepicker-elements {
+ min-width: 310px;
+ min-height: 325px;
+ background: #fff;
+ border-top-right-radius: 0.6rem;
+ border-top-left-radius: 0.6rem;
+}
+
+.timepicker-head {
+ background-color: #2979ff;
+ height: 100px;
+ border-top-right-radius: 0.5rem;
+ border-top-left-radius: 0.5rem;
+ padding: 10px 24px 10px 50px;
+}
+
+.timepicker-button {
+ font-size: 0.8rem;
+ min-width: 64px;
+ box-sizing: border-box;
+ font-weight: 500;
+ line-height: 40px;
+ border-radius: 10px;
+ letter-spacing: 0.1rem;
+ -webkit-text-transform: uppercase;
+ text-transform: uppercase;
+ color: #2979ff;
+ border: none;
+ background-color: transparent;
+ transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
+ outline: none;
+ padding: 0 10px;
+ height: 40px;
+ margin-bottom: 10px;
+}
+
+.timepicker-button:hover {
+ background-color: rgba(0, 0, 0, 0.08);
+}
+
+.timepicker-button:focus {
+ outline: none;
+ background-color: rgba(0, 0, 0, 0.08);
+}
+
+.timepicker-current {
+ font-size: 3.75rem;
+ font-weight: 300;
+ line-height: 1.2;
+ letter-spacing: -0.00833em;
+ color: #fff;
+ opacity: 0.54;
+ border: none;
+ background: transparent;
+ padding: 0;
+}
+
+.timepicker-current.active {
+ opacity: 1;
+}
+
+.timepicker-current-wrapper {
+ direction: ltr;
+}
+
+.timepicker-mode-wrapper {
+ margin-left: 20px;
+ font-size: 18px;
+ color: rgba(255, 255, 255, 0.54);
+}
+
+.timepicker-mode-wrapper.active {
+ opacity: 1;
+}
+
+.timepicker-clock-wrapper {
+ min-width: 310px;
+ max-width: 325px;
+ min-height: 305px;
+ overflow-x: hidden;
+ height: 100%;
+}
+
+.timepicker-clock {
+ position: relative;
+ border-radius: 100%;
+ width: 260px;
+ height: 260px;
+ cursor: default;
+ margin: 0 auto;
+ background-color: rgba(0, 0, 0, 0.07);
+}
+
+.timepicker-time-tips-minutes.active {
+ color: #fff;
+ background-color: #2979ff;
+ font-weight: 400;
+}
+
+.timepicker-time-tips-inner.active {
+ color: #fff;
+ background-color: #2979ff;
+ font-weight: 400;
+}
+
+.timepicker-time-tips-hours.active {
+ color: #fff;
+ background-color: #2979ff;
+ font-weight: 400;
+}
+
+.timepicker-time-tips-minutes.disabled {
+ color: #b3afaf;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+.timepicker-time-tips-inner.disabled {
+ color: #b3afaf;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+.timepicker-time-tips-hours.disabled {
+ color: #b3afaf;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+.timepicker-dot {
+ font-weight: 300;
+ line-height: 1.2;
+ letter-spacing: -0.00833em;
+ color: #fff;
+ font-size: 3.75rem;
+ opacity: 0.54;
+ border: none;
+ background: transparent;
+ padding: 0;
+}
+
+.timepicker-middle-dot {
+ top: 50%;
+ left: 50%;
+ width: 6px;
+ height: 6px;
+ transform: translate(-50%, -50%);
+ border-radius: 50%;
+ background-color: #2979ff;
+}
+
+.timepicker-hand-pointer {
+ background-color: #2979ff;
+ bottom: 50%;
+ height: 40%;
+ left: calc(50% - 1px);
+ transform-origin: center bottom 0;
+ width: 2px;
+}
+
+.timepicker-time-tips.active {
+ color: #fff;
+}
+
+.timepicker-circle {
+ top: -21px;
+ left: -15px;
+ width: 4px;
+ border: 14px solid #2979ff;
+ height: 4px;
+ box-sizing: content-box;
+ border-radius: 100%;
+}
+
+.timepicker-hour-mode {
+ padding: 0;
+ background-color: transparent;
+ border: none;
+ color: #fff;
+ opacity: 0.54;
+ cursor: pointer;
+}
+
+.timepicker-hour {
+ cursor: pointer;
+}
+
+.timepicker-minute {
+ cursor: pointer;
+}
+
+.timepicker-hour-mode:hover {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-hour-mode:focus {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-hour:hover {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-hour:focus {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-minute:hover {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-minute:focus {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-hour-mode.active {
+ color: #fff;
+ opacity: 1;
+}
+
+.timepicker-hour.active {
+ color: #fff;
+ opacity: 1;
+}
+
+.timepicker-minute.active {
+ color: #fff;
+ opacity: 1;
+}
+
+.timepicker-footer {
+ border-bottom-left-radius: 0.5rem;
+ border-bottom-right-radius: 0.5rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ height: 56px;
+ padding-left: 12px;
+ padding-right: 12px;
+ background-color: #fff;
+}
+
+.timepicker-container {
+ max-height: calc(100% - 64px);
+ overflow-y: auto;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+}
+
+.timepicker-icon-up.active {
+ opacity: 1;
+}
+
+.timepicker-icon-down.active {
+ opacity: 1;
+}
+
+.timepicker-toggle-button {
+ position: absolute;
+ outline: none;
+ border: none;
+ background-color: transparent;
+ right: 10px;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ transition: all 0.3s ease;
+ cursor: pointer;
+}
+
+.timepicker-toggle-button:hover {
+ color: #2979ff;
+}
+
+.timepicker-toggle-button:focus {
+ color: #2979ff;
+}
+
+.timepicker-input:focus + .timepicker-toggle-button {
+ color: #2979ff;
+}
+
+.timepicker-input:focus + .timepicker-toggle-button i {
+ color: #2979ff;
+}
+
+.timepicker a.timepicker-toggle-button {
+ right: 1px;
+}
+
+.timepicker-toggle-button.timepicker-icon {
+ right: 1px;
+}
+
+.timepicker-modal .fade.show {
+ opacity: 1;
+}
+
+.stepper {
+ position: relative;
+ padding: 0;
+ margin: 0;
+ width: 100%;
+ list-style: none;
+ overflow: hidden;
+ transition: height 0.2s ease-in-out;
+}
+
+.stepper:not(.stepper-vertical) {
+ display: flex;
+ justify-content: space-between;
+}
+
+.stepper:not(.stepper-vertical) .stepper-content {
+ position: absolute;
+ width: 100%;
+ padding: 1rem;
+}
+
+.stepper:not(.stepper-vertical) .stepper-step {
+ flex: auto;
+ height: 4.5rem;
+}
+
+.stepper:not(.stepper-vertical) .stepper-step:first-child .stepper-head {
+ padding-left: 1.5rem;
+}
+
+.stepper:not(.stepper-vertical) .stepper-step:last-child .stepper-head {
+ padding-right: 1.5rem;
+}
+
+.stepper:not(.stepper-vertical) .stepper-step:not(:first-child) .stepper-head:before {
+ flex: 1;
+ height: 1px;
+ width: 100%;
+ margin-right: 0.5rem;
+ content: "";
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+.stepper:not(.stepper-vertical) .stepper-step:not(:last-child) .stepper-head:after {
+ flex: 1;
+ height: 1px;
+ width: 100%;
+ margin-left: 0.5rem;
+ content: "";
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+.stepper:not(.stepper-vertical) .stepper-head-icon {
+ margin: 1.5rem 0.5rem 1.5rem 0;
+}
+
+.stepper.stepper-mobile {
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.stepper.stepper-mobile.stepper-progress-bar .stepper-head-icon {
+ display: none;
+}
+
+.stepper.stepper-mobile .stepper-step {
+ flex: unset;
+ height: -moz-fit-content;
+ height: fit-content;
+ margin: 1rem 0 1rem 0;
+}
+
+.stepper.stepper-mobile .stepper-step:not(:last-child) .stepper-head:after {
+ margin-left: 0;
+}
+
+.stepper.stepper-mobile .stepper-step:not(:first-child) .stepper-head:before {
+ margin-right: 0;
+}
+
+.stepper.stepper-mobile .stepper-step:not(:last-child):not(:first-child) .stepper-head {
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+}
+
+.stepper.stepper-mobile .stepper-head-icon {
+ font-size: 0;
+ margin: 0;
+ height: 0.5rem;
+ width: 0.5rem;
+ z-index: 1;
+}
+
+.stepper.stepper-mobile .stepper-head-text {
+ display: none;
+}
+
+.stepper.stepper-mobile .stepper-content {
+ top: 2.56rem;
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-control::file-selector-button {
+ transition: none;
+ }
+
+ .form-control::-webkit-file-upload-button {
+ -webkit-transition: none;
+ transition: none;
+ }
+
+ .form-switch .form-check-input {
+ transition: none;
+ }
+
+ .form-range::-webkit-slider-thumb {
+ -webkit-transition: none;
+ transition: none;
+ }
+
+ .form-range::-moz-range-thumb {
+ -moz-transition: none;
+ transition: none;
+ }
+
+ .form-floating > label {
+ transition: none;
+ }
+
+ .fade {
+ transition: none;
+ }
+
+ .collapsing {
+ transition: none;
+ }
+
+ .collapsing.collapse-horizontal {
+ transition: none;
+ }
+
+ .accordion-button::after {
+ transition: none;
+ }
+
+ .modal.fade .modal-dialog {
+ transition: none;
+ }
+
+ .carousel-item {
+ transition: none;
+ }
+
+ .carousel-fade .active.carousel-item-start {
+ transition: none;
+ }
+
+ .carousel-fade .active.carousel-item-end {
+ transition: none;
+ }
+
+ .carousel-control-prev {
+ transition: none;
+ }
+
+ .carousel-control-next {
+ transition: none;
+ }
+
+ .carousel-indicators [data-bs-target] {
+ transition: none;
+ }
+
+ .spinner-border {
+ animation-duration: 1.5s;
+ }
+
+ .spinner-grow {
+ animation-duration: 1.5s;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-sm .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-sm .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-sm .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-sm .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-sm .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none;
+ }
+
+ .navbar-expand-sm .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-sm .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-sm .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .modal-dialog {
+ max-width: 500px;
+ margin: 1.75rem auto;
+ }
+
+ .modal-dialog-scrollable {
+ height: calc(100% - 3.5rem);
+ }
+
+ .modal-dialog-centered {
+ min-height: calc(100% - 3.5rem);
+ }
+
+ .modal-sm {
+ max-width: 300px;
+ }
+
+ .sticky-sm-top {
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-md .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-md .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-md .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-md .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-md .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none;
+ }
+
+ .navbar-expand-md .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-md .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-md .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .sticky-md-top {
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-lg .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-lg .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-lg .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-lg .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-lg .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none;
+ }
+
+ .navbar-expand-lg .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-lg .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-lg .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .modal-lg {
+ max-width: 800px;
+ }
+
+ .modal-xl {
+ max-width: 800px;
+ }
+
+ .sticky-lg-top {
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-xl .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-xl .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-xl .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-xl .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-xl .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none;
+ }
+
+ .navbar-expand-xl .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-xl .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-xl .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .modal-xl {
+ max-width: 1140px;
+ }
+
+ .sticky-xl-top {
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-xxl .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-xxl .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-xxl .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-xxl .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-xxl .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none;
+ }
+
+ .navbar-expand-xxl .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-xxl .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-xxl .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .sticky-xxl-top {
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@media (max-width: 575.98px) {
+ .modal-fullscreen-sm-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0;
+ }
+
+ .modal-fullscreen-sm-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-sm-down .modal-header {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-sm-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-sm-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@media (max-width: 767.98px) {
+ .modal-fullscreen-md-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0;
+ }
+
+ .modal-fullscreen-md-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-md-down .modal-header {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-md-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-md-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@media (max-width: 991.98px) {
+ .modal-fullscreen-lg-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0;
+ }
+
+ .modal-fullscreen-lg-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-lg-down .modal-header {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-lg-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-lg-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@media (max-width: 1199.98px) {
+ .modal-fullscreen-xl-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0;
+ }
+
+ .modal-fullscreen-xl-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-xl-down .modal-header {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-xl-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-xl-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@media (max-width: 1399.98px) {
+ .modal-fullscreen-xxl-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0;
+ }
+
+ .modal-fullscreen-xxl-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-xxl-down .modal-header {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-xxl-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-xxl-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@media (prefers-reduced-motion) {
+ .animation {
+ transition: none !important;
+ animation: unset !important;
+ }
+}
+
+@media screen and (min-width: 320px) and (max-width: 820px) and (orientation: landscape) {
+ .datepicker-modal-container .datepicker-header {
+ height: 100%;
+ }
+
+ .datepicker-modal-container .datepicker-date {
+ margin-top: 100px;
+ }
+
+ .datepicker-modal-container .datepicker-day-cell {
+ width: 32x;
+ height: 32x;
+ }
+
+ .datepicker-modal-container {
+ flex-direction: row;
+ width: 475px;
+ height: 360px;
+ }
+
+ .datepicker-modal-container.datepicker-day-cell {
+ width: 36px;
+ height: 36px;
+ }
+}
+
+@media screen and (min-width: 320px) and (max-width: 825px) and (orientation: landscape) {
+ .timepicker-elements {
+ flex-direction: row !important;
+ border-bottom-left-radius: 0.5rem;
+ min-width: auto;
+ min-height: auto;
+ overflow-y: auto;
+ }
+
+ .timepicker-head {
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ padding: 10px;
+ padding-right: 10px !important;
+ height: auto;
+ min-height: 305px;
+ }
+
+ .timepicker-head-content {
+ flex-direction: column;
+ }
+
+ .timepicker-mode-wrapper {
+ justify-content: space-around !important;
+ flex-direction: row !important;
+ }
+
+ .timepicker-current {
+ font-size: 3rem;
+ font-weight: 400;
+ }
+
+ .timepicker-dot {
+ font-size: 3rem;
+ font-weight: 400;
+ }
+}
+
+@keyframes _spinner-grow {
+ 0% {
+ transform: scale(0);
+ }
+
+ 50% {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+@keyframes _fade-in {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes _fade-out {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+@keyframes _fade-in-down {
+ from {
+ opacity: 0;
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _fade-in-left {
+ from {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _fade-in-right {
+ from {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _fade-in-up {
+ from {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _fade-out-down {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes _fade-out-left {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes _fade-out-right {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@keyframes _fade-out-up {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@keyframes _slide-in-down {
+ from {
+ visibility: visible;
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _slide-in-left {
+ from {
+ visibility: visible;
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _slide-in-right {
+ from {
+ visibility: visible;
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _slide-in-up {
+ from {
+ visibility: visible;
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _slide-out-down {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes _slide-out-left {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes _slide-out-right {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@keyframes _slide-out-up {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@keyframes _slide-down {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes _slide-left {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes _slide-right {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@keyframes _slide-up {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@keyframes _zoom-in {
+ from {
+ opacity: 0;
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+@keyframes _zoom-out {
+ from {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+@keyframes _tada {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 10% {
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 20% {
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 30% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 50% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 70% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 90% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 40% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 60% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 80% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes _pulse {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 50% {
+ transform: scale3d(1.05, 1.05, 1.05);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes _show-up-clock {
+ 0% {
+ opacity: 0;
+ transform: scale(0.7);
+ }
+
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+.visible {
+ visibility: visible;
+}
+
+.collapse {
+ visibility: collapse;
+}
+
+.static {
+ position: static;
+}
+
+.fixed {
+ position: fixed;
+}
+
+.absolute {
+ position: absolute;
+}
+
+.relative {
+ position: relative;
+}
+
+.sticky {
+ position: sticky;
+}
+
+.my-3 {
+ margin-top: 0.75rem;
+ margin-bottom: 0.75rem;
+}
+
+.mb-2 {
+ margin-bottom: 0.5rem;
+}
+
+.block {
+ display: block;
+}
+
+.inline-block {
+ display: inline-block;
+}
+
+.inline {
+ display: inline;
+}
+
+.flex {
+ display: flex;
+}
+
+.table {
+ display: table;
+}
+
+.hidden {
+ display: none;
+}
+
+.h-full {
+ height: 100%;
+}
+
+.w-full {
+ width: 100%;
+}
+
+.max-w-sm {
+ max-width: 24rem;
+}
+
+.transform {
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.resize {
+ resize: both;
+}
+
+.flex-row {
+ flex-direction: row;
+}
+
+.flex-col {
+ flex-direction: column;
+}
+
+.items-center {
+ align-items: center;
+}
+
+.justify-center {
+ justify-content: center;
+}
+
+.justify-between {
+ justify-content: space-between;
+}
+
+.justify-around {
+ justify-content: space-around;
+}
+
+.justify-evenly {
+ justify-content: space-evenly;
+}
+
+.space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.rounded-lg {
+ border-radius: 0.5rem;
+}
+
+.bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+}
+
+.p-6 {
+ padding: 1.5rem;
+}
+
+.text-gray-700 {
+ --tw-text-opacity: 1;
+ color: rgb(55 65 81 / var(--tw-text-opacity));
+}
+
+.shadow-lg {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.outline {
+ outline-style: solid;
+}
+
+.blur {
+ --tw-blur: blur(8px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.filter {
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+label.form-entry {
+ margin-bottom: 0.5rem;
+ display: inline-block;
+ --tw-text-opacity: 1;
+ color: rgb(55 65 81 / var(--tw-text-opacity));
+}
+
+input.form-entry {
+ margin: 0px;
+ display: block;
+ width: 100%;
+ border-radius: 0.25rem;
+ border-width: 1px;
+ border-style: solid;
+ --tw-border-opacity: 1;
+ border-color: rgb(209 213 219 / var(--tw-border-opacity));
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+ background-clip: padding-box;
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ padding-top: 0.375rem;
+ padding-bottom: 0.375rem;
+ font-size: 1rem;
+ line-height: 1.5rem;
+ font-weight: 400;
+ --tw-text-opacity: 1;
+ color: rgb(55 65 81 / var(--tw-text-opacity));
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+ transition-duration: 150ms;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+input.form-entry:focus {
+ --tw-border-opacity: 1;
+ border-color: rgb(37 99 235 / var(--tw-border-opacity));
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+ --tw-text-opacity: 1;
+ color: rgb(55 65 81 / var(--tw-text-opacity));
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+small.form-entry {
+ margin-top: 0.25rem;
+ display: block;
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ padding-top: 0.375rem;
+ padding-bottom: 0.375rem;
+ font-size: 0.75rem;
+ line-height: 1rem;
+ --tw-text-opacity: 1;
+ color: rgb(75 85 99 / var(--tw-text-opacity));
+}
+
+button.save-btn {
+ display: inline-block;
+ border-radius: 0.25rem;
+ --tw-bg-opacity: 1;
+ background-color: rgb(37 99 235 / var(--tw-bg-opacity));
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ padding-top: 0.625rem;
+ padding-bottom: 0.625rem;
+ font-size: 0.75rem;
+ line-height: 1rem;
+ font-weight: 500;
+ text-transform: uppercase;
+ line-height: 1.25;
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+ transition-duration: 150ms;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+button.save-btn:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity));
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+button.save-btn:focus {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity));
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+button.save-btn:active {
+ --tw-bg-opacity: 1;
+ background-color: rgb(30 64 175 / var(--tw-bg-opacity));
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
\ No newline at end of file
diff --git a/Source/loaderConfigurator/src/style.css b/Source/loaderConfigurator/src/style.css
new file mode 100644
index 00000000..24f6deb3
--- /dev/null
+++ b/Source/loaderConfigurator/src/style.css
@@ -0,0 +1,19 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+label.form-entry {
+ @apply inline-block mb-2 text-gray-700;
+}
+
+input.form-entry {
+ @apply block w-full px-3 py-1.5 text-base font-normal text-gray-700 bg-white bg-clip-padding border border-solid border-gray-300 rounded transition ease-in-out m-0 focus:text-gray-700 focus:bg-white focus:border-blue-600 focus:outline-none;
+}
+
+small.form-entry {
+ @apply block mt-1 text-xs text-gray-600 px-3 py-1.5;
+}
+
+button.save-btn {
+ @apply inline-block px-6 py-2.5 bg-blue-600 text-white font-medium text-xs leading-tight uppercase rounded shadow-md hover:bg-blue-700 hover:shadow-lg focus:bg-blue-700 focus:shadow-lg focus:outline-none focus:ring-0 active:bg-blue-800 active:shadow-lg transition duration-150 ease-in-out;
+}
\ No newline at end of file
diff --git a/Source/loaderConfigurator/tailwind.config.js b/Source/loaderConfigurator/tailwind.config.js
new file mode 100644
index 00000000..a3c23427
--- /dev/null
+++ b/Source/loaderConfigurator/tailwind.config.js
@@ -0,0 +1,10 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ content: ['./src/*.html', './node_modules/tw-elements/dist/js/**/*.js'],
+ theme: {
+ extend: {},
+ },
+ plugins: [
+ require('tw-elements/dist/plugin')
+ ],
+}
diff --git a/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp b/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp
index 94f8c4a0..ca1308e6 100644
--- a/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp
+++ b/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp
@@ -412,7 +412,7 @@ void Governor::Main(void* args) {
bool GPUThrottled = false;
while (self->m_running) {
- bool shouldUpdateContext = update_ticks++ >= UPDATE_CONTEXT_RATE;
+ bool shouldUpdateContext = ++update_ticks >= UPDATE_CONTEXT_RATE;
if (shouldUpdateContext) {
update_ticks = 0;
uint32_t hz = Clocks::GetCurrentHz(SysClkModule_GPU);